constify to_rcmd
[external/binutils.git] / gdb / remote.c
1 /* Remote target communications for serial-line targets in custom GDB protocol
2
3    Copyright (C) 1988-2014 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 <string.h>
24 #include <ctype.h>
25 #include <fcntl.h>
26 #include "inferior.h"
27 #include "infrun.h"
28 #include "bfd.h"
29 #include "symfile.h"
30 #include "exceptions.h"
31 #include "target.h"
32 /*#include "terminal.h" */
33 #include "gdbcmd.h"
34 #include "objfiles.h"
35 #include "gdb-stabs.h"
36 #include "gdbthread.h"
37 #include "remote.h"
38 #include "remote-notif.h"
39 #include "regcache.h"
40 #include "value.h"
41 #include "gdb_assert.h"
42 #include "observer.h"
43 #include "solib.h"
44 #include "cli/cli-decode.h"
45 #include "cli/cli-setshow.h"
46 #include "target-descriptions.h"
47 #include "gdb_bfd.h"
48 #include "filestuff.h"
49 #include "rsp-low.h"
50
51 #include <sys/time.h>
52
53 #include "event-loop.h"
54 #include "event-top.h"
55 #include "inf-loop.h"
56
57 #include <signal.h>
58 #include "serial.h"
59
60 #include "gdbcore.h" /* for exec_bfd */
61
62 #include "remote-fileio.h"
63 #include "gdb/fileio.h"
64 #include <sys/stat.h>
65 #include "xml-support.h"
66
67 #include "memory-map.h"
68
69 #include "tracepoint.h"
70 #include "ax.h"
71 #include "ax-gdb.h"
72 #include "agent.h"
73 #include "btrace.h"
74
75 /* Temp hacks for tracepoint encoding migration.  */
76 static char *target_buf;
77 static long target_buf_size;
78
79 /* The size to align memory write packets, when practical.  The protocol
80    does not guarantee any alignment, and gdb will generate short
81    writes and unaligned writes, but even as a best-effort attempt this
82    can improve bulk transfers.  For instance, if a write is misaligned
83    relative to the target's data bus, the stub may need to make an extra
84    round trip fetching data from the target.  This doesn't make a
85    huge difference, but it's easy to do, so we try to be helpful.
86
87    The alignment chosen is arbitrary; usually data bus width is
88    important here, not the possibly larger cache line size.  */
89 enum { REMOTE_ALIGN_WRITES = 16 };
90
91 /* Prototypes for local functions.  */
92 static void async_cleanup_sigint_signal_handler (void *dummy);
93 static int getpkt_sane (char **buf, long *sizeof_buf, int forever);
94 static int getpkt_or_notif_sane (char **buf, long *sizeof_buf,
95                                  int forever, int *is_notif);
96
97 static void async_handle_remote_sigint (int);
98 static void async_handle_remote_sigint_twice (int);
99
100 static void remote_files_info (struct target_ops *ignore);
101
102 static void remote_prepare_to_store (struct target_ops *self,
103                                      struct regcache *regcache);
104
105 static void remote_open (char *name, int from_tty);
106
107 static void extended_remote_open (char *name, int from_tty);
108
109 static void remote_open_1 (char *, int, struct target_ops *, int extended_p);
110
111 static void remote_close (struct target_ops *self);
112
113 static void remote_mourn (struct target_ops *ops);
114
115 static void extended_remote_restart (void);
116
117 static void extended_remote_mourn (struct target_ops *);
118
119 static void remote_mourn_1 (struct target_ops *);
120
121 static void remote_send (char **buf, long *sizeof_buf_p);
122
123 static int readchar (int timeout);
124
125 static void remote_serial_write (const char *str, int len);
126
127 static void remote_kill (struct target_ops *ops);
128
129 static int remote_can_async_p (struct target_ops *);
130
131 static int remote_is_async_p (struct target_ops *);
132
133 static void remote_async (struct target_ops *ops,
134                           void (*callback) (enum inferior_event_type event_type,
135                                             void *context),
136                           void *context);
137
138 static void sync_remote_interrupt_twice (int signo);
139
140 static void interrupt_query (void);
141
142 static void set_general_thread (struct ptid ptid);
143 static void set_continue_thread (struct ptid ptid);
144
145 static void get_offsets (void);
146
147 static void skip_frame (void);
148
149 static long read_frame (char **buf_p, long *sizeof_buf);
150
151 static int hexnumlen (ULONGEST num);
152
153 static void init_remote_ops (void);
154
155 static void init_extended_remote_ops (void);
156
157 static void remote_stop (struct target_ops *self, ptid_t);
158
159 static int stubhex (int ch);
160
161 static int hexnumstr (char *, ULONGEST);
162
163 static int hexnumnstr (char *, ULONGEST, int);
164
165 static CORE_ADDR remote_address_masked (CORE_ADDR);
166
167 static void print_packet (char *);
168
169 static void compare_sections_command (char *, int);
170
171 static void packet_command (char *, int);
172
173 static int stub_unpack_int (char *buff, int fieldlength);
174
175 static ptid_t remote_current_thread (ptid_t oldptid);
176
177 static void remote_find_new_threads (void);
178
179 static int putpkt_binary (char *buf, int cnt);
180
181 static void check_binary_download (CORE_ADDR addr);
182
183 struct packet_config;
184
185 static void show_packet_config_cmd (struct packet_config *config);
186
187 static void 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 struct remote_state;
198 static int remote_get_trace_status (struct target_ops *self,
199                                     struct trace_status *ts);
200
201 static int remote_upload_tracepoints (struct target_ops *self,
202                                       struct uploaded_tp **utpp);
203
204 static int remote_upload_trace_state_variables (struct target_ops *self,
205                                                 struct uploaded_tsv **utsvp);
206   
207 static void remote_query_supported (void);
208
209 static void remote_check_symbols (void);
210
211 void _initialize_remote (void);
212
213 struct stop_reply;
214 static void stop_reply_xfree (struct stop_reply *);
215 static void remote_parse_stop_reply (char *, struct stop_reply *);
216 static void push_stop_reply (struct stop_reply *);
217 static void discard_pending_stop_replies_in_queue (struct remote_state *);
218 static int peek_stop_reply (ptid_t ptid);
219
220 static void remote_async_inferior_event_handler (gdb_client_data);
221
222 static void remote_terminal_ours (struct target_ops *self);
223
224 static int remote_read_description_p (struct target_ops *target);
225
226 static void remote_console_output (char *msg);
227
228 static int remote_supports_cond_breakpoints (struct target_ops *self);
229
230 static int remote_can_run_breakpoint_commands (struct target_ops *self);
231
232 /* For "remote".  */
233
234 static struct cmd_list_element *remote_cmdlist;
235
236 /* For "set remote" and "show remote".  */
237
238 static struct cmd_list_element *remote_set_cmdlist;
239 static struct cmd_list_element *remote_show_cmdlist;
240
241 /* Stub vCont actions support.
242
243    Each field is a boolean flag indicating whether the stub reports
244    support for the corresponding action.  */
245
246 struct vCont_action_support
247 {
248   /* vCont;t */
249   int t;
250
251   /* vCont;r */
252   int r;
253 };
254
255 /* Controls whether GDB is willing to use range stepping.  */
256
257 static int use_range_stepping = 1;
258
259 #define OPAQUETHREADBYTES 8
260
261 /* a 64 bit opaque identifier */
262 typedef unsigned char threadref[OPAQUETHREADBYTES];
263
264 /* About this many threadisds fit in a packet.  */
265
266 #define MAXTHREADLISTRESULTS 32
267
268 /* Description of the remote protocol state for the currently
269    connected target.  This is per-target state, and independent of the
270    selected architecture.  */
271
272 struct remote_state
273 {
274   /* A buffer to use for incoming packets, and its current size.  The
275      buffer is grown dynamically for larger incoming packets.
276      Outgoing packets may also be constructed in this buffer.
277      BUF_SIZE is always at least REMOTE_PACKET_SIZE;
278      REMOTE_PACKET_SIZE should be used to limit the length of outgoing
279      packets.  */
280   char *buf;
281   long buf_size;
282
283   /* True if we're going through initial connection setup (finding out
284      about the remote side's threads, relocating symbols, etc.).  */
285   int starting_up;
286
287   /* If we negotiated packet size explicitly (and thus can bypass
288      heuristics for the largest packet size that will not overflow
289      a buffer in the stub), this will be set to that packet size.
290      Otherwise zero, meaning to use the guessed size.  */
291   long explicit_packet_size;
292
293   /* remote_wait is normally called when the target is running and
294      waits for a stop reply packet.  But sometimes we need to call it
295      when the target is already stopped.  We can send a "?" packet
296      and have remote_wait read the response.  Or, if we already have
297      the response, we can stash it in BUF and tell remote_wait to
298      skip calling getpkt.  This flag is set when BUF contains a
299      stop reply packet and the target is not waiting.  */
300   int cached_wait_status;
301
302   /* True, if in no ack mode.  That is, neither GDB nor the stub will
303      expect acks from each other.  The connection is assumed to be
304      reliable.  */
305   int noack_mode;
306
307   /* True if we're connected in extended remote mode.  */
308   int extended;
309
310   /* True if we resumed the target and we're waiting for the target to
311      stop.  In the mean time, we can't start another command/query.
312      The remote server wouldn't be ready to process it, so we'd
313      timeout waiting for a reply that would never come and eventually
314      we'd close the connection.  This can happen in asynchronous mode
315      because we allow GDB commands while the target is running.  */
316   int waiting_for_stop_reply;
317
318   /* The status of the stub support for the various vCont actions.  */
319   struct vCont_action_support supports_vCont;
320
321   /* Nonzero if the user has pressed Ctrl-C, but the target hasn't
322      responded to that.  */
323   int ctrlc_pending_p;
324
325   /* Descriptor for I/O to remote machine.  Initialize it to NULL so that
326      remote_open knows that we don't have a file open when the program
327      starts.  */
328   struct serial *remote_desc;
329
330   /* These are the threads which we last sent to the remote system.  The
331      TID member will be -1 for all or -2 for not sent yet.  */
332   ptid_t general_thread;
333   ptid_t continue_thread;
334
335   /* This is the traceframe which we last selected on the remote system.
336      It will be -1 if no traceframe is selected.  */
337   int remote_traceframe_number;
338
339   char *last_pass_packet;
340
341   /* The last QProgramSignals packet sent to the target.  We bypass
342      sending a new program signals list down to the target if the new
343      packet is exactly the same as the last we sent.  IOW, we only let
344      the target know about program signals list changes.  */
345   char *last_program_signals_packet;
346
347   enum gdb_signal last_sent_signal;
348
349   int last_sent_step;
350
351   char *finished_object;
352   char *finished_annex;
353   ULONGEST finished_offset;
354
355   /* Should we try the 'ThreadInfo' query packet?
356
357      This variable (NOT available to the user: auto-detect only!)
358      determines whether GDB will use the new, simpler "ThreadInfo"
359      query or the older, more complex syntax for thread queries.
360      This is an auto-detect variable (set to true at each connect,
361      and set to false when the target fails to recognize it).  */
362   int use_threadinfo_query;
363   int use_threadextra_query;
364
365   void (*async_client_callback) (enum inferior_event_type event_type,
366                                  void *context);
367   void *async_client_context;
368
369   /* This is set to the data address of the access causing the target
370      to stop for a watchpoint.  */
371   CORE_ADDR remote_watch_data_address;
372
373   /* This is non-zero if target stopped for a watchpoint.  */
374   int remote_stopped_by_watchpoint_p;
375
376   threadref echo_nextthread;
377   threadref nextthread;
378   threadref resultthreadlist[MAXTHREADLISTRESULTS];
379
380   /* The state of remote notification.  */
381   struct remote_notif_state *notif_state;
382 };
383
384 /* Private data that we'll store in (struct thread_info)->private.  */
385 struct private_thread_info
386 {
387   char *extra;
388   int core;
389 };
390
391 static void
392 free_private_thread_info (struct private_thread_info *info)
393 {
394   xfree (info->extra);
395   xfree (info);
396 }
397
398 /* This data could be associated with a target, but we do not always
399    have access to the current target when we need it, so for now it is
400    static.  This will be fine for as long as only one target is in use
401    at a time.  */
402 static struct remote_state *remote_state;
403
404 static struct remote_state *
405 get_remote_state_raw (void)
406 {
407   return remote_state;
408 }
409
410 /* Allocate a new struct remote_state with xmalloc, initialize it, and
411    return it.  */
412
413 static struct remote_state *
414 new_remote_state (void)
415 {
416   struct remote_state *result = XCNEW (struct remote_state);
417
418   /* The default buffer size is unimportant; it will be expanded
419      whenever a larger buffer is needed. */
420   result->buf_size = 400;
421   result->buf = xmalloc (result->buf_size);
422   result->remote_traceframe_number = -1;
423   result->last_sent_signal = GDB_SIGNAL_0;
424
425   return result;
426 }
427
428 /* Description of the remote protocol for a given architecture.  */
429
430 struct packet_reg
431 {
432   long offset; /* Offset into G packet.  */
433   long regnum; /* GDB's internal register number.  */
434   LONGEST pnum; /* Remote protocol register number.  */
435   int in_g_packet; /* Always part of G packet.  */
436   /* long size in bytes;  == register_size (target_gdbarch (), regnum);
437      at present.  */
438   /* char *name; == gdbarch_register_name (target_gdbarch (), regnum);
439      at present.  */
440 };
441
442 struct remote_arch_state
443 {
444   /* Description of the remote protocol registers.  */
445   long sizeof_g_packet;
446
447   /* Description of the remote protocol registers indexed by REGNUM
448      (making an array gdbarch_num_regs in size).  */
449   struct packet_reg *regs;
450
451   /* This is the size (in chars) of the first response to the ``g''
452      packet.  It is used as a heuristic when determining the maximum
453      size of memory-read and memory-write packets.  A target will
454      typically only reserve a buffer large enough to hold the ``g''
455      packet.  The size does not include packet overhead (headers and
456      trailers).  */
457   long actual_register_packet_size;
458
459   /* This is the maximum size (in chars) of a non read/write packet.
460      It is also used as a cap on the size of read/write packets.  */
461   long remote_packet_size;
462 };
463
464 /* Utility: generate error from an incoming stub packet.  */
465 static void
466 trace_error (char *buf)
467 {
468   if (*buf++ != 'E')
469     return;                     /* not an error msg */
470   switch (*buf)
471     {
472     case '1':                   /* malformed packet error */
473       if (*++buf == '0')        /*   general case: */
474         error (_("remote.c: error in outgoing packet."));
475       else
476         error (_("remote.c: error in outgoing packet at field #%ld."),
477                strtol (buf, NULL, 16));
478     default:
479       error (_("Target returns error code '%s'."), buf);
480     }
481 }
482
483 /* Utility: wait for reply from stub, while accepting "O" packets.  */
484 static char *
485 remote_get_noisy_reply (char **buf_p,
486                         long *sizeof_buf)
487 {
488   do                            /* Loop on reply from remote stub.  */
489     {
490       char *buf;
491
492       QUIT;                     /* Allow user to bail out with ^C.  */
493       getpkt (buf_p, sizeof_buf, 0);
494       buf = *buf_p;
495       if (buf[0] == 'E')
496         trace_error (buf);
497       else if (strncmp (buf, "qRelocInsn:", strlen ("qRelocInsn:")) == 0)
498         {
499           ULONGEST ul;
500           CORE_ADDR from, to, org_to;
501           char *p, *pp;
502           int adjusted_size = 0;
503           volatile struct gdb_exception ex;
504
505           p = buf + strlen ("qRelocInsn:");
506           pp = unpack_varlen_hex (p, &ul);
507           if (*pp != ';')
508             error (_("invalid qRelocInsn packet: %s"), buf);
509           from = ul;
510
511           p = pp + 1;
512           unpack_varlen_hex (p, &ul);
513           to = ul;
514
515           org_to = to;
516
517           TRY_CATCH (ex, RETURN_MASK_ALL)
518             {
519               gdbarch_relocate_instruction (target_gdbarch (), &to, from);
520             }
521           if (ex.reason >= 0)
522             {
523               adjusted_size = to - org_to;
524
525               xsnprintf (buf, *sizeof_buf, "qRelocInsn:%x", adjusted_size);
526               putpkt (buf);
527             }
528           else if (ex.reason < 0 && ex.error == MEMORY_ERROR)
529             {
530               /* Propagate memory errors silently back to the target.
531                  The stub may have limited the range of addresses we
532                  can write to, for example.  */
533               putpkt ("E01");
534             }
535           else
536             {
537               /* Something unexpectedly bad happened.  Be verbose so
538                  we can tell what, and propagate the error back to the
539                  stub, so it doesn't get stuck waiting for a
540                  response.  */
541               exception_fprintf (gdb_stderr, ex,
542                                  _("warning: relocating instruction: "));
543               putpkt ("E01");
544             }
545         }
546       else if (buf[0] == 'O' && buf[1] != 'K')
547         remote_console_output (buf + 1);        /* 'O' message from stub */
548       else
549         return buf;             /* Here's the actual reply.  */
550     }
551   while (1);
552 }
553
554 /* Handle for retreving the remote protocol data from gdbarch.  */
555 static struct gdbarch_data *remote_gdbarch_data_handle;
556
557 static struct remote_arch_state *
558 get_remote_arch_state (void)
559 {
560   return gdbarch_data (target_gdbarch (), remote_gdbarch_data_handle);
561 }
562
563 /* Fetch the global remote target state.  */
564
565 static struct remote_state *
566 get_remote_state (void)
567 {
568   /* Make sure that the remote architecture state has been
569      initialized, because doing so might reallocate rs->buf.  Any
570      function which calls getpkt also needs to be mindful of changes
571      to rs->buf, but this call limits the number of places which run
572      into trouble.  */
573   get_remote_arch_state ();
574
575   return get_remote_state_raw ();
576 }
577
578 static int
579 compare_pnums (const void *lhs_, const void *rhs_)
580 {
581   const struct packet_reg * const *lhs = lhs_;
582   const struct packet_reg * const *rhs = rhs_;
583
584   if ((*lhs)->pnum < (*rhs)->pnum)
585     return -1;
586   else if ((*lhs)->pnum == (*rhs)->pnum)
587     return 0;
588   else
589     return 1;
590 }
591
592 static int
593 map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
594 {
595   int regnum, num_remote_regs, offset;
596   struct packet_reg **remote_regs;
597
598   for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
599     {
600       struct packet_reg *r = &regs[regnum];
601
602       if (register_size (gdbarch, regnum) == 0)
603         /* Do not try to fetch zero-sized (placeholder) registers.  */
604         r->pnum = -1;
605       else
606         r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
607
608       r->regnum = regnum;
609     }
610
611   /* Define the g/G packet format as the contents of each register
612      with a remote protocol number, in order of ascending protocol
613      number.  */
614
615   remote_regs = alloca (gdbarch_num_regs (gdbarch)
616                         * sizeof (struct packet_reg *));
617   for (num_remote_regs = 0, regnum = 0;
618        regnum < gdbarch_num_regs (gdbarch);
619        regnum++)
620     if (regs[regnum].pnum != -1)
621       remote_regs[num_remote_regs++] = &regs[regnum];
622
623   qsort (remote_regs, num_remote_regs, sizeof (struct packet_reg *),
624          compare_pnums);
625
626   for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
627     {
628       remote_regs[regnum]->in_g_packet = 1;
629       remote_regs[regnum]->offset = offset;
630       offset += register_size (gdbarch, remote_regs[regnum]->regnum);
631     }
632
633   return offset;
634 }
635
636 /* Given the architecture described by GDBARCH, return the remote
637    protocol register's number and the register's offset in the g/G
638    packets of GDB register REGNUM, in PNUM and POFFSET respectively.
639    If the target does not have a mapping for REGNUM, return false,
640    otherwise, return true.  */
641
642 int
643 remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
644                                    int *pnum, int *poffset)
645 {
646   int sizeof_g_packet;
647   struct packet_reg *regs;
648   struct cleanup *old_chain;
649
650   gdb_assert (regnum < gdbarch_num_regs (gdbarch));
651
652   regs = xcalloc (gdbarch_num_regs (gdbarch), sizeof (struct packet_reg));
653   old_chain = make_cleanup (xfree, regs);
654
655   sizeof_g_packet = map_regcache_remote_table (gdbarch, regs);
656
657   *pnum = regs[regnum].pnum;
658   *poffset = regs[regnum].offset;
659
660   do_cleanups (old_chain);
661
662   return *pnum != -1;
663 }
664
665 static void *
666 init_remote_state (struct gdbarch *gdbarch)
667 {
668   struct remote_state *rs = get_remote_state_raw ();
669   struct remote_arch_state *rsa;
670
671   rsa = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct remote_arch_state);
672
673   /* Use the architecture to build a regnum<->pnum table, which will be
674      1:1 unless a feature set specifies otherwise.  */
675   rsa->regs = GDBARCH_OBSTACK_CALLOC (gdbarch,
676                                       gdbarch_num_regs (gdbarch),
677                                       struct packet_reg);
678
679   /* Record the maximum possible size of the g packet - it may turn out
680      to be smaller.  */
681   rsa->sizeof_g_packet = map_regcache_remote_table (gdbarch, rsa->regs);
682
683   /* Default maximum number of characters in a packet body.  Many
684      remote stubs have a hardwired buffer size of 400 bytes
685      (c.f. BUFMAX in m68k-stub.c and i386-stub.c).  BUFMAX-1 is used
686      as the maximum packet-size to ensure that the packet and an extra
687      NUL character can always fit in the buffer.  This stops GDB
688      trashing stubs that try to squeeze an extra NUL into what is
689      already a full buffer (As of 1999-12-04 that was most stubs).  */
690   rsa->remote_packet_size = 400 - 1;
691
692   /* This one is filled in when a ``g'' packet is received.  */
693   rsa->actual_register_packet_size = 0;
694
695   /* Should rsa->sizeof_g_packet needs more space than the
696      default, adjust the size accordingly.  Remember that each byte is
697      encoded as two characters.  32 is the overhead for the packet
698      header / footer.  NOTE: cagney/1999-10-26: I suspect that 8
699      (``$NN:G...#NN'') is a better guess, the below has been padded a
700      little.  */
701   if (rsa->sizeof_g_packet > ((rsa->remote_packet_size - 32) / 2))
702     rsa->remote_packet_size = (rsa->sizeof_g_packet * 2 + 32);
703
704   /* Make sure that the packet buffer is plenty big enough for
705      this architecture.  */
706   if (rs->buf_size < rsa->remote_packet_size)
707     {
708       rs->buf_size = 2 * rsa->remote_packet_size;
709       rs->buf = xrealloc (rs->buf, rs->buf_size);
710     }
711
712   return rsa;
713 }
714
715 /* Return the current allowed size of a remote packet.  This is
716    inferred from the current architecture, and should be used to
717    limit the length of outgoing packets.  */
718 static long
719 get_remote_packet_size (void)
720 {
721   struct remote_state *rs = get_remote_state ();
722   struct remote_arch_state *rsa = get_remote_arch_state ();
723
724   if (rs->explicit_packet_size)
725     return rs->explicit_packet_size;
726
727   return rsa->remote_packet_size;
728 }
729
730 static struct packet_reg *
731 packet_reg_from_regnum (struct remote_arch_state *rsa, long regnum)
732 {
733   if (regnum < 0 && regnum >= gdbarch_num_regs (target_gdbarch ()))
734     return NULL;
735   else
736     {
737       struct packet_reg *r = &rsa->regs[regnum];
738
739       gdb_assert (r->regnum == regnum);
740       return r;
741     }
742 }
743
744 static struct packet_reg *
745 packet_reg_from_pnum (struct remote_arch_state *rsa, LONGEST pnum)
746 {
747   int i;
748
749   for (i = 0; i < gdbarch_num_regs (target_gdbarch ()); i++)
750     {
751       struct packet_reg *r = &rsa->regs[i];
752
753       if (r->pnum == pnum)
754         return r;
755     }
756   return NULL;
757 }
758
759 static struct target_ops remote_ops;
760
761 static struct target_ops extended_remote_ops;
762
763 /* FIXME: cagney/1999-09-23: Even though getpkt was called with
764    ``forever'' still use the normal timeout mechanism.  This is
765    currently used by the ASYNC code to guarentee that target reads
766    during the initial connect always time-out.  Once getpkt has been
767    modified to return a timeout indication and, in turn
768    remote_wait()/wait_for_inferior() have gained a timeout parameter
769    this can go away.  */
770 static int wait_forever_enabled_p = 1;
771
772 /* Allow the user to specify what sequence to send to the remote
773    when he requests a program interruption: Although ^C is usually
774    what remote systems expect (this is the default, here), it is
775    sometimes preferable to send a break.  On other systems such
776    as the Linux kernel, a break followed by g, which is Magic SysRq g
777    is required in order to interrupt the execution.  */
778 const char interrupt_sequence_control_c[] = "Ctrl-C";
779 const char interrupt_sequence_break[] = "BREAK";
780 const char interrupt_sequence_break_g[] = "BREAK-g";
781 static const char *const interrupt_sequence_modes[] =
782   {
783     interrupt_sequence_control_c,
784     interrupt_sequence_break,
785     interrupt_sequence_break_g,
786     NULL
787   };
788 static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
789
790 static void
791 show_interrupt_sequence (struct ui_file *file, int from_tty,
792                          struct cmd_list_element *c,
793                          const char *value)
794 {
795   if (interrupt_sequence_mode == interrupt_sequence_control_c)
796     fprintf_filtered (file,
797                       _("Send the ASCII ETX character (Ctrl-c) "
798                         "to the remote target to interrupt the "
799                         "execution of the program.\n"));
800   else if (interrupt_sequence_mode == interrupt_sequence_break)
801     fprintf_filtered (file,
802                       _("send a break signal to the remote target "
803                         "to interrupt the execution of the program.\n"));
804   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
805     fprintf_filtered (file,
806                       _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
807                         "the remote target to interrupt the execution "
808                         "of Linux kernel.\n"));
809   else
810     internal_error (__FILE__, __LINE__,
811                     _("Invalid value for interrupt_sequence_mode: %s."),
812                     interrupt_sequence_mode);
813 }
814
815 /* This boolean variable specifies whether interrupt_sequence is sent
816    to the remote target when gdb connects to it.
817    This is mostly needed when you debug the Linux kernel: The Linux kernel
818    expects BREAK g which is Magic SysRq g for connecting gdb.  */
819 static int interrupt_on_connect = 0;
820
821 /* This variable is used to implement the "set/show remotebreak" commands.
822    Since these commands are now deprecated in favor of "set/show remote
823    interrupt-sequence", it no longer has any effect on the code.  */
824 static int remote_break;
825
826 static void
827 set_remotebreak (char *args, int from_tty, struct cmd_list_element *c)
828 {
829   if (remote_break)
830     interrupt_sequence_mode = interrupt_sequence_break;
831   else
832     interrupt_sequence_mode = interrupt_sequence_control_c;
833 }
834
835 static void
836 show_remotebreak (struct ui_file *file, int from_tty,
837                   struct cmd_list_element *c,
838                   const char *value)
839 {
840 }
841
842 /* This variable sets the number of bits in an address that are to be
843    sent in a memory ("M" or "m") packet.  Normally, after stripping
844    leading zeros, the entire address would be sent.  This variable
845    restricts the address to REMOTE_ADDRESS_SIZE bits.  HISTORY: The
846    initial implementation of remote.c restricted the address sent in
847    memory packets to ``host::sizeof long'' bytes - (typically 32
848    bits).  Consequently, for 64 bit targets, the upper 32 bits of an
849    address was never sent.  Since fixing this bug may cause a break in
850    some remote targets this variable is principly provided to
851    facilitate backward compatibility.  */
852
853 static unsigned int remote_address_size;
854
855 /* Temporary to track who currently owns the terminal.  See
856    remote_terminal_* for more details.  */
857
858 static int remote_async_terminal_ours_p;
859
860 /* The executable file to use for "run" on the remote side.  */
861
862 static char *remote_exec_file = "";
863
864 \f
865 /* User configurable variables for the number of characters in a
866    memory read/write packet.  MIN (rsa->remote_packet_size,
867    rsa->sizeof_g_packet) is the default.  Some targets need smaller
868    values (fifo overruns, et.al.) and some users need larger values
869    (speed up transfers).  The variables ``preferred_*'' (the user
870    request), ``current_*'' (what was actually set) and ``forced_*''
871    (Positive - a soft limit, negative - a hard limit).  */
872
873 struct memory_packet_config
874 {
875   char *name;
876   long size;
877   int fixed_p;
878 };
879
880 /* Compute the current size of a read/write packet.  Since this makes
881    use of ``actual_register_packet_size'' the computation is dynamic.  */
882
883 static long
884 get_memory_packet_size (struct memory_packet_config *config)
885 {
886   struct remote_state *rs = get_remote_state ();
887   struct remote_arch_state *rsa = get_remote_arch_state ();
888
889   /* NOTE: The somewhat arbitrary 16k comes from the knowledge (folk
890      law?) that some hosts don't cope very well with large alloca()
891      calls.  Eventually the alloca() code will be replaced by calls to
892      xmalloc() and make_cleanups() allowing this restriction to either
893      be lifted or removed.  */
894 #ifndef MAX_REMOTE_PACKET_SIZE
895 #define MAX_REMOTE_PACKET_SIZE 16384
896 #endif
897   /* NOTE: 20 ensures we can write at least one byte.  */
898 #ifndef MIN_REMOTE_PACKET_SIZE
899 #define MIN_REMOTE_PACKET_SIZE 20
900 #endif
901   long what_they_get;
902   if (config->fixed_p)
903     {
904       if (config->size <= 0)
905         what_they_get = MAX_REMOTE_PACKET_SIZE;
906       else
907         what_they_get = config->size;
908     }
909   else
910     {
911       what_they_get = get_remote_packet_size ();
912       /* Limit the packet to the size specified by the user.  */
913       if (config->size > 0
914           && what_they_get > config->size)
915         what_they_get = config->size;
916
917       /* Limit it to the size of the targets ``g'' response unless we have
918          permission from the stub to use a larger packet size.  */
919       if (rs->explicit_packet_size == 0
920           && rsa->actual_register_packet_size > 0
921           && what_they_get > rsa->actual_register_packet_size)
922         what_they_get = rsa->actual_register_packet_size;
923     }
924   if (what_they_get > MAX_REMOTE_PACKET_SIZE)
925     what_they_get = MAX_REMOTE_PACKET_SIZE;
926   if (what_they_get < MIN_REMOTE_PACKET_SIZE)
927     what_they_get = MIN_REMOTE_PACKET_SIZE;
928
929   /* Make sure there is room in the global buffer for this packet
930      (including its trailing NUL byte).  */
931   if (rs->buf_size < what_they_get + 1)
932     {
933       rs->buf_size = 2 * what_they_get;
934       rs->buf = xrealloc (rs->buf, 2 * what_they_get);
935     }
936
937   return what_they_get;
938 }
939
940 /* Update the size of a read/write packet.  If they user wants
941    something really big then do a sanity check.  */
942
943 static void
944 set_memory_packet_size (char *args, struct memory_packet_config *config)
945 {
946   int fixed_p = config->fixed_p;
947   long size = config->size;
948
949   if (args == NULL)
950     error (_("Argument required (integer, `fixed' or `limited')."));
951   else if (strcmp (args, "hard") == 0
952       || strcmp (args, "fixed") == 0)
953     fixed_p = 1;
954   else if (strcmp (args, "soft") == 0
955            || strcmp (args, "limit") == 0)
956     fixed_p = 0;
957   else
958     {
959       char *end;
960
961       size = strtoul (args, &end, 0);
962       if (args == end)
963         error (_("Invalid %s (bad syntax)."), config->name);
964 #if 0
965       /* Instead of explicitly capping the size of a packet to
966          MAX_REMOTE_PACKET_SIZE or dissallowing it, the user is
967          instead allowed to set the size to something arbitrarily
968          large.  */
969       if (size > MAX_REMOTE_PACKET_SIZE)
970         error (_("Invalid %s (too large)."), config->name);
971 #endif
972     }
973   /* Extra checks?  */
974   if (fixed_p && !config->fixed_p)
975     {
976       if (! query (_("The target may not be able to correctly handle a %s\n"
977                    "of %ld bytes. Change the packet size? "),
978                    config->name, size))
979         error (_("Packet size not changed."));
980     }
981   /* Update the config.  */
982   config->fixed_p = fixed_p;
983   config->size = size;
984 }
985
986 static void
987 show_memory_packet_size (struct memory_packet_config *config)
988 {
989   printf_filtered (_("The %s is %ld. "), config->name, config->size);
990   if (config->fixed_p)
991     printf_filtered (_("Packets are fixed at %ld bytes.\n"),
992                      get_memory_packet_size (config));
993   else
994     printf_filtered (_("Packets are limited to %ld bytes.\n"),
995                      get_memory_packet_size (config));
996 }
997
998 static struct memory_packet_config memory_write_packet_config =
999 {
1000   "memory-write-packet-size",
1001 };
1002
1003 static void
1004 set_memory_write_packet_size (char *args, int from_tty)
1005 {
1006   set_memory_packet_size (args, &memory_write_packet_config);
1007 }
1008
1009 static void
1010 show_memory_write_packet_size (char *args, int from_tty)
1011 {
1012   show_memory_packet_size (&memory_write_packet_config);
1013 }
1014
1015 static long
1016 get_memory_write_packet_size (void)
1017 {
1018   return get_memory_packet_size (&memory_write_packet_config);
1019 }
1020
1021 static struct memory_packet_config memory_read_packet_config =
1022 {
1023   "memory-read-packet-size",
1024 };
1025
1026 static void
1027 set_memory_read_packet_size (char *args, int from_tty)
1028 {
1029   set_memory_packet_size (args, &memory_read_packet_config);
1030 }
1031
1032 static void
1033 show_memory_read_packet_size (char *args, int from_tty)
1034 {
1035   show_memory_packet_size (&memory_read_packet_config);
1036 }
1037
1038 static long
1039 get_memory_read_packet_size (void)
1040 {
1041   long size = get_memory_packet_size (&memory_read_packet_config);
1042
1043   /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
1044      extra buffer size argument before the memory read size can be
1045      increased beyond this.  */
1046   if (size > get_remote_packet_size ())
1047     size = get_remote_packet_size ();
1048   return size;
1049 }
1050
1051 \f
1052 /* Generic configuration support for packets the stub optionally
1053    supports.  Allows the user to specify the use of the packet as well
1054    as allowing GDB to auto-detect support in the remote stub.  */
1055
1056 enum packet_support
1057   {
1058     PACKET_SUPPORT_UNKNOWN = 0,
1059     PACKET_ENABLE,
1060     PACKET_DISABLE
1061   };
1062
1063 struct packet_config
1064   {
1065     const char *name;
1066     const char *title;
1067
1068     /* If auto, GDB auto-detects support for this packet or feature,
1069        either through qSupported, or by trying the packet and looking
1070        at the response.  If true, GDB assumes the target supports this
1071        packet.  If false, the packet is disabled.  Configs that don't
1072        have an associated command always have this set to auto.  */
1073     enum auto_boolean detect;
1074
1075     /* Does the target support this packet?  */
1076     enum packet_support support;
1077   };
1078
1079 /* Analyze a packet's return value and update the packet config
1080    accordingly.  */
1081
1082 enum packet_result
1083 {
1084   PACKET_ERROR,
1085   PACKET_OK,
1086   PACKET_UNKNOWN
1087 };
1088
1089 static enum packet_support packet_config_support (struct packet_config *config);
1090 static enum packet_support packet_support (int packet);
1091
1092 static void
1093 show_packet_config_cmd (struct packet_config *config)
1094 {
1095   char *support = "internal-error";
1096
1097   switch (packet_config_support (config))
1098     {
1099     case PACKET_ENABLE:
1100       support = "enabled";
1101       break;
1102     case PACKET_DISABLE:
1103       support = "disabled";
1104       break;
1105     case PACKET_SUPPORT_UNKNOWN:
1106       support = "unknown";
1107       break;
1108     }
1109   switch (config->detect)
1110     {
1111     case AUTO_BOOLEAN_AUTO:
1112       printf_filtered (_("Support for the `%s' packet "
1113                          "is auto-detected, currently %s.\n"),
1114                        config->name, support);
1115       break;
1116     case AUTO_BOOLEAN_TRUE:
1117     case AUTO_BOOLEAN_FALSE:
1118       printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
1119                        config->name, support);
1120       break;
1121     }
1122 }
1123
1124 static void
1125 add_packet_config_cmd (struct packet_config *config, const char *name,
1126                        const char *title, int legacy)
1127 {
1128   char *set_doc;
1129   char *show_doc;
1130   char *cmd_name;
1131
1132   config->name = name;
1133   config->title = title;
1134   set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet",
1135                         name, title);
1136   show_doc = xstrprintf ("Show current use of remote "
1137                          "protocol `%s' (%s) packet",
1138                          name, title);
1139   /* set/show TITLE-packet {auto,on,off} */
1140   cmd_name = xstrprintf ("%s-packet", title);
1141   add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
1142                                 &config->detect, set_doc,
1143                                 show_doc, NULL, /* help_doc */
1144                                 NULL,
1145                                 show_remote_protocol_packet_cmd,
1146                                 &remote_set_cmdlist, &remote_show_cmdlist);
1147   /* The command code copies the documentation strings.  */
1148   xfree (set_doc);
1149   xfree (show_doc);
1150   /* set/show remote NAME-packet {auto,on,off} -- legacy.  */
1151   if (legacy)
1152     {
1153       char *legacy_name;
1154
1155       legacy_name = xstrprintf ("%s-packet", name);
1156       add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1157                      &remote_set_cmdlist);
1158       add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1159                      &remote_show_cmdlist);
1160     }
1161 }
1162
1163 static enum packet_result
1164 packet_check_result (const char *buf)
1165 {
1166   if (buf[0] != '\0')
1167     {
1168       /* The stub recognized the packet request.  Check that the
1169          operation succeeded.  */
1170       if (buf[0] == 'E'
1171           && isxdigit (buf[1]) && isxdigit (buf[2])
1172           && buf[3] == '\0')
1173         /* "Enn"  - definitly an error.  */
1174         return PACKET_ERROR;
1175
1176       /* Always treat "E." as an error.  This will be used for
1177          more verbose error messages, such as E.memtypes.  */
1178       if (buf[0] == 'E' && buf[1] == '.')
1179         return PACKET_ERROR;
1180
1181       /* The packet may or may not be OK.  Just assume it is.  */
1182       return PACKET_OK;
1183     }
1184   else
1185     /* The stub does not support the packet.  */
1186     return PACKET_UNKNOWN;
1187 }
1188
1189 static enum packet_result
1190 packet_ok (const char *buf, struct packet_config *config)
1191 {
1192   enum packet_result result;
1193
1194   if (config->detect != AUTO_BOOLEAN_TRUE
1195       && config->support == PACKET_DISABLE)
1196     internal_error (__FILE__, __LINE__,
1197                     _("packet_ok: attempt to use a disabled packet"));
1198
1199   result = packet_check_result (buf);
1200   switch (result)
1201     {
1202     case PACKET_OK:
1203     case PACKET_ERROR:
1204       /* The stub recognized the packet request.  */
1205       if (config->support == PACKET_SUPPORT_UNKNOWN)
1206         {
1207           if (remote_debug)
1208             fprintf_unfiltered (gdb_stdlog,
1209                                 "Packet %s (%s) is supported\n",
1210                                 config->name, config->title);
1211           config->support = PACKET_ENABLE;
1212         }
1213       break;
1214     case PACKET_UNKNOWN:
1215       /* The stub does not support the packet.  */
1216       if (config->detect == AUTO_BOOLEAN_AUTO
1217           && config->support == PACKET_ENABLE)
1218         {
1219           /* If the stub previously indicated that the packet was
1220              supported then there is a protocol error.  */
1221           error (_("Protocol error: %s (%s) conflicting enabled responses."),
1222                  config->name, config->title);
1223         }
1224       else if (config->detect == AUTO_BOOLEAN_TRUE)
1225         {
1226           /* The user set it wrong.  */
1227           error (_("Enabled packet %s (%s) not recognized by stub"),
1228                  config->name, config->title);
1229         }
1230
1231       if (remote_debug)
1232         fprintf_unfiltered (gdb_stdlog,
1233                             "Packet %s (%s) is NOT supported\n",
1234                             config->name, config->title);
1235       config->support = PACKET_DISABLE;
1236       break;
1237     }
1238
1239   return result;
1240 }
1241
1242 enum {
1243   PACKET_vCont = 0,
1244   PACKET_X,
1245   PACKET_qSymbol,
1246   PACKET_P,
1247   PACKET_p,
1248   PACKET_Z0,
1249   PACKET_Z1,
1250   PACKET_Z2,
1251   PACKET_Z3,
1252   PACKET_Z4,
1253   PACKET_vFile_open,
1254   PACKET_vFile_pread,
1255   PACKET_vFile_pwrite,
1256   PACKET_vFile_close,
1257   PACKET_vFile_unlink,
1258   PACKET_vFile_readlink,
1259   PACKET_qXfer_auxv,
1260   PACKET_qXfer_features,
1261   PACKET_qXfer_libraries,
1262   PACKET_qXfer_libraries_svr4,
1263   PACKET_qXfer_memory_map,
1264   PACKET_qXfer_spu_read,
1265   PACKET_qXfer_spu_write,
1266   PACKET_qXfer_osdata,
1267   PACKET_qXfer_threads,
1268   PACKET_qXfer_statictrace_read,
1269   PACKET_qXfer_traceframe_info,
1270   PACKET_qXfer_uib,
1271   PACKET_qGetTIBAddr,
1272   PACKET_qGetTLSAddr,
1273   PACKET_qSupported,
1274   PACKET_qTStatus,
1275   PACKET_QPassSignals,
1276   PACKET_QProgramSignals,
1277   PACKET_qCRC,
1278   PACKET_qSearch_memory,
1279   PACKET_vAttach,
1280   PACKET_vRun,
1281   PACKET_QStartNoAckMode,
1282   PACKET_vKill,
1283   PACKET_qXfer_siginfo_read,
1284   PACKET_qXfer_siginfo_write,
1285   PACKET_qAttached,
1286
1287   /* Support for conditional tracepoints.  */
1288   PACKET_ConditionalTracepoints,
1289
1290   /* Support for target-side breakpoint conditions.  */
1291   PACKET_ConditionalBreakpoints,
1292
1293   /* Support for target-side breakpoint commands.  */
1294   PACKET_BreakpointCommands,
1295
1296   /* Support for fast tracepoints.  */
1297   PACKET_FastTracepoints,
1298
1299   /* Support for static tracepoints.  */
1300   PACKET_StaticTracepoints,
1301
1302   /* Support for installing tracepoints while a trace experiment is
1303      running.  */
1304   PACKET_InstallInTrace,
1305
1306   PACKET_bc,
1307   PACKET_bs,
1308   PACKET_TracepointSource,
1309   PACKET_QAllow,
1310   PACKET_qXfer_fdpic,
1311   PACKET_QDisableRandomization,
1312   PACKET_QAgent,
1313   PACKET_QTBuffer_size,
1314   PACKET_Qbtrace_off,
1315   PACKET_Qbtrace_bts,
1316   PACKET_qXfer_btrace,
1317
1318   /* Support for the QNonStop packet.  */
1319   PACKET_QNonStop,
1320
1321   /* Support for multi-process extensions.  */
1322   PACKET_multiprocess_feature,
1323
1324   /* Support for enabling and disabling tracepoints while a trace
1325      experiment is running.  */
1326   PACKET_EnableDisableTracepoints_feature,
1327
1328   /* Support for collecting strings using the tracenz bytecode.  */
1329   PACKET_tracenz_feature,
1330
1331   /* Support for continuing to run a trace experiment while GDB is
1332      disconnected.  */
1333   PACKET_DisconnectedTracing_feature,
1334
1335   /* Support for qXfer:libraries-svr4:read with a non-empty annex.  */
1336   PACKET_augmented_libraries_svr4_read_feature,
1337
1338   PACKET_MAX
1339 };
1340
1341 static struct packet_config remote_protocol_packets[PACKET_MAX];
1342
1343 /* Returns whether a given packet or feature is supported.  This takes
1344    into account the state of the corresponding "set remote foo-packet"
1345    command, which may be used to bypass auto-detection.  */
1346
1347 static enum packet_support
1348 packet_config_support (struct packet_config *config)
1349 {
1350   switch (config->detect)
1351     {
1352     case AUTO_BOOLEAN_TRUE:
1353       return PACKET_ENABLE;
1354     case AUTO_BOOLEAN_FALSE:
1355       return PACKET_DISABLE;
1356     case AUTO_BOOLEAN_AUTO:
1357       return config->support;
1358     default:
1359       gdb_assert_not_reached (_("bad switch"));
1360     }
1361 }
1362
1363 /* Same as packet_config_support, but takes the packet's enum value as
1364    argument.  */
1365
1366 static enum packet_support
1367 packet_support (int packet)
1368 {
1369   struct packet_config *config = &remote_protocol_packets[packet];
1370
1371   return packet_config_support (config);
1372 }
1373
1374 static void
1375 show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
1376                                  struct cmd_list_element *c,
1377                                  const char *value)
1378 {
1379   struct packet_config *packet;
1380
1381   for (packet = remote_protocol_packets;
1382        packet < &remote_protocol_packets[PACKET_MAX];
1383        packet++)
1384     {
1385       if (&packet->detect == c->var)
1386         {
1387           show_packet_config_cmd (packet);
1388           return;
1389         }
1390     }
1391   internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
1392                   c->name);
1393 }
1394
1395 /* Should we try one of the 'Z' requests?  */
1396
1397 enum Z_packet_type
1398 {
1399   Z_PACKET_SOFTWARE_BP,
1400   Z_PACKET_HARDWARE_BP,
1401   Z_PACKET_WRITE_WP,
1402   Z_PACKET_READ_WP,
1403   Z_PACKET_ACCESS_WP,
1404   NR_Z_PACKET_TYPES
1405 };
1406
1407 /* For compatibility with older distributions.  Provide a ``set remote
1408    Z-packet ...'' command that updates all the Z packet types.  */
1409
1410 static enum auto_boolean remote_Z_packet_detect;
1411
1412 static void
1413 set_remote_protocol_Z_packet_cmd (char *args, int from_tty,
1414                                   struct cmd_list_element *c)
1415 {
1416   int i;
1417
1418   for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1419     remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
1420 }
1421
1422 static void
1423 show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
1424                                    struct cmd_list_element *c,
1425                                    const char *value)
1426 {
1427   int i;
1428
1429   for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1430     {
1431       show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
1432     }
1433 }
1434
1435 /* Returns true if the multi-process extensions are in effect.  */
1436
1437 static int
1438 remote_multi_process_p (struct remote_state *rs)
1439 {
1440   return packet_support (PACKET_multiprocess_feature) == PACKET_ENABLE;
1441 }
1442
1443 /* Tokens for use by the asynchronous signal handlers for SIGINT.  */
1444 static struct async_signal_handler *async_sigint_remote_twice_token;
1445 static struct async_signal_handler *async_sigint_remote_token;
1446
1447 \f
1448 /* Asynchronous signal handle registered as event loop source for
1449    when we have pending events ready to be passed to the core.  */
1450
1451 static struct async_event_handler *remote_async_inferior_event_token;
1452
1453 \f
1454
1455 static ptid_t magic_null_ptid;
1456 static ptid_t not_sent_ptid;
1457 static ptid_t any_thread_ptid;
1458
1459 /* Find out if the stub attached to PID (and hence GDB should offer to
1460    detach instead of killing it when bailing out).  */
1461
1462 static int
1463 remote_query_attached (int pid)
1464 {
1465   struct remote_state *rs = get_remote_state ();
1466   size_t size = get_remote_packet_size ();
1467
1468   if (packet_support (PACKET_qAttached) == PACKET_DISABLE)
1469     return 0;
1470
1471   if (remote_multi_process_p (rs))
1472     xsnprintf (rs->buf, size, "qAttached:%x", pid);
1473   else
1474     xsnprintf (rs->buf, size, "qAttached");
1475
1476   putpkt (rs->buf);
1477   getpkt (&rs->buf, &rs->buf_size, 0);
1478
1479   switch (packet_ok (rs->buf,
1480                      &remote_protocol_packets[PACKET_qAttached]))
1481     {
1482     case PACKET_OK:
1483       if (strcmp (rs->buf, "1") == 0)
1484         return 1;
1485       break;
1486     case PACKET_ERROR:
1487       warning (_("Remote failure reply: %s"), rs->buf);
1488       break;
1489     case PACKET_UNKNOWN:
1490       break;
1491     }
1492
1493   return 0;
1494 }
1495
1496 /* Add PID to GDB's inferior table.  If FAKE_PID_P is true, then PID
1497    has been invented by GDB, instead of reported by the target.  Since
1498    we can be connected to a remote system before before knowing about
1499    any inferior, mark the target with execution when we find the first
1500    inferior.  If ATTACHED is 1, then we had just attached to this
1501    inferior.  If it is 0, then we just created this inferior.  If it
1502    is -1, then try querying the remote stub to find out if it had
1503    attached to the inferior or not.  */
1504
1505 static struct inferior *
1506 remote_add_inferior (int fake_pid_p, int pid, int attached)
1507 {
1508   struct inferior *inf;
1509
1510   /* Check whether this process we're learning about is to be
1511      considered attached, or if is to be considered to have been
1512      spawned by the stub.  */
1513   if (attached == -1)
1514     attached = remote_query_attached (pid);
1515
1516   if (gdbarch_has_global_solist (target_gdbarch ()))
1517     {
1518       /* If the target shares code across all inferiors, then every
1519          attach adds a new inferior.  */
1520       inf = add_inferior (pid);
1521
1522       /* ... and every inferior is bound to the same program space.
1523          However, each inferior may still have its own address
1524          space.  */
1525       inf->aspace = maybe_new_address_space ();
1526       inf->pspace = current_program_space;
1527     }
1528   else
1529     {
1530       /* In the traditional debugging scenario, there's a 1-1 match
1531          between program/address spaces.  We simply bind the inferior
1532          to the program space's address space.  */
1533       inf = current_inferior ();
1534       inferior_appeared (inf, pid);
1535     }
1536
1537   inf->attach_flag = attached;
1538   inf->fake_pid_p = fake_pid_p;
1539
1540   return inf;
1541 }
1542
1543 /* Add thread PTID to GDB's thread list.  Tag it as executing/running
1544    according to RUNNING.  */
1545
1546 static void
1547 remote_add_thread (ptid_t ptid, int running)
1548 {
1549   struct remote_state *rs = get_remote_state ();
1550
1551   /* GDB historically didn't pull threads in the initial connection
1552      setup.  If the remote target doesn't even have a concept of
1553      threads (e.g., a bare-metal target), even if internally we
1554      consider that a single-threaded target, mentioning a new thread
1555      might be confusing to the user.  Be silent then, preserving the
1556      age old behavior.  */
1557   if (rs->starting_up)
1558     add_thread_silent (ptid);
1559   else
1560     add_thread (ptid);
1561
1562   set_executing (ptid, running);
1563   set_running (ptid, running);
1564 }
1565
1566 /* Come here when we learn about a thread id from the remote target.
1567    It may be the first time we hear about such thread, so take the
1568    opportunity to add it to GDB's thread list.  In case this is the
1569    first time we're noticing its corresponding inferior, add it to
1570    GDB's inferior list as well.  */
1571
1572 static void
1573 remote_notice_new_inferior (ptid_t currthread, int running)
1574 {
1575   /* If this is a new thread, add it to GDB's thread list.
1576      If we leave it up to WFI to do this, bad things will happen.  */
1577
1578   if (in_thread_list (currthread) && is_exited (currthread))
1579     {
1580       /* We're seeing an event on a thread id we knew had exited.
1581          This has to be a new thread reusing the old id.  Add it.  */
1582       remote_add_thread (currthread, running);
1583       return;
1584     }
1585
1586   if (!in_thread_list (currthread))
1587     {
1588       struct inferior *inf = NULL;
1589       int pid = ptid_get_pid (currthread);
1590
1591       if (ptid_is_pid (inferior_ptid)
1592           && pid == ptid_get_pid (inferior_ptid))
1593         {
1594           /* inferior_ptid has no thread member yet.  This can happen
1595              with the vAttach -> remote_wait,"TAAthread:" path if the
1596              stub doesn't support qC.  This is the first stop reported
1597              after an attach, so this is the main thread.  Update the
1598              ptid in the thread list.  */
1599           if (in_thread_list (pid_to_ptid (pid)))
1600             thread_change_ptid (inferior_ptid, currthread);
1601           else
1602             {
1603               remote_add_thread (currthread, running);
1604               inferior_ptid = currthread;
1605             }
1606           return;
1607         }
1608
1609       if (ptid_equal (magic_null_ptid, inferior_ptid))
1610         {
1611           /* inferior_ptid is not set yet.  This can happen with the
1612              vRun -> remote_wait,"TAAthread:" path if the stub
1613              doesn't support qC.  This is the first stop reported
1614              after an attach, so this is the main thread.  Update the
1615              ptid in the thread list.  */
1616           thread_change_ptid (inferior_ptid, currthread);
1617           return;
1618         }
1619
1620       /* When connecting to a target remote, or to a target
1621          extended-remote which already was debugging an inferior, we
1622          may not know about it yet.  Add it before adding its child
1623          thread, so notifications are emitted in a sensible order.  */
1624       if (!in_inferior_list (ptid_get_pid (currthread)))
1625         {
1626           struct remote_state *rs = get_remote_state ();
1627           int fake_pid_p = !remote_multi_process_p (rs);
1628
1629           inf = remote_add_inferior (fake_pid_p,
1630                                      ptid_get_pid (currthread), -1);
1631         }
1632
1633       /* This is really a new thread.  Add it.  */
1634       remote_add_thread (currthread, running);
1635
1636       /* If we found a new inferior, let the common code do whatever
1637          it needs to with it (e.g., read shared libraries, insert
1638          breakpoints), unless we're just setting up an all-stop
1639          connection.  */
1640       if (inf != NULL)
1641         {
1642           struct remote_state *rs = get_remote_state ();
1643
1644           if (non_stop || !rs->starting_up)
1645             notice_new_inferior (currthread, running, 0);
1646         }
1647     }
1648 }
1649
1650 /* Return the private thread data, creating it if necessary.  */
1651
1652 static struct private_thread_info *
1653 demand_private_info (ptid_t ptid)
1654 {
1655   struct thread_info *info = find_thread_ptid (ptid);
1656
1657   gdb_assert (info);
1658
1659   if (!info->private)
1660     {
1661       info->private = xmalloc (sizeof (*(info->private)));
1662       info->private_dtor = free_private_thread_info;
1663       info->private->core = -1;
1664       info->private->extra = 0;
1665     }
1666
1667   return info->private;
1668 }
1669
1670 /* Call this function as a result of
1671    1) A halt indication (T packet) containing a thread id
1672    2) A direct query of currthread
1673    3) Successful execution of set thread */
1674
1675 static void
1676 record_currthread (struct remote_state *rs, ptid_t currthread)
1677 {
1678   rs->general_thread = currthread;
1679 }
1680
1681 /* If 'QPassSignals' is supported, tell the remote stub what signals
1682    it can simply pass through to the inferior without reporting.  */
1683
1684 static void
1685 remote_pass_signals (struct target_ops *self,
1686                      int numsigs, unsigned char *pass_signals)
1687 {
1688   if (packet_support (PACKET_QPassSignals) != PACKET_DISABLE)
1689     {
1690       char *pass_packet, *p;
1691       int count = 0, i;
1692       struct remote_state *rs = get_remote_state ();
1693
1694       gdb_assert (numsigs < 256);
1695       for (i = 0; i < numsigs; i++)
1696         {
1697           if (pass_signals[i])
1698             count++;
1699         }
1700       pass_packet = xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
1701       strcpy (pass_packet, "QPassSignals:");
1702       p = pass_packet + strlen (pass_packet);
1703       for (i = 0; i < numsigs; i++)
1704         {
1705           if (pass_signals[i])
1706             {
1707               if (i >= 16)
1708                 *p++ = tohex (i >> 4);
1709               *p++ = tohex (i & 15);
1710               if (count)
1711                 *p++ = ';';
1712               else
1713                 break;
1714               count--;
1715             }
1716         }
1717       *p = 0;
1718       if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet))
1719         {
1720           putpkt (pass_packet);
1721           getpkt (&rs->buf, &rs->buf_size, 0);
1722           packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]);
1723           if (rs->last_pass_packet)
1724             xfree (rs->last_pass_packet);
1725           rs->last_pass_packet = pass_packet;
1726         }
1727       else
1728         xfree (pass_packet);
1729     }
1730 }
1731
1732 /* If 'QProgramSignals' is supported, tell the remote stub what
1733    signals it should pass through to the inferior when detaching.  */
1734
1735 static void
1736 remote_program_signals (struct target_ops *self,
1737                         int numsigs, unsigned char *signals)
1738 {
1739   if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
1740     {
1741       char *packet, *p;
1742       int count = 0, i;
1743       struct remote_state *rs = get_remote_state ();
1744
1745       gdb_assert (numsigs < 256);
1746       for (i = 0; i < numsigs; i++)
1747         {
1748           if (signals[i])
1749             count++;
1750         }
1751       packet = xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
1752       strcpy (packet, "QProgramSignals:");
1753       p = packet + strlen (packet);
1754       for (i = 0; i < numsigs; i++)
1755         {
1756           if (signal_pass_state (i))
1757             {
1758               if (i >= 16)
1759                 *p++ = tohex (i >> 4);
1760               *p++ = tohex (i & 15);
1761               if (count)
1762                 *p++ = ';';
1763               else
1764                 break;
1765               count--;
1766             }
1767         }
1768       *p = 0;
1769       if (!rs->last_program_signals_packet
1770           || strcmp (rs->last_program_signals_packet, packet) != 0)
1771         {
1772           putpkt (packet);
1773           getpkt (&rs->buf, &rs->buf_size, 0);
1774           packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
1775           xfree (rs->last_program_signals_packet);
1776           rs->last_program_signals_packet = packet;
1777         }
1778       else
1779         xfree (packet);
1780     }
1781 }
1782
1783 /* If PTID is MAGIC_NULL_PTID, don't set any thread.  If PTID is
1784    MINUS_ONE_PTID, set the thread to -1, so the stub returns the
1785    thread.  If GEN is set, set the general thread, if not, then set
1786    the step/continue thread.  */
1787 static void
1788 set_thread (struct ptid ptid, int gen)
1789 {
1790   struct remote_state *rs = get_remote_state ();
1791   ptid_t state = gen ? rs->general_thread : rs->continue_thread;
1792   char *buf = rs->buf;
1793   char *endbuf = rs->buf + get_remote_packet_size ();
1794
1795   if (ptid_equal (state, ptid))
1796     return;
1797
1798   *buf++ = 'H';
1799   *buf++ = gen ? 'g' : 'c';
1800   if (ptid_equal (ptid, magic_null_ptid))
1801     xsnprintf (buf, endbuf - buf, "0");
1802   else if (ptid_equal (ptid, any_thread_ptid))
1803     xsnprintf (buf, endbuf - buf, "0");
1804   else if (ptid_equal (ptid, minus_one_ptid))
1805     xsnprintf (buf, endbuf - buf, "-1");
1806   else
1807     write_ptid (buf, endbuf, ptid);
1808   putpkt (rs->buf);
1809   getpkt (&rs->buf, &rs->buf_size, 0);
1810   if (gen)
1811     rs->general_thread = ptid;
1812   else
1813     rs->continue_thread = ptid;
1814 }
1815
1816 static void
1817 set_general_thread (struct ptid ptid)
1818 {
1819   set_thread (ptid, 1);
1820 }
1821
1822 static void
1823 set_continue_thread (struct ptid ptid)
1824 {
1825   set_thread (ptid, 0);
1826 }
1827
1828 /* Change the remote current process.  Which thread within the process
1829    ends up selected isn't important, as long as it is the same process
1830    as what INFERIOR_PTID points to.
1831
1832    This comes from that fact that there is no explicit notion of
1833    "selected process" in the protocol.  The selected process for
1834    general operations is the process the selected general thread
1835    belongs to.  */
1836
1837 static void
1838 set_general_process (void)
1839 {
1840   struct remote_state *rs = get_remote_state ();
1841
1842   /* If the remote can't handle multiple processes, don't bother.  */
1843   if (!rs->extended || !remote_multi_process_p (rs))
1844     return;
1845
1846   /* We only need to change the remote current thread if it's pointing
1847      at some other process.  */
1848   if (ptid_get_pid (rs->general_thread) != ptid_get_pid (inferior_ptid))
1849     set_general_thread (inferior_ptid);
1850 }
1851
1852 \f
1853 /*  Return nonzero if the thread PTID is still alive on the remote
1854     system.  */
1855
1856 static int
1857 remote_thread_alive (struct target_ops *ops, ptid_t ptid)
1858 {
1859   struct remote_state *rs = get_remote_state ();
1860   char *p, *endp;
1861
1862   if (ptid_equal (ptid, magic_null_ptid))
1863     /* The main thread is always alive.  */
1864     return 1;
1865
1866   if (ptid_get_pid (ptid) != 0 && ptid_get_lwp (ptid) == 0)
1867     /* The main thread is always alive.  This can happen after a
1868        vAttach, if the remote side doesn't support
1869        multi-threading.  */
1870     return 1;
1871
1872   p = rs->buf;
1873   endp = rs->buf + get_remote_packet_size ();
1874
1875   *p++ = 'T';
1876   write_ptid (p, endp, ptid);
1877
1878   putpkt (rs->buf);
1879   getpkt (&rs->buf, &rs->buf_size, 0);
1880   return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
1881 }
1882
1883 /* About these extended threadlist and threadinfo packets.  They are
1884    variable length packets but, the fields within them are often fixed
1885    length.  They are redundent enough to send over UDP as is the
1886    remote protocol in general.  There is a matching unit test module
1887    in libstub.  */
1888
1889 /* WARNING: This threadref data structure comes from the remote O.S.,
1890    libstub protocol encoding, and remote.c.  It is not particularly
1891    changable.  */
1892
1893 /* Right now, the internal structure is int. We want it to be bigger.
1894    Plan to fix this.  */
1895
1896 typedef int gdb_threadref;      /* Internal GDB thread reference.  */
1897
1898 /* gdb_ext_thread_info is an internal GDB data structure which is
1899    equivalent to the reply of the remote threadinfo packet.  */
1900
1901 struct gdb_ext_thread_info
1902   {
1903     threadref threadid;         /* External form of thread reference.  */
1904     int active;                 /* Has state interesting to GDB?
1905                                    regs, stack.  */
1906     char display[256];          /* Brief state display, name,
1907                                    blocked/suspended.  */
1908     char shortname[32];         /* To be used to name threads.  */
1909     char more_display[256];     /* Long info, statistics, queue depth,
1910                                    whatever.  */
1911   };
1912
1913 /* The volume of remote transfers can be limited by submitting
1914    a mask containing bits specifying the desired information.
1915    Use a union of these values as the 'selection' parameter to
1916    get_thread_info.  FIXME: Make these TAG names more thread specific.  */
1917
1918 #define TAG_THREADID 1
1919 #define TAG_EXISTS 2
1920 #define TAG_DISPLAY 4
1921 #define TAG_THREADNAME 8
1922 #define TAG_MOREDISPLAY 16
1923
1924 #define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
1925
1926 static char *unpack_nibble (char *buf, int *val);
1927
1928 static char *unpack_byte (char *buf, int *value);
1929
1930 static char *pack_int (char *buf, int value);
1931
1932 static char *unpack_int (char *buf, int *value);
1933
1934 static char *unpack_string (char *src, char *dest, int length);
1935
1936 static char *pack_threadid (char *pkt, threadref *id);
1937
1938 static char *unpack_threadid (char *inbuf, threadref *id);
1939
1940 void int_to_threadref (threadref *id, int value);
1941
1942 static int threadref_to_int (threadref *ref);
1943
1944 static void copy_threadref (threadref *dest, threadref *src);
1945
1946 static int threadmatch (threadref *dest, threadref *src);
1947
1948 static char *pack_threadinfo_request (char *pkt, int mode,
1949                                       threadref *id);
1950
1951 static int remote_unpack_thread_info_response (char *pkt,
1952                                                threadref *expectedref,
1953                                                struct gdb_ext_thread_info
1954                                                *info);
1955
1956
1957 static int remote_get_threadinfo (threadref *threadid,
1958                                   int fieldset, /*TAG mask */
1959                                   struct gdb_ext_thread_info *info);
1960
1961 static char *pack_threadlist_request (char *pkt, int startflag,
1962                                       int threadcount,
1963                                       threadref *nextthread);
1964
1965 static int parse_threadlist_response (char *pkt,
1966                                       int result_limit,
1967                                       threadref *original_echo,
1968                                       threadref *resultlist,
1969                                       int *doneflag);
1970
1971 static int remote_get_threadlist (int startflag,
1972                                   threadref *nextthread,
1973                                   int result_limit,
1974                                   int *done,
1975                                   int *result_count,
1976                                   threadref *threadlist);
1977
1978 typedef int (*rmt_thread_action) (threadref *ref, void *context);
1979
1980 static int remote_threadlist_iterator (rmt_thread_action stepfunction,
1981                                        void *context, int looplimit);
1982
1983 static int remote_newthread_step (threadref *ref, void *context);
1984
1985
1986 /* Write a PTID to BUF.  ENDBUF points to one-passed-the-end of the
1987    buffer we're allowed to write to.  Returns
1988    BUF+CHARACTERS_WRITTEN.  */
1989
1990 static char *
1991 write_ptid (char *buf, const char *endbuf, ptid_t ptid)
1992 {
1993   int pid, tid;
1994   struct remote_state *rs = get_remote_state ();
1995
1996   if (remote_multi_process_p (rs))
1997     {
1998       pid = ptid_get_pid (ptid);
1999       if (pid < 0)
2000         buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
2001       else
2002         buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
2003     }
2004   tid = ptid_get_lwp (ptid);
2005   if (tid < 0)
2006     buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
2007   else
2008     buf += xsnprintf (buf, endbuf - buf, "%x", tid);
2009
2010   return buf;
2011 }
2012
2013 /* Extract a PTID from BUF.  If non-null, OBUF is set to the to one
2014    passed the last parsed char.  Returns null_ptid on error.  */
2015
2016 static ptid_t
2017 read_ptid (char *buf, char **obuf)
2018 {
2019   char *p = buf;
2020   char *pp;
2021   ULONGEST pid = 0, tid = 0;
2022
2023   if (*p == 'p')
2024     {
2025       /* Multi-process ptid.  */
2026       pp = unpack_varlen_hex (p + 1, &pid);
2027       if (*pp != '.')
2028         error (_("invalid remote ptid: %s"), p);
2029
2030       p = pp;
2031       pp = unpack_varlen_hex (p + 1, &tid);
2032       if (obuf)
2033         *obuf = pp;
2034       return ptid_build (pid, tid, 0);
2035     }
2036
2037   /* No multi-process.  Just a tid.  */
2038   pp = unpack_varlen_hex (p, &tid);
2039
2040   /* Since the stub is not sending a process id, then default to
2041      what's in inferior_ptid, unless it's null at this point.  If so,
2042      then since there's no way to know the pid of the reported
2043      threads, use the magic number.  */
2044   if (ptid_equal (inferior_ptid, null_ptid))
2045     pid = ptid_get_pid (magic_null_ptid);
2046   else
2047     pid = ptid_get_pid (inferior_ptid);
2048
2049   if (obuf)
2050     *obuf = pp;
2051   return ptid_build (pid, tid, 0);
2052 }
2053
2054 static int
2055 stubhex (int ch)
2056 {
2057   if (ch >= 'a' && ch <= 'f')
2058     return ch - 'a' + 10;
2059   if (ch >= '0' && ch <= '9')
2060     return ch - '0';
2061   if (ch >= 'A' && ch <= 'F')
2062     return ch - 'A' + 10;
2063   return -1;
2064 }
2065
2066 static int
2067 stub_unpack_int (char *buff, int fieldlength)
2068 {
2069   int nibble;
2070   int retval = 0;
2071
2072   while (fieldlength)
2073     {
2074       nibble = stubhex (*buff++);
2075       retval |= nibble;
2076       fieldlength--;
2077       if (fieldlength)
2078         retval = retval << 4;
2079     }
2080   return retval;
2081 }
2082
2083 static char *
2084 unpack_nibble (char *buf, int *val)
2085 {
2086   *val = fromhex (*buf++);
2087   return buf;
2088 }
2089
2090 static char *
2091 unpack_byte (char *buf, int *value)
2092 {
2093   *value = stub_unpack_int (buf, 2);
2094   return buf + 2;
2095 }
2096
2097 static char *
2098 pack_int (char *buf, int value)
2099 {
2100   buf = pack_hex_byte (buf, (value >> 24) & 0xff);
2101   buf = pack_hex_byte (buf, (value >> 16) & 0xff);
2102   buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
2103   buf = pack_hex_byte (buf, (value & 0xff));
2104   return buf;
2105 }
2106
2107 static char *
2108 unpack_int (char *buf, int *value)
2109 {
2110   *value = stub_unpack_int (buf, 8);
2111   return buf + 8;
2112 }
2113
2114 #if 0                   /* Currently unused, uncomment when needed.  */
2115 static char *pack_string (char *pkt, char *string);
2116
2117 static char *
2118 pack_string (char *pkt, char *string)
2119 {
2120   char ch;
2121   int len;
2122
2123   len = strlen (string);
2124   if (len > 200)
2125     len = 200;          /* Bigger than most GDB packets, junk???  */
2126   pkt = pack_hex_byte (pkt, len);
2127   while (len-- > 0)
2128     {
2129       ch = *string++;
2130       if ((ch == '\0') || (ch == '#'))
2131         ch = '*';               /* Protect encapsulation.  */
2132       *pkt++ = ch;
2133     }
2134   return pkt;
2135 }
2136 #endif /* 0 (unused) */
2137
2138 static char *
2139 unpack_string (char *src, char *dest, int length)
2140 {
2141   while (length--)
2142     *dest++ = *src++;
2143   *dest = '\0';
2144   return src;
2145 }
2146
2147 static char *
2148 pack_threadid (char *pkt, threadref *id)
2149 {
2150   char *limit;
2151   unsigned char *altid;
2152
2153   altid = (unsigned char *) id;
2154   limit = pkt + BUF_THREAD_ID_SIZE;
2155   while (pkt < limit)
2156     pkt = pack_hex_byte (pkt, *altid++);
2157   return pkt;
2158 }
2159
2160
2161 static char *
2162 unpack_threadid (char *inbuf, threadref *id)
2163 {
2164   char *altref;
2165   char *limit = inbuf + BUF_THREAD_ID_SIZE;
2166   int x, y;
2167
2168   altref = (char *) id;
2169
2170   while (inbuf < limit)
2171     {
2172       x = stubhex (*inbuf++);
2173       y = stubhex (*inbuf++);
2174       *altref++ = (x << 4) | y;
2175     }
2176   return inbuf;
2177 }
2178
2179 /* Externally, threadrefs are 64 bits but internally, they are still
2180    ints.  This is due to a mismatch of specifications.  We would like
2181    to use 64bit thread references internally.  This is an adapter
2182    function.  */
2183
2184 void
2185 int_to_threadref (threadref *id, int value)
2186 {
2187   unsigned char *scan;
2188
2189   scan = (unsigned char *) id;
2190   {
2191     int i = 4;
2192     while (i--)
2193       *scan++ = 0;
2194   }
2195   *scan++ = (value >> 24) & 0xff;
2196   *scan++ = (value >> 16) & 0xff;
2197   *scan++ = (value >> 8) & 0xff;
2198   *scan++ = (value & 0xff);
2199 }
2200
2201 static int
2202 threadref_to_int (threadref *ref)
2203 {
2204   int i, value = 0;
2205   unsigned char *scan;
2206
2207   scan = *ref;
2208   scan += 4;
2209   i = 4;
2210   while (i-- > 0)
2211     value = (value << 8) | ((*scan++) & 0xff);
2212   return value;
2213 }
2214
2215 static void
2216 copy_threadref (threadref *dest, threadref *src)
2217 {
2218   int i;
2219   unsigned char *csrc, *cdest;
2220
2221   csrc = (unsigned char *) src;
2222   cdest = (unsigned char *) dest;
2223   i = 8;
2224   while (i--)
2225     *cdest++ = *csrc++;
2226 }
2227
2228 static int
2229 threadmatch (threadref *dest, threadref *src)
2230 {
2231   /* Things are broken right now, so just assume we got a match.  */
2232 #if 0
2233   unsigned char *srcp, *destp;
2234   int i, result;
2235   srcp = (char *) src;
2236   destp = (char *) dest;
2237
2238   result = 1;
2239   while (i-- > 0)
2240     result &= (*srcp++ == *destp++) ? 1 : 0;
2241   return result;
2242 #endif
2243   return 1;
2244 }
2245
2246 /*
2247    threadid:1,        # always request threadid
2248    context_exists:2,
2249    display:4,
2250    unique_name:8,
2251    more_display:16
2252  */
2253
2254 /* Encoding:  'Q':8,'P':8,mask:32,threadid:64 */
2255
2256 static char *
2257 pack_threadinfo_request (char *pkt, int mode, threadref *id)
2258 {
2259   *pkt++ = 'q';                         /* Info Query */
2260   *pkt++ = 'P';                         /* process or thread info */
2261   pkt = pack_int (pkt, mode);           /* mode */
2262   pkt = pack_threadid (pkt, id);        /* threadid */
2263   *pkt = '\0';                          /* terminate */
2264   return pkt;
2265 }
2266
2267 /* These values tag the fields in a thread info response packet.  */
2268 /* Tagging the fields allows us to request specific fields and to
2269    add more fields as time goes by.  */
2270
2271 #define TAG_THREADID 1          /* Echo the thread identifier.  */
2272 #define TAG_EXISTS 2            /* Is this process defined enough to
2273                                    fetch registers and its stack?  */
2274 #define TAG_DISPLAY 4           /* A short thing maybe to put on a window */
2275 #define TAG_THREADNAME 8        /* string, maps 1-to-1 with a thread is.  */
2276 #define TAG_MOREDISPLAY 16      /* Whatever the kernel wants to say about
2277                                    the process.  */
2278
2279 static int
2280 remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
2281                                     struct gdb_ext_thread_info *info)
2282 {
2283   struct remote_state *rs = get_remote_state ();
2284   int mask, length;
2285   int tag;
2286   threadref ref;
2287   char *limit = pkt + rs->buf_size; /* Plausible parsing limit.  */
2288   int retval = 1;
2289
2290   /* info->threadid = 0; FIXME: implement zero_threadref.  */
2291   info->active = 0;
2292   info->display[0] = '\0';
2293   info->shortname[0] = '\0';
2294   info->more_display[0] = '\0';
2295
2296   /* Assume the characters indicating the packet type have been
2297      stripped.  */
2298   pkt = unpack_int (pkt, &mask);        /* arg mask */
2299   pkt = unpack_threadid (pkt, &ref);
2300
2301   if (mask == 0)
2302     warning (_("Incomplete response to threadinfo request."));
2303   if (!threadmatch (&ref, expectedref))
2304     {                   /* This is an answer to a different request.  */
2305       warning (_("ERROR RMT Thread info mismatch."));
2306       return 0;
2307     }
2308   copy_threadref (&info->threadid, &ref);
2309
2310   /* Loop on tagged fields , try to bail if somthing goes wrong.  */
2311
2312   /* Packets are terminated with nulls.  */
2313   while ((pkt < limit) && mask && *pkt)
2314     {
2315       pkt = unpack_int (pkt, &tag);     /* tag */
2316       pkt = unpack_byte (pkt, &length); /* length */
2317       if (!(tag & mask))                /* Tags out of synch with mask.  */
2318         {
2319           warning (_("ERROR RMT: threadinfo tag mismatch."));
2320           retval = 0;
2321           break;
2322         }
2323       if (tag == TAG_THREADID)
2324         {
2325           if (length != 16)
2326             {
2327               warning (_("ERROR RMT: length of threadid is not 16."));
2328               retval = 0;
2329               break;
2330             }
2331           pkt = unpack_threadid (pkt, &ref);
2332           mask = mask & ~TAG_THREADID;
2333           continue;
2334         }
2335       if (tag == TAG_EXISTS)
2336         {
2337           info->active = stub_unpack_int (pkt, length);
2338           pkt += length;
2339           mask = mask & ~(TAG_EXISTS);
2340           if (length > 8)
2341             {
2342               warning (_("ERROR RMT: 'exists' length too long."));
2343               retval = 0;
2344               break;
2345             }
2346           continue;
2347         }
2348       if (tag == TAG_THREADNAME)
2349         {
2350           pkt = unpack_string (pkt, &info->shortname[0], length);
2351           mask = mask & ~TAG_THREADNAME;
2352           continue;
2353         }
2354       if (tag == TAG_DISPLAY)
2355         {
2356           pkt = unpack_string (pkt, &info->display[0], length);
2357           mask = mask & ~TAG_DISPLAY;
2358           continue;
2359         }
2360       if (tag == TAG_MOREDISPLAY)
2361         {
2362           pkt = unpack_string (pkt, &info->more_display[0], length);
2363           mask = mask & ~TAG_MOREDISPLAY;
2364           continue;
2365         }
2366       warning (_("ERROR RMT: unknown thread info tag."));
2367       break;                    /* Not a tag we know about.  */
2368     }
2369   return retval;
2370 }
2371
2372 static int
2373 remote_get_threadinfo (threadref *threadid, int fieldset,       /* TAG mask */
2374                        struct gdb_ext_thread_info *info)
2375 {
2376   struct remote_state *rs = get_remote_state ();
2377   int result;
2378
2379   pack_threadinfo_request (rs->buf, fieldset, threadid);
2380   putpkt (rs->buf);
2381   getpkt (&rs->buf, &rs->buf_size, 0);
2382
2383   if (rs->buf[0] == '\0')
2384     return 0;
2385
2386   result = remote_unpack_thread_info_response (rs->buf + 2,
2387                                                threadid, info);
2388   return result;
2389 }
2390
2391 /*    Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32   */
2392
2393 static char *
2394 pack_threadlist_request (char *pkt, int startflag, int threadcount,
2395                          threadref *nextthread)
2396 {
2397   *pkt++ = 'q';                 /* info query packet */
2398   *pkt++ = 'L';                 /* Process LIST or threadLIST request */
2399   pkt = pack_nibble (pkt, startflag);           /* initflag 1 bytes */
2400   pkt = pack_hex_byte (pkt, threadcount);       /* threadcount 2 bytes */
2401   pkt = pack_threadid (pkt, nextthread);        /* 64 bit thread identifier */
2402   *pkt = '\0';
2403   return pkt;
2404 }
2405
2406 /* Encoding:   'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
2407
2408 static int
2409 parse_threadlist_response (char *pkt, int result_limit,
2410                            threadref *original_echo, threadref *resultlist,
2411                            int *doneflag)
2412 {
2413   struct remote_state *rs = get_remote_state ();
2414   char *limit;
2415   int count, resultcount, done;
2416
2417   resultcount = 0;
2418   /* Assume the 'q' and 'M chars have been stripped.  */
2419   limit = pkt + (rs->buf_size - BUF_THREAD_ID_SIZE);
2420   /* done parse past here */
2421   pkt = unpack_byte (pkt, &count);      /* count field */
2422   pkt = unpack_nibble (pkt, &done);
2423   /* The first threadid is the argument threadid.  */
2424   pkt = unpack_threadid (pkt, original_echo);   /* should match query packet */
2425   while ((count-- > 0) && (pkt < limit))
2426     {
2427       pkt = unpack_threadid (pkt, resultlist++);
2428       if (resultcount++ >= result_limit)
2429         break;
2430     }
2431   if (doneflag)
2432     *doneflag = done;
2433   return resultcount;
2434 }
2435
2436 static int
2437 remote_get_threadlist (int startflag, threadref *nextthread, int result_limit,
2438                        int *done, int *result_count, threadref *threadlist)
2439 {
2440   struct remote_state *rs = get_remote_state ();
2441   int result = 1;
2442
2443   /* Trancate result limit to be smaller than the packet size.  */
2444   if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
2445       >= get_remote_packet_size ())
2446     result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
2447
2448   pack_threadlist_request (rs->buf, startflag, result_limit, nextthread);
2449   putpkt (rs->buf);
2450   getpkt (&rs->buf, &rs->buf_size, 0);
2451
2452   if (*rs->buf == '\0')
2453     return 0;
2454   else
2455     *result_count =
2456       parse_threadlist_response (rs->buf + 2, result_limit,
2457                                  &rs->echo_nextthread, threadlist, done);
2458
2459   if (!threadmatch (&rs->echo_nextthread, nextthread))
2460     {
2461       /* FIXME: This is a good reason to drop the packet.  */
2462       /* Possably, there is a duplicate response.  */
2463       /* Possabilities :
2464          retransmit immediatly - race conditions
2465          retransmit after timeout - yes
2466          exit
2467          wait for packet, then exit
2468        */
2469       warning (_("HMM: threadlist did not echo arg thread, dropping it."));
2470       return 0;                 /* I choose simply exiting.  */
2471     }
2472   if (*result_count <= 0)
2473     {
2474       if (*done != 1)
2475         {
2476           warning (_("RMT ERROR : failed to get remote thread list."));
2477           result = 0;
2478         }
2479       return result;            /* break; */
2480     }
2481   if (*result_count > result_limit)
2482     {
2483       *result_count = 0;
2484       warning (_("RMT ERROR: threadlist response longer than requested."));
2485       return 0;
2486     }
2487   return result;
2488 }
2489
2490 /* This is the interface between remote and threads, remotes upper
2491    interface.  */
2492
2493 /* remote_find_new_threads retrieves the thread list and for each
2494    thread in the list, looks up the thread in GDB's internal list,
2495    adding the thread if it does not already exist.  This involves
2496    getting partial thread lists from the remote target so, polling the
2497    quit_flag is required.  */
2498
2499
2500 static int
2501 remote_threadlist_iterator (rmt_thread_action stepfunction, void *context,
2502                             int looplimit)
2503 {
2504   struct remote_state *rs = get_remote_state ();
2505   int done, i, result_count;
2506   int startflag = 1;
2507   int result = 1;
2508   int loopcount = 0;
2509
2510   done = 0;
2511   while (!done)
2512     {
2513       if (loopcount++ > looplimit)
2514         {
2515           result = 0;
2516           warning (_("Remote fetch threadlist -infinite loop-."));
2517           break;
2518         }
2519       if (!remote_get_threadlist (startflag, &rs->nextthread,
2520                                   MAXTHREADLISTRESULTS,
2521                                   &done, &result_count, rs->resultthreadlist))
2522         {
2523           result = 0;
2524           break;
2525         }
2526       /* Clear for later iterations.  */
2527       startflag = 0;
2528       /* Setup to resume next batch of thread references, set nextthread.  */
2529       if (result_count >= 1)
2530         copy_threadref (&rs->nextthread,
2531                         &rs->resultthreadlist[result_count - 1]);
2532       i = 0;
2533       while (result_count--)
2534         if (!(result = (*stepfunction) (&rs->resultthreadlist[i++], context)))
2535           break;
2536     }
2537   return result;
2538 }
2539
2540 static int
2541 remote_newthread_step (threadref *ref, void *context)
2542 {
2543   int pid = ptid_get_pid (inferior_ptid);
2544   ptid_t ptid = ptid_build (pid, threadref_to_int (ref), 0);
2545
2546   if (!in_thread_list (ptid))
2547     add_thread (ptid);
2548   return 1;                     /* continue iterator */
2549 }
2550
2551 #define CRAZY_MAX_THREADS 1000
2552
2553 static ptid_t
2554 remote_current_thread (ptid_t oldpid)
2555 {
2556   struct remote_state *rs = get_remote_state ();
2557
2558   putpkt ("qC");
2559   getpkt (&rs->buf, &rs->buf_size, 0);
2560   if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
2561     return read_ptid (&rs->buf[2], NULL);
2562   else
2563     return oldpid;
2564 }
2565
2566 /* Find new threads for info threads command.
2567  * Original version, using John Metzler's thread protocol.
2568  */
2569
2570 static void
2571 remote_find_new_threads (void)
2572 {
2573   remote_threadlist_iterator (remote_newthread_step, 0,
2574                               CRAZY_MAX_THREADS);
2575 }
2576
2577 #if defined(HAVE_LIBEXPAT)
2578
2579 typedef struct thread_item
2580 {
2581   ptid_t ptid;
2582   char *extra;
2583   int core;
2584 } thread_item_t;
2585 DEF_VEC_O(thread_item_t);
2586
2587 struct threads_parsing_context
2588 {
2589   VEC (thread_item_t) *items;
2590 };
2591
2592 static void
2593 start_thread (struct gdb_xml_parser *parser,
2594               const struct gdb_xml_element *element,
2595               void *user_data, VEC(gdb_xml_value_s) *attributes)
2596 {
2597   struct threads_parsing_context *data = user_data;
2598
2599   struct thread_item item;
2600   char *id;
2601   struct gdb_xml_value *attr;
2602
2603   id = xml_find_attribute (attributes, "id")->value;
2604   item.ptid = read_ptid (id, NULL);
2605
2606   attr = xml_find_attribute (attributes, "core");
2607   if (attr != NULL)
2608     item.core = *(ULONGEST *) attr->value;
2609   else
2610     item.core = -1;
2611
2612   item.extra = 0;
2613
2614   VEC_safe_push (thread_item_t, data->items, &item);
2615 }
2616
2617 static void
2618 end_thread (struct gdb_xml_parser *parser,
2619             const struct gdb_xml_element *element,
2620             void *user_data, const char *body_text)
2621 {
2622   struct threads_parsing_context *data = user_data;
2623
2624   if (body_text && *body_text)
2625     VEC_last (thread_item_t, data->items)->extra = xstrdup (body_text);
2626 }
2627
2628 const struct gdb_xml_attribute thread_attributes[] = {
2629   { "id", GDB_XML_AF_NONE, NULL, NULL },
2630   { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
2631   { NULL, GDB_XML_AF_NONE, NULL, NULL }
2632 };
2633
2634 const struct gdb_xml_element thread_children[] = {
2635   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
2636 };
2637
2638 const struct gdb_xml_element threads_children[] = {
2639   { "thread", thread_attributes, thread_children,
2640     GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
2641     start_thread, end_thread },
2642   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
2643 };
2644
2645 const struct gdb_xml_element threads_elements[] = {
2646   { "threads", NULL, threads_children,
2647     GDB_XML_EF_NONE, NULL, NULL },
2648   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
2649 };
2650
2651 /* Discard the contents of the constructed thread info context.  */
2652
2653 static void
2654 clear_threads_parsing_context (void *p)
2655 {
2656   struct threads_parsing_context *context = p;
2657   int i;
2658   struct thread_item *item;
2659
2660   for (i = 0; VEC_iterate (thread_item_t, context->items, i, item); ++i)
2661     xfree (item->extra);
2662
2663   VEC_free (thread_item_t, context->items);
2664 }
2665
2666 #endif
2667
2668 /*
2669  * Find all threads for info threads command.
2670  * Uses new thread protocol contributed by Cisco.
2671  * Falls back and attempts to use the older method (above)
2672  * if the target doesn't respond to the new method.
2673  */
2674
2675 static void
2676 remote_threads_info (struct target_ops *ops)
2677 {
2678   struct remote_state *rs = get_remote_state ();
2679   char *bufp;
2680   ptid_t new_thread;
2681
2682   if (rs->remote_desc == 0)             /* paranoia */
2683     error (_("Command can only be used when connected to the remote target."));
2684
2685 #if defined(HAVE_LIBEXPAT)
2686   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
2687     {
2688       char *xml = target_read_stralloc (&current_target,
2689                                          TARGET_OBJECT_THREADS, NULL);
2690
2691       struct cleanup *back_to = make_cleanup (xfree, xml);
2692
2693       if (xml && *xml)
2694         {
2695           struct threads_parsing_context context;
2696
2697           context.items = NULL;
2698           make_cleanup (clear_threads_parsing_context, &context);
2699
2700           if (gdb_xml_parse_quick (_("threads"), "threads.dtd",
2701                                    threads_elements, xml, &context) == 0)
2702             {
2703               int i;
2704               struct thread_item *item;
2705
2706               for (i = 0;
2707                    VEC_iterate (thread_item_t, context.items, i, item);
2708                    ++i)
2709                 {
2710                   if (!ptid_equal (item->ptid, null_ptid))
2711                     {
2712                       struct private_thread_info *info;
2713                       /* In non-stop mode, we assume new found threads
2714                          are running until proven otherwise with a
2715                          stop reply.  In all-stop, we can only get
2716                          here if all threads are stopped.  */
2717                       int running = non_stop ? 1 : 0;
2718
2719                       remote_notice_new_inferior (item->ptid, running);
2720
2721                       info = demand_private_info (item->ptid);
2722                       info->core = item->core;
2723                       info->extra = item->extra;
2724                       item->extra = NULL;
2725                     }
2726                 }
2727             }
2728         }
2729
2730       do_cleanups (back_to);
2731       return;
2732     }
2733 #endif
2734
2735   if (rs->use_threadinfo_query)
2736     {
2737       putpkt ("qfThreadInfo");
2738       getpkt (&rs->buf, &rs->buf_size, 0);
2739       bufp = rs->buf;
2740       if (bufp[0] != '\0')              /* q packet recognized */
2741         {
2742           struct cleanup *old_chain;
2743           char *saved_reply;
2744
2745           /* remote_notice_new_inferior (in the loop below) may make
2746              new RSP calls, which clobber rs->buf.  Work with a
2747              copy.  */
2748           bufp = saved_reply = xstrdup (rs->buf);
2749           old_chain = make_cleanup (free_current_contents, &saved_reply);
2750
2751           while (*bufp++ == 'm')        /* reply contains one or more TID */
2752             {
2753               do
2754                 {
2755                   new_thread = read_ptid (bufp, &bufp);
2756                   if (!ptid_equal (new_thread, null_ptid))
2757                     {
2758                       /* In non-stop mode, we assume new found threads
2759                          are running until proven otherwise with a
2760                          stop reply.  In all-stop, we can only get
2761                          here if all threads are stopped.  */
2762                       int running = non_stop ? 1 : 0;
2763
2764                       remote_notice_new_inferior (new_thread, running);
2765                     }
2766                 }
2767               while (*bufp++ == ',');   /* comma-separated list */
2768               free_current_contents (&saved_reply);
2769               putpkt ("qsThreadInfo");
2770               getpkt (&rs->buf, &rs->buf_size, 0);
2771               bufp = saved_reply = xstrdup (rs->buf);
2772             }
2773           do_cleanups (old_chain);
2774           return;       /* done */
2775         }
2776     }
2777
2778   /* Only qfThreadInfo is supported in non-stop mode.  */
2779   if (non_stop)
2780     return;
2781
2782   /* Else fall back to old method based on jmetzler protocol.  */
2783   rs->use_threadinfo_query = 0;
2784   remote_find_new_threads ();
2785   return;
2786 }
2787
2788 /*
2789  * Collect a descriptive string about the given thread.
2790  * The target may say anything it wants to about the thread
2791  * (typically info about its blocked / runnable state, name, etc.).
2792  * This string will appear in the info threads display.
2793  *
2794  * Optional: targets are not required to implement this function.
2795  */
2796
2797 static char *
2798 remote_threads_extra_info (struct target_ops *self, struct thread_info *tp)
2799 {
2800   struct remote_state *rs = get_remote_state ();
2801   int result;
2802   int set;
2803   threadref id;
2804   struct gdb_ext_thread_info threadinfo;
2805   static char display_buf[100]; /* arbitrary...  */
2806   int n = 0;                    /* position in display_buf */
2807
2808   if (rs->remote_desc == 0)             /* paranoia */
2809     internal_error (__FILE__, __LINE__,
2810                     _("remote_threads_extra_info"));
2811
2812   if (ptid_equal (tp->ptid, magic_null_ptid)
2813       || (ptid_get_pid (tp->ptid) != 0 && ptid_get_lwp (tp->ptid) == 0))
2814     /* This is the main thread which was added by GDB.  The remote
2815        server doesn't know about it.  */
2816     return NULL;
2817
2818   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
2819     {
2820       struct thread_info *info = find_thread_ptid (tp->ptid);
2821
2822       if (info && info->private)
2823         return info->private->extra;
2824       else
2825         return NULL;
2826     }
2827
2828   if (rs->use_threadextra_query)
2829     {
2830       char *b = rs->buf;
2831       char *endb = rs->buf + get_remote_packet_size ();
2832
2833       xsnprintf (b, endb - b, "qThreadExtraInfo,");
2834       b += strlen (b);
2835       write_ptid (b, endb, tp->ptid);
2836
2837       putpkt (rs->buf);
2838       getpkt (&rs->buf, &rs->buf_size, 0);
2839       if (rs->buf[0] != 0)
2840         {
2841           n = min (strlen (rs->buf) / 2, sizeof (display_buf));
2842           result = hex2bin (rs->buf, (gdb_byte *) display_buf, n);
2843           display_buf [result] = '\0';
2844           return display_buf;
2845         }
2846     }
2847
2848   /* If the above query fails, fall back to the old method.  */
2849   rs->use_threadextra_query = 0;
2850   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
2851     | TAG_MOREDISPLAY | TAG_DISPLAY;
2852   int_to_threadref (&id, ptid_get_lwp (tp->ptid));
2853   if (remote_get_threadinfo (&id, set, &threadinfo))
2854     if (threadinfo.active)
2855       {
2856         if (*threadinfo.shortname)
2857           n += xsnprintf (&display_buf[0], sizeof (display_buf) - n,
2858                           " Name: %s,", threadinfo.shortname);
2859         if (*threadinfo.display)
2860           n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
2861                           " State: %s,", threadinfo.display);
2862         if (*threadinfo.more_display)
2863           n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
2864                           " Priority: %s", threadinfo.more_display);
2865
2866         if (n > 0)
2867           {
2868             /* For purely cosmetic reasons, clear up trailing commas.  */
2869             if (',' == display_buf[n-1])
2870               display_buf[n-1] = ' ';
2871             return display_buf;
2872           }
2873       }
2874   return NULL;
2875 }
2876 \f
2877
2878 static int
2879 remote_static_tracepoint_marker_at (struct target_ops *self, CORE_ADDR addr,
2880                                     struct static_tracepoint_marker *marker)
2881 {
2882   struct remote_state *rs = get_remote_state ();
2883   char *p = rs->buf;
2884
2885   xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
2886   p += strlen (p);
2887   p += hexnumstr (p, addr);
2888   putpkt (rs->buf);
2889   getpkt (&rs->buf, &rs->buf_size, 0);
2890   p = rs->buf;
2891
2892   if (*p == 'E')
2893     error (_("Remote failure reply: %s"), p);
2894
2895   if (*p++ == 'm')
2896     {
2897       parse_static_tracepoint_marker_definition (p, &p, marker);
2898       return 1;
2899     }
2900
2901   return 0;
2902 }
2903
2904 static VEC(static_tracepoint_marker_p) *
2905 remote_static_tracepoint_markers_by_strid (struct target_ops *self,
2906                                            const char *strid)
2907 {
2908   struct remote_state *rs = get_remote_state ();
2909   VEC(static_tracepoint_marker_p) *markers = NULL;
2910   struct static_tracepoint_marker *marker = NULL;
2911   struct cleanup *old_chain;
2912   char *p;
2913
2914   /* Ask for a first packet of static tracepoint marker
2915      definition.  */
2916   putpkt ("qTfSTM");
2917   getpkt (&rs->buf, &rs->buf_size, 0);
2918   p = rs->buf;
2919   if (*p == 'E')
2920     error (_("Remote failure reply: %s"), p);
2921
2922   old_chain = make_cleanup (free_current_marker, &marker);
2923
2924   while (*p++ == 'm')
2925     {
2926       if (marker == NULL)
2927         marker = XCNEW (struct static_tracepoint_marker);
2928
2929       do
2930         {
2931           parse_static_tracepoint_marker_definition (p, &p, marker);
2932
2933           if (strid == NULL || strcmp (strid, marker->str_id) == 0)
2934             {
2935               VEC_safe_push (static_tracepoint_marker_p,
2936                              markers, marker);
2937               marker = NULL;
2938             }
2939           else
2940             {
2941               release_static_tracepoint_marker (marker);
2942               memset (marker, 0, sizeof (*marker));
2943             }
2944         }
2945       while (*p++ == ',');      /* comma-separated list */
2946       /* Ask for another packet of static tracepoint definition.  */
2947       putpkt ("qTsSTM");
2948       getpkt (&rs->buf, &rs->buf_size, 0);
2949       p = rs->buf;
2950     }
2951
2952   do_cleanups (old_chain);
2953   return markers;
2954 }
2955
2956 \f
2957 /* Implement the to_get_ada_task_ptid function for the remote targets.  */
2958
2959 static ptid_t
2960 remote_get_ada_task_ptid (struct target_ops *self, long lwp, long thread)
2961 {
2962   return ptid_build (ptid_get_pid (inferior_ptid), lwp, 0);
2963 }
2964 \f
2965
2966 /* Restart the remote side; this is an extended protocol operation.  */
2967
2968 static void
2969 extended_remote_restart (void)
2970 {
2971   struct remote_state *rs = get_remote_state ();
2972
2973   /* Send the restart command; for reasons I don't understand the
2974      remote side really expects a number after the "R".  */
2975   xsnprintf (rs->buf, get_remote_packet_size (), "R%x", 0);
2976   putpkt (rs->buf);
2977
2978   remote_fileio_reset ();
2979 }
2980 \f
2981 /* Clean up connection to a remote debugger.  */
2982
2983 static void
2984 remote_close (struct target_ops *self)
2985 {
2986   struct remote_state *rs = get_remote_state ();
2987
2988   if (rs->remote_desc == NULL)
2989     return; /* already closed */
2990
2991   /* Make sure we leave stdin registered in the event loop, and we
2992      don't leave the async SIGINT signal handler installed.  */
2993   remote_terminal_ours (self);
2994
2995   serial_close (rs->remote_desc);
2996   rs->remote_desc = NULL;
2997
2998   /* We don't have a connection to the remote stub anymore.  Get rid
2999      of all the inferiors and their threads we were controlling.
3000      Reset inferior_ptid to null_ptid first, as otherwise has_stack_frame
3001      will be unable to find the thread corresponding to (pid, 0, 0).  */
3002   inferior_ptid = null_ptid;
3003   discard_all_inferiors ();
3004
3005   /* We are closing the remote target, so we should discard
3006      everything of this target.  */
3007   discard_pending_stop_replies_in_queue (rs);
3008
3009   if (remote_async_inferior_event_token)
3010     delete_async_event_handler (&remote_async_inferior_event_token);
3011
3012   remote_notif_state_xfree (rs->notif_state);
3013
3014   trace_reset_local_state ();
3015 }
3016
3017 /* Query the remote side for the text, data and bss offsets.  */
3018
3019 static void
3020 get_offsets (void)
3021 {
3022   struct remote_state *rs = get_remote_state ();
3023   char *buf;
3024   char *ptr;
3025   int lose, num_segments = 0, do_sections, do_segments;
3026   CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
3027   struct section_offsets *offs;
3028   struct symfile_segment_data *data;
3029
3030   if (symfile_objfile == NULL)
3031     return;
3032
3033   putpkt ("qOffsets");
3034   getpkt (&rs->buf, &rs->buf_size, 0);
3035   buf = rs->buf;
3036
3037   if (buf[0] == '\000')
3038     return;                     /* Return silently.  Stub doesn't support
3039                                    this command.  */
3040   if (buf[0] == 'E')
3041     {
3042       warning (_("Remote failure reply: %s"), buf);
3043       return;
3044     }
3045
3046   /* Pick up each field in turn.  This used to be done with scanf, but
3047      scanf will make trouble if CORE_ADDR size doesn't match
3048      conversion directives correctly.  The following code will work
3049      with any size of CORE_ADDR.  */
3050   text_addr = data_addr = bss_addr = 0;
3051   ptr = buf;
3052   lose = 0;
3053
3054   if (strncmp (ptr, "Text=", 5) == 0)
3055     {
3056       ptr += 5;
3057       /* Don't use strtol, could lose on big values.  */
3058       while (*ptr && *ptr != ';')
3059         text_addr = (text_addr << 4) + fromhex (*ptr++);
3060
3061       if (strncmp (ptr, ";Data=", 6) == 0)
3062         {
3063           ptr += 6;
3064           while (*ptr && *ptr != ';')
3065             data_addr = (data_addr << 4) + fromhex (*ptr++);
3066         }
3067       else
3068         lose = 1;
3069
3070       if (!lose && strncmp (ptr, ";Bss=", 5) == 0)
3071         {
3072           ptr += 5;
3073           while (*ptr && *ptr != ';')
3074             bss_addr = (bss_addr << 4) + fromhex (*ptr++);
3075
3076           if (bss_addr != data_addr)
3077             warning (_("Target reported unsupported offsets: %s"), buf);
3078         }
3079       else
3080         lose = 1;
3081     }
3082   else if (strncmp (ptr, "TextSeg=", 8) == 0)
3083     {
3084       ptr += 8;
3085       /* Don't use strtol, could lose on big values.  */
3086       while (*ptr && *ptr != ';')
3087         text_addr = (text_addr << 4) + fromhex (*ptr++);
3088       num_segments = 1;
3089
3090       if (strncmp (ptr, ";DataSeg=", 9) == 0)
3091         {
3092           ptr += 9;
3093           while (*ptr && *ptr != ';')
3094             data_addr = (data_addr << 4) + fromhex (*ptr++);
3095           num_segments++;
3096         }
3097     }
3098   else
3099     lose = 1;
3100
3101   if (lose)
3102     error (_("Malformed response to offset query, %s"), buf);
3103   else if (*ptr != '\0')
3104     warning (_("Target reported unsupported offsets: %s"), buf);
3105
3106   offs = ((struct section_offsets *)
3107           alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
3108   memcpy (offs, symfile_objfile->section_offsets,
3109           SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
3110
3111   data = get_symfile_segment_data (symfile_objfile->obfd);
3112   do_segments = (data != NULL);
3113   do_sections = num_segments == 0;
3114
3115   if (num_segments > 0)
3116     {
3117       segments[0] = text_addr;
3118       segments[1] = data_addr;
3119     }
3120   /* If we have two segments, we can still try to relocate everything
3121      by assuming that the .text and .data offsets apply to the whole
3122      text and data segments.  Convert the offsets given in the packet
3123      to base addresses for symfile_map_offsets_to_segments.  */
3124   else if (data && data->num_segments == 2)
3125     {
3126       segments[0] = data->segment_bases[0] + text_addr;
3127       segments[1] = data->segment_bases[1] + data_addr;
3128       num_segments = 2;
3129     }
3130   /* If the object file has only one segment, assume that it is text
3131      rather than data; main programs with no writable data are rare,
3132      but programs with no code are useless.  Of course the code might
3133      have ended up in the data segment... to detect that we would need
3134      the permissions here.  */
3135   else if (data && data->num_segments == 1)
3136     {
3137       segments[0] = data->segment_bases[0] + text_addr;
3138       num_segments = 1;
3139     }
3140   /* There's no way to relocate by segment.  */
3141   else
3142     do_segments = 0;
3143
3144   if (do_segments)
3145     {
3146       int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
3147                                                  offs, num_segments, segments);
3148
3149       if (ret == 0 && !do_sections)
3150         error (_("Can not handle qOffsets TextSeg "
3151                  "response with this symbol file"));
3152
3153       if (ret > 0)
3154         do_sections = 0;
3155     }
3156
3157   if (data)
3158     free_symfile_segment_data (data);
3159
3160   if (do_sections)
3161     {
3162       offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
3163
3164       /* This is a temporary kludge to force data and bss to use the
3165          same offsets because that's what nlmconv does now.  The real
3166          solution requires changes to the stub and remote.c that I
3167          don't have time to do right now.  */
3168
3169       offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
3170       offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
3171     }
3172
3173   objfile_relocate (symfile_objfile, offs);
3174 }
3175
3176 /* Callback for iterate_over_threads.  Set the STOP_REQUESTED flags in
3177    threads we know are stopped already.  This is used during the
3178    initial remote connection in non-stop mode --- threads that are
3179    reported as already being stopped are left stopped.  */
3180
3181 static int
3182 set_stop_requested_callback (struct thread_info *thread, void *data)
3183 {
3184   /* If we have a stop reply for this thread, it must be stopped.  */
3185   if (peek_stop_reply (thread->ptid))
3186     set_stop_requested (thread->ptid, 1);
3187
3188   return 0;
3189 }
3190
3191 /* Send interrupt_sequence to remote target.  */
3192 static void
3193 send_interrupt_sequence (void)
3194 {
3195   struct remote_state *rs = get_remote_state ();
3196
3197   if (interrupt_sequence_mode == interrupt_sequence_control_c)
3198     remote_serial_write ("\x03", 1);
3199   else if (interrupt_sequence_mode == interrupt_sequence_break)
3200     serial_send_break (rs->remote_desc);
3201   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
3202     {
3203       serial_send_break (rs->remote_desc);
3204       remote_serial_write ("g", 1);
3205     }
3206   else
3207     internal_error (__FILE__, __LINE__,
3208                     _("Invalid value for interrupt_sequence_mode: %s."),
3209                     interrupt_sequence_mode);
3210 }
3211
3212
3213 /* If STOP_REPLY is a T stop reply, look for the "thread" register,
3214    and extract the PTID.  Returns NULL_PTID if not found.  */
3215
3216 static ptid_t
3217 stop_reply_extract_thread (char *stop_reply)
3218 {
3219   if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
3220     {
3221       char *p;
3222
3223       /* Txx r:val ; r:val (...)  */
3224       p = &stop_reply[3];
3225
3226       /* Look for "register" named "thread".  */
3227       while (*p != '\0')
3228         {
3229           char *p1;
3230
3231           p1 = strchr (p, ':');
3232           if (p1 == NULL)
3233             return null_ptid;
3234
3235           if (strncmp (p, "thread", p1 - p) == 0)
3236             return read_ptid (++p1, &p);
3237
3238           p1 = strchr (p, ';');
3239           if (p1 == NULL)
3240             return null_ptid;
3241           p1++;
3242
3243           p = p1;
3244         }
3245     }
3246
3247   return null_ptid;
3248 }
3249
3250 /* Determine the remote side's current thread.  If we have a stop
3251    reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
3252    "thread" register we can extract the current thread from.  If not,
3253    ask the remote which is the current thread with qC.  The former
3254    method avoids a roundtrip.  */
3255
3256 static ptid_t
3257 get_current_thread (char *wait_status)
3258 {
3259   ptid_t ptid;
3260
3261   /* Note we don't use remote_parse_stop_reply as that makes use of
3262      the target architecture, which we haven't yet fully determined at
3263      this point.  */
3264   if (wait_status != NULL)
3265     ptid = stop_reply_extract_thread (wait_status);
3266   if (ptid_equal (ptid, null_ptid))
3267     ptid = remote_current_thread (inferior_ptid);
3268
3269   return ptid;
3270 }
3271
3272 /* Query the remote target for which is the current thread/process,
3273    add it to our tables, and update INFERIOR_PTID.  The caller is
3274    responsible for setting the state such that the remote end is ready
3275    to return the current thread.
3276
3277    This function is called after handling the '?' or 'vRun' packets,
3278    whose response is a stop reply from which we can also try
3279    extracting the thread.  If the target doesn't support the explicit
3280    qC query, we infer the current thread from that stop reply, passed
3281    in in WAIT_STATUS, which may be NULL.  */
3282
3283 static void
3284 add_current_inferior_and_thread (char *wait_status)
3285 {
3286   struct remote_state *rs = get_remote_state ();
3287   int fake_pid_p = 0;
3288   ptid_t ptid = null_ptid;
3289
3290   inferior_ptid = null_ptid;
3291
3292   /* Now, if we have thread information, update inferior_ptid.  */
3293   ptid = get_current_thread (wait_status);
3294
3295   if (!ptid_equal (ptid, null_ptid))
3296     {
3297       if (!remote_multi_process_p (rs))
3298         fake_pid_p = 1;
3299
3300       inferior_ptid = ptid;
3301     }
3302   else
3303     {
3304       /* Without this, some commands which require an active target
3305          (such as kill) won't work.  This variable serves (at least)
3306          double duty as both the pid of the target process (if it has
3307          such), and as a flag indicating that a target is active.  */
3308       inferior_ptid = magic_null_ptid;
3309       fake_pid_p = 1;
3310     }
3311
3312   remote_add_inferior (fake_pid_p, ptid_get_pid (inferior_ptid), -1);
3313
3314   /* Add the main thread.  */
3315   add_thread_silent (inferior_ptid);
3316 }
3317
3318 static void
3319 remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
3320 {
3321   struct remote_state *rs = get_remote_state ();
3322   struct packet_config *noack_config;
3323   char *wait_status = NULL;
3324
3325   immediate_quit++;             /* Allow user to interrupt it.  */
3326   QUIT;
3327
3328   if (interrupt_on_connect)
3329     send_interrupt_sequence ();
3330
3331   /* Ack any packet which the remote side has already sent.  */
3332   serial_write (rs->remote_desc, "+", 1);
3333
3334   /* Signal other parts that we're going through the initial setup,
3335      and so things may not be stable yet.  */
3336   rs->starting_up = 1;
3337
3338   /* The first packet we send to the target is the optional "supported
3339      packets" request.  If the target can answer this, it will tell us
3340      which later probes to skip.  */
3341   remote_query_supported ();
3342
3343   /* If the stub wants to get a QAllow, compose one and send it.  */
3344   if (packet_support (PACKET_QAllow) != PACKET_DISABLE)
3345     remote_set_permissions (target);
3346
3347   /* Next, we possibly activate noack mode.
3348
3349      If the QStartNoAckMode packet configuration is set to AUTO,
3350      enable noack mode if the stub reported a wish for it with
3351      qSupported.
3352
3353      If set to TRUE, then enable noack mode even if the stub didn't
3354      report it in qSupported.  If the stub doesn't reply OK, the
3355      session ends with an error.
3356
3357      If FALSE, then don't activate noack mode, regardless of what the
3358      stub claimed should be the default with qSupported.  */
3359
3360   noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
3361   if (packet_config_support (noack_config) != PACKET_DISABLE)
3362     {
3363       putpkt ("QStartNoAckMode");
3364       getpkt (&rs->buf, &rs->buf_size, 0);
3365       if (packet_ok (rs->buf, noack_config) == PACKET_OK)
3366         rs->noack_mode = 1;
3367     }
3368
3369   if (extended_p)
3370     {
3371       /* Tell the remote that we are using the extended protocol.  */
3372       putpkt ("!");
3373       getpkt (&rs->buf, &rs->buf_size, 0);
3374     }
3375
3376   /* Let the target know which signals it is allowed to pass down to
3377      the program.  */
3378   update_signals_program_target ();
3379
3380   /* Next, if the target can specify a description, read it.  We do
3381      this before anything involving memory or registers.  */
3382   target_find_description ();
3383
3384   /* Next, now that we know something about the target, update the
3385      address spaces in the program spaces.  */
3386   update_address_spaces ();
3387
3388   /* On OSs where the list of libraries is global to all
3389      processes, we fetch them early.  */
3390   if (gdbarch_has_global_solist (target_gdbarch ()))
3391     solib_add (NULL, from_tty, target, auto_solib_add);
3392
3393   if (non_stop)
3394     {
3395       if (packet_support (PACKET_QNonStop) != PACKET_ENABLE)
3396         error (_("Non-stop mode requested, but remote "
3397                  "does not support non-stop"));
3398
3399       putpkt ("QNonStop:1");
3400       getpkt (&rs->buf, &rs->buf_size, 0);
3401
3402       if (strcmp (rs->buf, "OK") != 0)
3403         error (_("Remote refused setting non-stop mode with: %s"), rs->buf);
3404
3405       /* Find about threads and processes the stub is already
3406          controlling.  We default to adding them in the running state.
3407          The '?' query below will then tell us about which threads are
3408          stopped.  */
3409       remote_threads_info (target);
3410     }
3411   else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
3412     {
3413       /* Don't assume that the stub can operate in all-stop mode.
3414          Request it explicitly.  */
3415       putpkt ("QNonStop:0");
3416       getpkt (&rs->buf, &rs->buf_size, 0);
3417
3418       if (strcmp (rs->buf, "OK") != 0)
3419         error (_("Remote refused setting all-stop mode with: %s"), rs->buf);
3420     }
3421
3422   /* Upload TSVs regardless of whether the target is running or not.  The
3423      remote stub, such as GDBserver, may have some predefined or builtin
3424      TSVs, even if the target is not running.  */
3425   if (remote_get_trace_status (target, current_trace_status ()) != -1)
3426     {
3427       struct uploaded_tsv *uploaded_tsvs = NULL;
3428
3429       remote_upload_trace_state_variables (target, &uploaded_tsvs);
3430       merge_uploaded_trace_state_variables (&uploaded_tsvs);
3431     }
3432
3433   /* Check whether the target is running now.  */
3434   putpkt ("?");
3435   getpkt (&rs->buf, &rs->buf_size, 0);
3436
3437   if (!non_stop)
3438     {
3439       ptid_t ptid;
3440       int fake_pid_p = 0;
3441       struct inferior *inf;
3442
3443       if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
3444         {
3445           if (!extended_p)
3446             error (_("The target is not running (try extended-remote?)"));
3447
3448           /* We're connected, but not running.  Drop out before we
3449              call start_remote.  */
3450           rs->starting_up = 0;
3451           return;
3452         }
3453       else
3454         {
3455           /* Save the reply for later.  */
3456           wait_status = alloca (strlen (rs->buf) + 1);
3457           strcpy (wait_status, rs->buf);
3458         }
3459
3460       /* Fetch thread list.  */
3461       target_find_new_threads ();
3462
3463       /* Let the stub know that we want it to return the thread.  */
3464       set_continue_thread (minus_one_ptid);
3465
3466       if (thread_count () == 0)
3467         {
3468           /* Target has no concept of threads at all.  GDB treats
3469              non-threaded target as single-threaded; add a main
3470              thread.  */
3471           add_current_inferior_and_thread (wait_status);
3472         }
3473       else
3474         {
3475           /* We have thread information; select the thread the target
3476              says should be current.  If we're reconnecting to a
3477              multi-threaded program, this will ideally be the thread
3478              that last reported an event before GDB disconnected.  */
3479           inferior_ptid = get_current_thread (wait_status);
3480           if (ptid_equal (inferior_ptid, null_ptid))
3481             {
3482               /* Odd... The target was able to list threads, but not
3483                  tell us which thread was current (no "thread"
3484                  register in T stop reply?).  Just pick the first
3485                  thread in the thread list then.  */
3486               inferior_ptid = thread_list->ptid;
3487             }
3488         }
3489
3490       /* init_wait_for_inferior should be called before get_offsets in order
3491          to manage `inserted' flag in bp loc in a correct state.
3492          breakpoint_init_inferior, called from init_wait_for_inferior, set
3493          `inserted' flag to 0, while before breakpoint_re_set, called from
3494          start_remote, set `inserted' flag to 1.  In the initialization of
3495          inferior, breakpoint_init_inferior should be called first, and then
3496          breakpoint_re_set can be called.  If this order is broken, state of
3497          `inserted' flag is wrong, and cause some problems on breakpoint
3498          manipulation.  */
3499       init_wait_for_inferior ();
3500
3501       get_offsets ();           /* Get text, data & bss offsets.  */
3502
3503       /* If we could not find a description using qXfer, and we know
3504          how to do it some other way, try again.  This is not
3505          supported for non-stop; it could be, but it is tricky if
3506          there are no stopped threads when we connect.  */
3507       if (remote_read_description_p (target)
3508           && gdbarch_target_desc (target_gdbarch ()) == NULL)
3509         {
3510           target_clear_description ();
3511           target_find_description ();
3512         }
3513
3514       /* Use the previously fetched status.  */
3515       gdb_assert (wait_status != NULL);
3516       strcpy (rs->buf, wait_status);
3517       rs->cached_wait_status = 1;
3518
3519       immediate_quit--;
3520       start_remote (from_tty); /* Initialize gdb process mechanisms.  */
3521     }
3522   else
3523     {
3524       /* Clear WFI global state.  Do this before finding about new
3525          threads and inferiors, and setting the current inferior.
3526          Otherwise we would clear the proceed status of the current
3527          inferior when we want its stop_soon state to be preserved
3528          (see notice_new_inferior).  */
3529       init_wait_for_inferior ();
3530
3531       /* In non-stop, we will either get an "OK", meaning that there
3532          are no stopped threads at this time; or, a regular stop
3533          reply.  In the latter case, there may be more than one thread
3534          stopped --- we pull them all out using the vStopped
3535          mechanism.  */
3536       if (strcmp (rs->buf, "OK") != 0)
3537         {
3538           struct notif_client *notif = &notif_client_stop;
3539
3540           /* remote_notif_get_pending_replies acks this one, and gets
3541              the rest out.  */
3542           rs->notif_state->pending_event[notif_client_stop.id]
3543             = remote_notif_parse (notif, rs->buf);
3544           remote_notif_get_pending_events (notif);
3545
3546           /* Make sure that threads that were stopped remain
3547              stopped.  */
3548           iterate_over_threads (set_stop_requested_callback, NULL);
3549         }
3550
3551       if (target_can_async_p ())
3552         target_async (inferior_event_handler, 0);
3553
3554       if (thread_count () == 0)
3555         {
3556           if (!extended_p)
3557             error (_("The target is not running (try extended-remote?)"));
3558
3559           /* We're connected, but not running.  Drop out before we
3560              call start_remote.  */
3561           rs->starting_up = 0;
3562           return;
3563         }
3564
3565       /* Let the stub know that we want it to return the thread.  */
3566
3567       /* Force the stub to choose a thread.  */
3568       set_general_thread (null_ptid);
3569
3570       /* Query it.  */
3571       inferior_ptid = remote_current_thread (minus_one_ptid);
3572       if (ptid_equal (inferior_ptid, minus_one_ptid))
3573         error (_("remote didn't report the current thread in non-stop mode"));
3574
3575       get_offsets ();           /* Get text, data & bss offsets.  */
3576
3577       /* In non-stop mode, any cached wait status will be stored in
3578          the stop reply queue.  */
3579       gdb_assert (wait_status == NULL);
3580
3581       /* Report all signals during attach/startup.  */
3582       remote_pass_signals (target, 0, NULL);
3583     }
3584
3585   /* If we connected to a live target, do some additional setup.  */
3586   if (target_has_execution)
3587     {
3588       if (symfile_objfile)      /* No use without a symbol-file.  */
3589         remote_check_symbols ();
3590     }
3591
3592   /* Possibly the target has been engaged in a trace run started
3593      previously; find out where things are at.  */
3594   if (remote_get_trace_status (target, current_trace_status ()) != -1)
3595     {
3596       struct uploaded_tp *uploaded_tps = NULL;
3597
3598       if (current_trace_status ()->running)
3599         printf_filtered (_("Trace is already running on the target.\n"));
3600
3601       remote_upload_tracepoints (target, &uploaded_tps);
3602
3603       merge_uploaded_tracepoints (&uploaded_tps);
3604     }
3605
3606   /* The thread and inferior lists are now synchronized with the
3607      target, our symbols have been relocated, and we're merged the
3608      target's tracepoints with ours.  We're done with basic start
3609      up.  */
3610   rs->starting_up = 0;
3611
3612   /* If breakpoints are global, insert them now.  */
3613   if (gdbarch_has_global_breakpoints (target_gdbarch ())
3614       && breakpoints_always_inserted_mode ())
3615     insert_breakpoints ();
3616 }
3617
3618 /* Open a connection to a remote debugger.
3619    NAME is the filename used for communication.  */
3620
3621 static void
3622 remote_open (char *name, int from_tty)
3623 {
3624   remote_open_1 (name, from_tty, &remote_ops, 0);
3625 }
3626
3627 /* Open a connection to a remote debugger using the extended
3628    remote gdb protocol.  NAME is the filename used for communication.  */
3629
3630 static void
3631 extended_remote_open (char *name, int from_tty)
3632 {
3633   remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */);
3634 }
3635
3636 /* Reset all packets back to "unknown support".  Called when opening a
3637    new connection to a remote target.  */
3638
3639 static void
3640 reset_all_packet_configs_support (void)
3641 {
3642   int i;
3643
3644   for (i = 0; i < PACKET_MAX; i++)
3645     remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
3646 }
3647
3648 /* Initialize all packet configs.  */
3649
3650 static void
3651 init_all_packet_configs (void)
3652 {
3653   int i;
3654
3655   for (i = 0; i < PACKET_MAX; i++)
3656     {
3657       remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
3658       remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
3659     }
3660 }
3661
3662 /* Symbol look-up.  */
3663
3664 static void
3665 remote_check_symbols (void)
3666 {
3667   struct remote_state *rs = get_remote_state ();
3668   char *msg, *reply, *tmp;
3669   struct bound_minimal_symbol sym;
3670   int end;
3671
3672   /* The remote side has no concept of inferiors that aren't running
3673      yet, it only knows about running processes.  If we're connected
3674      but our current inferior is not running, we should not invite the
3675      remote target to request symbol lookups related to its
3676      (unrelated) current process.  */
3677   if (!target_has_execution)
3678     return;
3679
3680   if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
3681     return;
3682
3683   /* Make sure the remote is pointing at the right process.  Note
3684      there's no way to select "no process".  */
3685   set_general_process ();
3686
3687   /* Allocate a message buffer.  We can't reuse the input buffer in RS,
3688      because we need both at the same time.  */
3689   msg = alloca (get_remote_packet_size ());
3690
3691   /* Invite target to request symbol lookups.  */
3692
3693   putpkt ("qSymbol::");
3694   getpkt (&rs->buf, &rs->buf_size, 0);
3695   packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSymbol]);
3696   reply = rs->buf;
3697
3698   while (strncmp (reply, "qSymbol:", 8) == 0)
3699     {
3700       struct bound_minimal_symbol sym;
3701
3702       tmp = &reply[8];
3703       end = hex2bin (tmp, (gdb_byte *) msg, strlen (tmp) / 2);
3704       msg[end] = '\0';
3705       sym = lookup_minimal_symbol (msg, NULL, NULL);
3706       if (sym.minsym == NULL)
3707         xsnprintf (msg, get_remote_packet_size (), "qSymbol::%s", &reply[8]);
3708       else
3709         {
3710           int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
3711           CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
3712
3713           /* If this is a function address, return the start of code
3714              instead of any data function descriptor.  */
3715           sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
3716                                                          sym_addr,
3717                                                          &current_target);
3718
3719           xsnprintf (msg, get_remote_packet_size (), "qSymbol:%s:%s",
3720                      phex_nz (sym_addr, addr_size), &reply[8]);
3721         }
3722   
3723       putpkt (msg);
3724       getpkt (&rs->buf, &rs->buf_size, 0);
3725       reply = rs->buf;
3726     }
3727 }
3728
3729 static struct serial *
3730 remote_serial_open (char *name)
3731 {
3732   static int udp_warning = 0;
3733
3734   /* FIXME: Parsing NAME here is a hack.  But we want to warn here instead
3735      of in ser-tcp.c, because it is the remote protocol assuming that the
3736      serial connection is reliable and not the serial connection promising
3737      to be.  */
3738   if (!udp_warning && strncmp (name, "udp:", 4) == 0)
3739     {
3740       warning (_("The remote protocol may be unreliable over UDP.\n"
3741                  "Some events may be lost, rendering further debugging "
3742                  "impossible."));
3743       udp_warning = 1;
3744     }
3745
3746   return serial_open (name);
3747 }
3748
3749 /* Inform the target of our permission settings.  The permission flags
3750    work without this, but if the target knows the settings, it can do
3751    a couple things.  First, it can add its own check, to catch cases
3752    that somehow manage to get by the permissions checks in target
3753    methods.  Second, if the target is wired to disallow particular
3754    settings (for instance, a system in the field that is not set up to
3755    be able to stop at a breakpoint), it can object to any unavailable
3756    permissions.  */
3757
3758 void
3759 remote_set_permissions (struct target_ops *self)
3760 {
3761   struct remote_state *rs = get_remote_state ();
3762
3763   xsnprintf (rs->buf, get_remote_packet_size (), "QAllow:"
3764              "WriteReg:%x;WriteMem:%x;"
3765              "InsertBreak:%x;InsertTrace:%x;"
3766              "InsertFastTrace:%x;Stop:%x",
3767              may_write_registers, may_write_memory,
3768              may_insert_breakpoints, may_insert_tracepoints,
3769              may_insert_fast_tracepoints, may_stop);
3770   putpkt (rs->buf);
3771   getpkt (&rs->buf, &rs->buf_size, 0);
3772
3773   /* If the target didn't like the packet, warn the user.  Do not try
3774      to undo the user's settings, that would just be maddening.  */
3775   if (strcmp (rs->buf, "OK") != 0)
3776     warning (_("Remote refused setting permissions with: %s"), rs->buf);
3777 }
3778
3779 /* This type describes each known response to the qSupported
3780    packet.  */
3781 struct protocol_feature
3782 {
3783   /* The name of this protocol feature.  */
3784   const char *name;
3785
3786   /* The default for this protocol feature.  */
3787   enum packet_support default_support;
3788
3789   /* The function to call when this feature is reported, or after
3790      qSupported processing if the feature is not supported.
3791      The first argument points to this structure.  The second
3792      argument indicates whether the packet requested support be
3793      enabled, disabled, or probed (or the default, if this function
3794      is being called at the end of processing and this feature was
3795      not reported).  The third argument may be NULL; if not NULL, it
3796      is a NUL-terminated string taken from the packet following
3797      this feature's name and an equals sign.  */
3798   void (*func) (const struct protocol_feature *, enum packet_support,
3799                 const char *);
3800
3801   /* The corresponding packet for this feature.  Only used if
3802      FUNC is remote_supported_packet.  */
3803   int packet;
3804 };
3805
3806 static void
3807 remote_supported_packet (const struct protocol_feature *feature,
3808                          enum packet_support support,
3809                          const char *argument)
3810 {
3811   if (argument)
3812     {
3813       warning (_("Remote qSupported response supplied an unexpected value for"
3814                  " \"%s\"."), feature->name);
3815       return;
3816     }
3817
3818   remote_protocol_packets[feature->packet].support = support;
3819 }
3820
3821 static void
3822 remote_packet_size (const struct protocol_feature *feature,
3823                     enum packet_support support, const char *value)
3824 {
3825   struct remote_state *rs = get_remote_state ();
3826
3827   int packet_size;
3828   char *value_end;
3829
3830   if (support != PACKET_ENABLE)
3831     return;
3832
3833   if (value == NULL || *value == '\0')
3834     {
3835       warning (_("Remote target reported \"%s\" without a size."),
3836                feature->name);
3837       return;
3838     }
3839
3840   errno = 0;
3841   packet_size = strtol (value, &value_end, 16);
3842   if (errno != 0 || *value_end != '\0' || packet_size < 0)
3843     {
3844       warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
3845                feature->name, value);
3846       return;
3847     }
3848
3849   if (packet_size > MAX_REMOTE_PACKET_SIZE)
3850     {
3851       warning (_("limiting remote suggested packet size (%d bytes) to %d"),
3852                packet_size, MAX_REMOTE_PACKET_SIZE);
3853       packet_size = MAX_REMOTE_PACKET_SIZE;
3854     }
3855
3856   /* Record the new maximum packet size.  */
3857   rs->explicit_packet_size = packet_size;
3858 }
3859
3860 static const struct protocol_feature remote_protocol_features[] = {
3861   { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
3862   { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
3863     PACKET_qXfer_auxv },
3864   { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
3865     PACKET_qXfer_features },
3866   { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
3867     PACKET_qXfer_libraries },
3868   { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
3869     PACKET_qXfer_libraries_svr4 },
3870   { "augmented-libraries-svr4-read", PACKET_DISABLE,
3871     remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
3872   { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
3873     PACKET_qXfer_memory_map },
3874   { "qXfer:spu:read", PACKET_DISABLE, remote_supported_packet,
3875     PACKET_qXfer_spu_read },
3876   { "qXfer:spu:write", PACKET_DISABLE, remote_supported_packet,
3877     PACKET_qXfer_spu_write },
3878   { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
3879     PACKET_qXfer_osdata },
3880   { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
3881     PACKET_qXfer_threads },
3882   { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
3883     PACKET_qXfer_traceframe_info },
3884   { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
3885     PACKET_QPassSignals },
3886   { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
3887     PACKET_QProgramSignals },
3888   { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
3889     PACKET_QStartNoAckMode },
3890   { "multiprocess", PACKET_DISABLE, remote_supported_packet,
3891     PACKET_multiprocess_feature },
3892   { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
3893   { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
3894     PACKET_qXfer_siginfo_read },
3895   { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
3896     PACKET_qXfer_siginfo_write },
3897   { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
3898     PACKET_ConditionalTracepoints },
3899   { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
3900     PACKET_ConditionalBreakpoints },
3901   { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
3902     PACKET_BreakpointCommands },
3903   { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
3904     PACKET_FastTracepoints },
3905   { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
3906     PACKET_StaticTracepoints },
3907   {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
3908    PACKET_InstallInTrace},
3909   { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
3910     PACKET_DisconnectedTracing_feature },
3911   { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
3912     PACKET_bc },
3913   { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
3914     PACKET_bs },
3915   { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
3916     PACKET_TracepointSource },
3917   { "QAllow", PACKET_DISABLE, remote_supported_packet,
3918     PACKET_QAllow },
3919   { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
3920     PACKET_EnableDisableTracepoints_feature },
3921   { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
3922     PACKET_qXfer_fdpic },
3923   { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
3924     PACKET_qXfer_uib },
3925   { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
3926     PACKET_QDisableRandomization },
3927   { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
3928   { "QTBuffer:size", PACKET_DISABLE,
3929     remote_supported_packet, PACKET_QTBuffer_size},
3930   { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
3931   { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
3932   { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
3933   { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
3934     PACKET_qXfer_btrace }
3935 };
3936
3937 static char *remote_support_xml;
3938
3939 /* Register string appended to "xmlRegisters=" in qSupported query.  */
3940
3941 void
3942 register_remote_support_xml (const char *xml)
3943 {
3944 #if defined(HAVE_LIBEXPAT)
3945   if (remote_support_xml == NULL)
3946     remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
3947   else
3948     {
3949       char *copy = xstrdup (remote_support_xml + 13);
3950       char *p = strtok (copy, ",");
3951
3952       do
3953         {
3954           if (strcmp (p, xml) == 0)
3955             {
3956               /* already there */
3957               xfree (copy);
3958               return;
3959             }
3960         }
3961       while ((p = strtok (NULL, ",")) != NULL);
3962       xfree (copy);
3963
3964       remote_support_xml = reconcat (remote_support_xml,
3965                                      remote_support_xml, ",", xml,
3966                                      (char *) NULL);
3967     }
3968 #endif
3969 }
3970
3971 static char *
3972 remote_query_supported_append (char *msg, const char *append)
3973 {
3974   if (msg)
3975     return reconcat (msg, msg, ";", append, (char *) NULL);
3976   else
3977     return xstrdup (append);
3978 }
3979
3980 static void
3981 remote_query_supported (void)
3982 {
3983   struct remote_state *rs = get_remote_state ();
3984   char *next;
3985   int i;
3986   unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
3987
3988   /* The packet support flags are handled differently for this packet
3989      than for most others.  We treat an error, a disabled packet, and
3990      an empty response identically: any features which must be reported
3991      to be used will be automatically disabled.  An empty buffer
3992      accomplishes this, since that is also the representation for a list
3993      containing no features.  */
3994
3995   rs->buf[0] = 0;
3996   if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
3997     {
3998       char *q = NULL;
3999       struct cleanup *old_chain = make_cleanup (free_current_contents, &q);
4000
4001       q = remote_query_supported_append (q, "multiprocess+");
4002
4003       if (remote_support_xml)
4004         q = remote_query_supported_append (q, remote_support_xml);
4005
4006       q = remote_query_supported_append (q, "qRelocInsn+");
4007
4008       q = reconcat (q, "qSupported:", q, (char *) NULL);
4009       putpkt (q);
4010
4011       do_cleanups (old_chain);
4012
4013       getpkt (&rs->buf, &rs->buf_size, 0);
4014
4015       /* If an error occured, warn, but do not return - just reset the
4016          buffer to empty and go on to disable features.  */
4017       if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
4018           == PACKET_ERROR)
4019         {
4020           warning (_("Remote failure reply: %s"), rs->buf);
4021           rs->buf[0] = 0;
4022         }
4023     }
4024
4025   memset (seen, 0, sizeof (seen));
4026
4027   next = rs->buf;
4028   while (*next)
4029     {
4030       enum packet_support is_supported;
4031       char *p, *end, *name_end, *value;
4032
4033       /* First separate out this item from the rest of the packet.  If
4034          there's another item after this, we overwrite the separator
4035          (terminated strings are much easier to work with).  */
4036       p = next;
4037       end = strchr (p, ';');
4038       if (end == NULL)
4039         {
4040           end = p + strlen (p);
4041           next = end;
4042         }
4043       else
4044         {
4045           *end = '\0';
4046           next = end + 1;
4047
4048           if (end == p)
4049             {
4050               warning (_("empty item in \"qSupported\" response"));
4051               continue;
4052             }
4053         }
4054
4055       name_end = strchr (p, '=');
4056       if (name_end)
4057         {
4058           /* This is a name=value entry.  */
4059           is_supported = PACKET_ENABLE;
4060           value = name_end + 1;
4061           *name_end = '\0';
4062         }
4063       else
4064         {
4065           value = NULL;
4066           switch (end[-1])
4067             {
4068             case '+':
4069               is_supported = PACKET_ENABLE;
4070               break;
4071
4072             case '-':
4073               is_supported = PACKET_DISABLE;
4074               break;
4075
4076             case '?':
4077               is_supported = PACKET_SUPPORT_UNKNOWN;
4078               break;
4079
4080             default:
4081               warning (_("unrecognized item \"%s\" "
4082                          "in \"qSupported\" response"), p);
4083               continue;
4084             }
4085           end[-1] = '\0';
4086         }
4087
4088       for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4089         if (strcmp (remote_protocol_features[i].name, p) == 0)
4090           {
4091             const struct protocol_feature *feature;
4092
4093             seen[i] = 1;
4094             feature = &remote_protocol_features[i];
4095             feature->func (feature, is_supported, value);
4096             break;
4097           }
4098     }
4099
4100   /* If we increased the packet size, make sure to increase the global
4101      buffer size also.  We delay this until after parsing the entire
4102      qSupported packet, because this is the same buffer we were
4103      parsing.  */
4104   if (rs->buf_size < rs->explicit_packet_size)
4105     {
4106       rs->buf_size = rs->explicit_packet_size;
4107       rs->buf = xrealloc (rs->buf, rs->buf_size);
4108     }
4109
4110   /* Handle the defaults for unmentioned features.  */
4111   for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4112     if (!seen[i])
4113       {
4114         const struct protocol_feature *feature;
4115
4116         feature = &remote_protocol_features[i];
4117         feature->func (feature, feature->default_support, NULL);
4118       }
4119 }
4120
4121 /* Remove any of the remote.c targets from target stack.  Upper targets depend
4122    on it so remove them first.  */
4123
4124 static void
4125 remote_unpush_target (void)
4126 {
4127   pop_all_targets_above (process_stratum - 1);
4128 }
4129
4130 static void
4131 remote_open_1 (char *name, int from_tty,
4132                struct target_ops *target, int extended_p)
4133 {
4134   struct remote_state *rs = get_remote_state ();
4135
4136   if (name == 0)
4137     error (_("To open a remote debug connection, you need to specify what\n"
4138            "serial device is attached to the remote system\n"
4139            "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
4140
4141   /* See FIXME above.  */
4142   if (!target_async_permitted)
4143     wait_forever_enabled_p = 1;
4144
4145   /* If we're connected to a running target, target_preopen will kill it.
4146      Ask this question first, before target_preopen has a chance to kill
4147      anything.  */
4148   if (rs->remote_desc != NULL && !have_inferiors ())
4149     {
4150       if (from_tty
4151           && !query (_("Already connected to a remote target.  Disconnect? ")))
4152         error (_("Still connected."));
4153     }
4154
4155   /* Here the possibly existing remote target gets unpushed.  */
4156   target_preopen (from_tty);
4157
4158   /* Make sure we send the passed signals list the next time we resume.  */
4159   xfree (rs->last_pass_packet);
4160   rs->last_pass_packet = NULL;
4161
4162   /* Make sure we send the program signals list the next time we
4163      resume.  */
4164   xfree (rs->last_program_signals_packet);
4165   rs->last_program_signals_packet = NULL;
4166
4167   remote_fileio_reset ();
4168   reopen_exec_file ();
4169   reread_symbols ();
4170
4171   rs->remote_desc = remote_serial_open (name);
4172   if (!rs->remote_desc)
4173     perror_with_name (name);
4174
4175   if (baud_rate != -1)
4176     {
4177       if (serial_setbaudrate (rs->remote_desc, baud_rate))
4178         {
4179           /* The requested speed could not be set.  Error out to
4180              top level after closing remote_desc.  Take care to
4181              set remote_desc to NULL to avoid closing remote_desc
4182              more than once.  */
4183           serial_close (rs->remote_desc);
4184           rs->remote_desc = NULL;
4185           perror_with_name (name);
4186         }
4187     }
4188
4189   serial_raw (rs->remote_desc);
4190
4191   /* If there is something sitting in the buffer we might take it as a
4192      response to a command, which would be bad.  */
4193   serial_flush_input (rs->remote_desc);
4194
4195   if (from_tty)
4196     {
4197       puts_filtered ("Remote debugging using ");
4198       puts_filtered (name);
4199       puts_filtered ("\n");
4200     }
4201   push_target (target);         /* Switch to using remote target now.  */
4202
4203   /* Register extra event sources in the event loop.  */
4204   remote_async_inferior_event_token
4205     = create_async_event_handler (remote_async_inferior_event_handler,
4206                                   NULL);
4207   rs->notif_state = remote_notif_state_allocate ();
4208
4209   /* Reset the target state; these things will be queried either by
4210      remote_query_supported or as they are needed.  */
4211   reset_all_packet_configs_support ();
4212   rs->cached_wait_status = 0;
4213   rs->explicit_packet_size = 0;
4214   rs->noack_mode = 0;
4215   rs->extended = extended_p;
4216   rs->waiting_for_stop_reply = 0;
4217   rs->ctrlc_pending_p = 0;
4218
4219   rs->general_thread = not_sent_ptid;
4220   rs->continue_thread = not_sent_ptid;
4221   rs->remote_traceframe_number = -1;
4222
4223   /* Probe for ability to use "ThreadInfo" query, as required.  */
4224   rs->use_threadinfo_query = 1;
4225   rs->use_threadextra_query = 1;
4226
4227   if (target_async_permitted)
4228     {
4229       /* With this target we start out by owning the terminal.  */
4230       remote_async_terminal_ours_p = 1;
4231
4232       /* FIXME: cagney/1999-09-23: During the initial connection it is
4233          assumed that the target is already ready and able to respond to
4234          requests.  Unfortunately remote_start_remote() eventually calls
4235          wait_for_inferior() with no timeout.  wait_forever_enabled_p gets
4236          around this.  Eventually a mechanism that allows
4237          wait_for_inferior() to expect/get timeouts will be
4238          implemented.  */
4239       wait_forever_enabled_p = 0;
4240     }
4241
4242   /* First delete any symbols previously loaded from shared libraries.  */
4243   no_shared_libraries (NULL, 0);
4244
4245   /* Start afresh.  */
4246   init_thread_list ();
4247
4248   /* Start the remote connection.  If error() or QUIT, discard this
4249      target (we'd otherwise be in an inconsistent state) and then
4250      propogate the error on up the exception chain.  This ensures that
4251      the caller doesn't stumble along blindly assuming that the
4252      function succeeded.  The CLI doesn't have this problem but other
4253      UI's, such as MI do.
4254
4255      FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
4256      this function should return an error indication letting the
4257      caller restore the previous state.  Unfortunately the command
4258      ``target remote'' is directly wired to this function making that
4259      impossible.  On a positive note, the CLI side of this problem has
4260      been fixed - the function set_cmd_context() makes it possible for
4261      all the ``target ....'' commands to share a common callback
4262      function.  See cli-dump.c.  */
4263   {
4264     volatile struct gdb_exception ex;
4265
4266     TRY_CATCH (ex, RETURN_MASK_ALL)
4267       {
4268         remote_start_remote (from_tty, target, extended_p);
4269       }
4270     if (ex.reason < 0)
4271       {
4272         /* Pop the partially set up target - unless something else did
4273            already before throwing the exception.  */
4274         if (rs->remote_desc != NULL)
4275           remote_unpush_target ();
4276         if (target_async_permitted)
4277           wait_forever_enabled_p = 1;
4278         throw_exception (ex);
4279       }
4280   }
4281
4282   if (target_async_permitted)
4283     wait_forever_enabled_p = 1;
4284 }
4285
4286 /* This takes a program previously attached to and detaches it.  After
4287    this is done, GDB can be used to debug some other program.  We
4288    better not have left any breakpoints in the target program or it'll
4289    die when it hits one.  */
4290
4291 static void
4292 remote_detach_1 (const char *args, int from_tty, int extended)
4293 {
4294   int pid = ptid_get_pid (inferior_ptid);
4295   struct remote_state *rs = get_remote_state ();
4296
4297   if (args)
4298     error (_("Argument given to \"detach\" when remotely debugging."));
4299
4300   if (!target_has_execution)
4301     error (_("No process to detach from."));
4302
4303   if (from_tty)
4304     {
4305       char *exec_file = get_exec_file (0);
4306       if (exec_file == NULL)
4307         exec_file = "";
4308       printf_unfiltered (_("Detaching from program: %s, %s\n"), exec_file,
4309                          target_pid_to_str (pid_to_ptid (pid)));
4310       gdb_flush (gdb_stdout);
4311     }
4312
4313   /* Tell the remote target to detach.  */
4314   if (remote_multi_process_p (rs))
4315     xsnprintf (rs->buf, get_remote_packet_size (), "D;%x", pid);
4316   else
4317     strcpy (rs->buf, "D");
4318
4319   putpkt (rs->buf);
4320   getpkt (&rs->buf, &rs->buf_size, 0);
4321
4322   if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
4323     ;
4324   else if (rs->buf[0] == '\0')
4325     error (_("Remote doesn't know how to detach"));
4326   else
4327     error (_("Can't detach process."));
4328
4329   if (from_tty && !extended)
4330     puts_filtered (_("Ending remote debugging.\n"));
4331
4332   target_mourn_inferior ();
4333 }
4334
4335 static void
4336 remote_detach (struct target_ops *ops, const char *args, int from_tty)
4337 {
4338   remote_detach_1 (args, from_tty, 0);
4339 }
4340
4341 static void
4342 extended_remote_detach (struct target_ops *ops, const char *args, int from_tty)
4343 {
4344   remote_detach_1 (args, from_tty, 1);
4345 }
4346
4347 /* Same as remote_detach, but don't send the "D" packet; just disconnect.  */
4348
4349 static void
4350 remote_disconnect (struct target_ops *target, char *args, int from_tty)
4351 {
4352   if (args)
4353     error (_("Argument given to \"disconnect\" when remotely debugging."));
4354
4355   /* Make sure we unpush even the extended remote targets; mourn
4356      won't do it.  So call remote_mourn_1 directly instead of
4357      target_mourn_inferior.  */
4358   remote_mourn_1 (target);
4359
4360   if (from_tty)
4361     puts_filtered ("Ending remote debugging.\n");
4362 }
4363
4364 /* Attach to the process specified by ARGS.  If FROM_TTY is non-zero,
4365    be chatty about it.  */
4366
4367 static void
4368 extended_remote_attach_1 (struct target_ops *target, const char *args,
4369                           int from_tty)
4370 {
4371   struct remote_state *rs = get_remote_state ();
4372   int pid;
4373   char *wait_status = NULL;
4374
4375   pid = parse_pid_to_attach (args);
4376
4377   /* Remote PID can be freely equal to getpid, do not check it here the same
4378      way as in other targets.  */
4379
4380   if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
4381     error (_("This target does not support attaching to a process"));
4382
4383   if (from_tty)
4384     {
4385       char *exec_file = get_exec_file (0);
4386
4387       if (exec_file)
4388         printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
4389                            target_pid_to_str (pid_to_ptid (pid)));
4390       else
4391         printf_unfiltered (_("Attaching to %s\n"),
4392                            target_pid_to_str (pid_to_ptid (pid)));
4393
4394       gdb_flush (gdb_stdout);
4395     }
4396
4397   xsnprintf (rs->buf, get_remote_packet_size (), "vAttach;%x", pid);
4398   putpkt (rs->buf);
4399   getpkt (&rs->buf, &rs->buf_size, 0);
4400
4401   switch (packet_ok (rs->buf,
4402                      &remote_protocol_packets[PACKET_vAttach]))
4403     {
4404     case PACKET_OK:
4405       if (!non_stop)
4406         {
4407           /* Save the reply for later.  */
4408           wait_status = alloca (strlen (rs->buf) + 1);
4409           strcpy (wait_status, rs->buf);
4410         }
4411       else if (strcmp (rs->buf, "OK") != 0)
4412         error (_("Attaching to %s failed with: %s"),
4413                target_pid_to_str (pid_to_ptid (pid)),
4414                rs->buf);
4415       break;
4416     case PACKET_UNKNOWN:
4417       error (_("This target does not support attaching to a process"));
4418     default:
4419       error (_("Attaching to %s failed"),
4420              target_pid_to_str (pid_to_ptid (pid)));
4421     }
4422
4423   set_current_inferior (remote_add_inferior (0, pid, 1));
4424
4425   inferior_ptid = pid_to_ptid (pid);
4426
4427   if (non_stop)
4428     {
4429       struct thread_info *thread;
4430
4431       /* Get list of threads.  */
4432       remote_threads_info (target);
4433
4434       thread = first_thread_of_process (pid);
4435       if (thread)
4436         inferior_ptid = thread->ptid;
4437       else
4438         inferior_ptid = pid_to_ptid (pid);
4439
4440       /* Invalidate our notion of the remote current thread.  */
4441       record_currthread (rs, minus_one_ptid);
4442     }
4443   else
4444     {
4445       /* Now, if we have thread information, update inferior_ptid.  */
4446       inferior_ptid = remote_current_thread (inferior_ptid);
4447
4448       /* Add the main thread to the thread list.  */
4449       add_thread_silent (inferior_ptid);
4450     }
4451
4452   /* Next, if the target can specify a description, read it.  We do
4453      this before anything involving memory or registers.  */
4454   target_find_description ();
4455
4456   if (!non_stop)
4457     {
4458       /* Use the previously fetched status.  */
4459       gdb_assert (wait_status != NULL);
4460
4461       if (target_can_async_p ())
4462         {
4463           struct notif_event *reply
4464             =  remote_notif_parse (&notif_client_stop, wait_status);
4465
4466           push_stop_reply ((struct stop_reply *) reply);
4467
4468           target_async (inferior_event_handler, 0);
4469         }
4470       else
4471         {
4472           gdb_assert (wait_status != NULL);
4473           strcpy (rs->buf, wait_status);
4474           rs->cached_wait_status = 1;
4475         }
4476     }
4477   else
4478     gdb_assert (wait_status == NULL);
4479 }
4480
4481 static void
4482 extended_remote_attach (struct target_ops *ops, const char *args, int from_tty)
4483 {
4484   extended_remote_attach_1 (ops, args, from_tty);
4485 }
4486
4487 \f
4488 /* Check for the availability of vCont.  This function should also check
4489    the response.  */
4490
4491 static void
4492 remote_vcont_probe (struct remote_state *rs)
4493 {
4494   char *buf;
4495
4496   strcpy (rs->buf, "vCont?");
4497   putpkt (rs->buf);
4498   getpkt (&rs->buf, &rs->buf_size, 0);
4499   buf = rs->buf;
4500
4501   /* Make sure that the features we assume are supported.  */
4502   if (strncmp (buf, "vCont", 5) == 0)
4503     {
4504       char *p = &buf[5];
4505       int support_s, support_S, support_c, support_C;
4506
4507       support_s = 0;
4508       support_S = 0;
4509       support_c = 0;
4510       support_C = 0;
4511       rs->supports_vCont.t = 0;
4512       rs->supports_vCont.r = 0;
4513       while (p && *p == ';')
4514         {
4515           p++;
4516           if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
4517             support_s = 1;
4518           else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
4519             support_S = 1;
4520           else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
4521             support_c = 1;
4522           else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
4523             support_C = 1;
4524           else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
4525             rs->supports_vCont.t = 1;
4526           else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
4527             rs->supports_vCont.r = 1;
4528
4529           p = strchr (p, ';');
4530         }
4531
4532       /* If s, S, c, and C are not all supported, we can't use vCont.  Clearing
4533          BUF will make packet_ok disable the packet.  */
4534       if (!support_s || !support_S || !support_c || !support_C)
4535         buf[0] = 0;
4536     }
4537
4538   packet_ok (buf, &remote_protocol_packets[PACKET_vCont]);
4539 }
4540
4541 /* Helper function for building "vCont" resumptions.  Write a
4542    resumption to P.  ENDP points to one-passed-the-end of the buffer
4543    we're allowed to write to.  Returns BUF+CHARACTERS_WRITTEN.  The
4544    thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
4545    resumed thread should be single-stepped and/or signalled.  If PTID
4546    equals minus_one_ptid, then all threads are resumed; if PTID
4547    represents a process, then all threads of the process are resumed;
4548    the thread to be stepped and/or signalled is given in the global
4549    INFERIOR_PTID.  */
4550
4551 static char *
4552 append_resumption (char *p, char *endp,
4553                    ptid_t ptid, int step, enum gdb_signal siggnal)
4554 {
4555   struct remote_state *rs = get_remote_state ();
4556
4557   if (step && siggnal != GDB_SIGNAL_0)
4558     p += xsnprintf (p, endp - p, ";S%02x", siggnal);
4559   else if (step
4560            /* GDB is willing to range step.  */
4561            && use_range_stepping
4562            /* Target supports range stepping.  */
4563            && rs->supports_vCont.r
4564            /* We don't currently support range stepping multiple
4565               threads with a wildcard (though the protocol allows it,
4566               so stubs shouldn't make an active effort to forbid
4567               it).  */
4568            && !(remote_multi_process_p (rs) && ptid_is_pid (ptid)))
4569     {
4570       struct thread_info *tp;
4571
4572       if (ptid_equal (ptid, minus_one_ptid))
4573         {
4574           /* If we don't know about the target thread's tid, then
4575              we're resuming magic_null_ptid (see caller).  */
4576           tp = find_thread_ptid (magic_null_ptid);
4577         }
4578       else
4579         tp = find_thread_ptid (ptid);
4580       gdb_assert (tp != NULL);
4581
4582       if (tp->control.may_range_step)
4583         {
4584           int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
4585
4586           p += xsnprintf (p, endp - p, ";r%s,%s",
4587                           phex_nz (tp->control.step_range_start,
4588                                    addr_size),
4589                           phex_nz (tp->control.step_range_end,
4590                                    addr_size));
4591         }
4592       else
4593         p += xsnprintf (p, endp - p, ";s");
4594     }
4595   else if (step)
4596     p += xsnprintf (p, endp - p, ";s");
4597   else if (siggnal != GDB_SIGNAL_0)
4598     p += xsnprintf (p, endp - p, ";C%02x", siggnal);
4599   else
4600     p += xsnprintf (p, endp - p, ";c");
4601
4602   if (remote_multi_process_p (rs) && ptid_is_pid (ptid))
4603     {
4604       ptid_t nptid;
4605
4606       /* All (-1) threads of process.  */
4607       nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
4608
4609       p += xsnprintf (p, endp - p, ":");
4610       p = write_ptid (p, endp, nptid);
4611     }
4612   else if (!ptid_equal (ptid, minus_one_ptid))
4613     {
4614       p += xsnprintf (p, endp - p, ":");
4615       p = write_ptid (p, endp, ptid);
4616     }
4617
4618   return p;
4619 }
4620
4621 /* Append a vCont continue-with-signal action for threads that have a
4622    non-zero stop signal.  */
4623
4624 static char *
4625 append_pending_thread_resumptions (char *p, char *endp, ptid_t ptid)
4626 {
4627   struct thread_info *thread;
4628
4629   ALL_THREADS (thread)
4630     if (ptid_match (thread->ptid, ptid)
4631         && !ptid_equal (inferior_ptid, thread->ptid)
4632         && thread->suspend.stop_signal != GDB_SIGNAL_0
4633         && signal_pass_state (thread->suspend.stop_signal))
4634       {
4635         p = append_resumption (p, endp, thread->ptid,
4636                                0, thread->suspend.stop_signal);
4637         thread->suspend.stop_signal = GDB_SIGNAL_0;
4638       }
4639
4640   return p;
4641 }
4642
4643 /* Resume the remote inferior by using a "vCont" packet.  The thread
4644    to be resumed is PTID; STEP and SIGGNAL indicate whether the
4645    resumed thread should be single-stepped and/or signalled.  If PTID
4646    equals minus_one_ptid, then all threads are resumed; the thread to
4647    be stepped and/or signalled is given in the global INFERIOR_PTID.
4648    This function returns non-zero iff it resumes the inferior.
4649
4650    This function issues a strict subset of all possible vCont commands at the
4651    moment.  */
4652
4653 static int
4654 remote_vcont_resume (ptid_t ptid, int step, enum gdb_signal siggnal)
4655 {
4656   struct remote_state *rs = get_remote_state ();
4657   char *p;
4658   char *endp;
4659
4660   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
4661     remote_vcont_probe (rs);
4662
4663   if (packet_support (PACKET_vCont) == PACKET_DISABLE)
4664     return 0;
4665
4666   p = rs->buf;
4667   endp = rs->buf + get_remote_packet_size ();
4668
4669   /* If we could generate a wider range of packets, we'd have to worry
4670      about overflowing BUF.  Should there be a generic
4671      "multi-part-packet" packet?  */
4672
4673   p += xsnprintf (p, endp - p, "vCont");
4674
4675   if (ptid_equal (ptid, magic_null_ptid))
4676     {
4677       /* MAGIC_NULL_PTID means that we don't have any active threads,
4678          so we don't have any TID numbers the inferior will
4679          understand.  Make sure to only send forms that do not specify
4680          a TID.  */
4681       append_resumption (p, endp, minus_one_ptid, step, siggnal);
4682     }
4683   else if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
4684     {
4685       /* Resume all threads (of all processes, or of a single
4686          process), with preference for INFERIOR_PTID.  This assumes
4687          inferior_ptid belongs to the set of all threads we are about
4688          to resume.  */
4689       if (step || siggnal != GDB_SIGNAL_0)
4690         {
4691           /* Step inferior_ptid, with or without signal.  */
4692           p = append_resumption (p, endp, inferior_ptid, step, siggnal);
4693         }
4694
4695       /* Also pass down any pending signaled resumption for other
4696          threads not the current.  */
4697       p = append_pending_thread_resumptions (p, endp, ptid);
4698
4699       /* And continue others without a signal.  */
4700       append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
4701     }
4702   else
4703     {
4704       /* Scheduler locking; resume only PTID.  */
4705       append_resumption (p, endp, ptid, step, siggnal);
4706     }
4707
4708   gdb_assert (strlen (rs->buf) < get_remote_packet_size ());
4709   putpkt (rs->buf);
4710
4711   if (non_stop)
4712     {
4713       /* In non-stop, the stub replies to vCont with "OK".  The stop
4714          reply will be reported asynchronously by means of a `%Stop'
4715          notification.  */
4716       getpkt (&rs->buf, &rs->buf_size, 0);
4717       if (strcmp (rs->buf, "OK") != 0)
4718         error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
4719     }
4720
4721   return 1;
4722 }
4723
4724 /* Tell the remote machine to resume.  */
4725
4726 static void
4727 remote_resume (struct target_ops *ops,
4728                ptid_t ptid, int step, enum gdb_signal siggnal)
4729 {
4730   struct remote_state *rs = get_remote_state ();
4731   char *buf;
4732
4733   /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
4734      (explained in remote-notif.c:handle_notification) so
4735      remote_notif_process is not called.  We need find a place where
4736      it is safe to start a 'vNotif' sequence.  It is good to do it
4737      before resuming inferior, because inferior was stopped and no RSP
4738      traffic at that moment.  */
4739   if (!non_stop)
4740     remote_notif_process (rs->notif_state, &notif_client_stop);
4741
4742   rs->last_sent_signal = siggnal;
4743   rs->last_sent_step = step;
4744
4745   /* The vCont packet doesn't need to specify threads via Hc.  */
4746   /* No reverse support (yet) for vCont.  */
4747   if (execution_direction != EXEC_REVERSE)
4748     if (remote_vcont_resume (ptid, step, siggnal))
4749       goto done;
4750
4751   /* All other supported resume packets do use Hc, so set the continue
4752      thread.  */
4753   if (ptid_equal (ptid, minus_one_ptid))
4754     set_continue_thread (any_thread_ptid);
4755   else
4756     set_continue_thread (ptid);
4757
4758   buf = rs->buf;
4759   if (execution_direction == EXEC_REVERSE)
4760     {
4761       /* We don't pass signals to the target in reverse exec mode.  */
4762       if (info_verbose && siggnal != GDB_SIGNAL_0)
4763         warning (_(" - Can't pass signal %d to target in reverse: ignored."),
4764                  siggnal);
4765
4766       if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
4767         error (_("Remote reverse-step not supported."));
4768       if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
4769         error (_("Remote reverse-continue not supported."));
4770
4771       strcpy (buf, step ? "bs" : "bc");
4772     }
4773   else if (siggnal != GDB_SIGNAL_0)
4774     {
4775       buf[0] = step ? 'S' : 'C';
4776       buf[1] = tohex (((int) siggnal >> 4) & 0xf);
4777       buf[2] = tohex (((int) siggnal) & 0xf);
4778       buf[3] = '\0';
4779     }
4780   else
4781     strcpy (buf, step ? "s" : "c");
4782
4783   putpkt (buf);
4784
4785  done:
4786   /* We are about to start executing the inferior, let's register it
4787      with the event loop.  NOTE: this is the one place where all the
4788      execution commands end up.  We could alternatively do this in each
4789      of the execution commands in infcmd.c.  */
4790   /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
4791      into infcmd.c in order to allow inferior function calls to work
4792      NOT asynchronously.  */
4793   if (target_can_async_p ())
4794     target_async (inferior_event_handler, 0);
4795
4796   /* We've just told the target to resume.  The remote server will
4797      wait for the inferior to stop, and then send a stop reply.  In
4798      the mean time, we can't start another command/query ourselves
4799      because the stub wouldn't be ready to process it.  This applies
4800      only to the base all-stop protocol, however.  In non-stop (which
4801      only supports vCont), the stub replies with an "OK", and is
4802      immediate able to process further serial input.  */
4803   if (!non_stop)
4804     rs->waiting_for_stop_reply = 1;
4805 }
4806 \f
4807
4808 /* Set up the signal handler for SIGINT, while the target is
4809    executing, ovewriting the 'regular' SIGINT signal handler.  */
4810 static void
4811 async_initialize_sigint_signal_handler (void)
4812 {
4813   signal (SIGINT, async_handle_remote_sigint);
4814 }
4815
4816 /* Signal handler for SIGINT, while the target is executing.  */
4817 static void
4818 async_handle_remote_sigint (int sig)
4819 {
4820   signal (sig, async_handle_remote_sigint_twice);
4821   mark_async_signal_handler (async_sigint_remote_token);
4822 }
4823
4824 /* Signal handler for SIGINT, installed after SIGINT has already been
4825    sent once.  It will take effect the second time that the user sends
4826    a ^C.  */
4827 static void
4828 async_handle_remote_sigint_twice (int sig)
4829 {
4830   signal (sig, async_handle_remote_sigint);
4831   mark_async_signal_handler (async_sigint_remote_twice_token);
4832 }
4833
4834 /* Perform the real interruption of the target execution, in response
4835    to a ^C.  */
4836 static void
4837 async_remote_interrupt (gdb_client_data arg)
4838 {
4839   if (remote_debug)
4840     fprintf_unfiltered (gdb_stdlog, "async_remote_interrupt called\n");
4841
4842   target_stop (inferior_ptid);
4843 }
4844
4845 /* Perform interrupt, if the first attempt did not succeed.  Just give
4846    up on the target alltogether.  */
4847 static void
4848 async_remote_interrupt_twice (gdb_client_data arg)
4849 {
4850   if (remote_debug)
4851     fprintf_unfiltered (gdb_stdlog, "async_remote_interrupt_twice called\n");
4852
4853   interrupt_query ();
4854 }
4855
4856 /* Reinstall the usual SIGINT handlers, after the target has
4857    stopped.  */
4858 static void
4859 async_cleanup_sigint_signal_handler (void *dummy)
4860 {
4861   signal (SIGINT, handle_sigint);
4862 }
4863
4864 /* Send ^C to target to halt it.  Target will respond, and send us a
4865    packet.  */
4866 static void (*ofunc) (int);
4867
4868 /* The command line interface's stop routine.  This function is installed
4869    as a signal handler for SIGINT.  The first time a user requests a
4870    stop, we call remote_stop to send a break or ^C.  If there is no
4871    response from the target (it didn't stop when the user requested it),
4872    we ask the user if he'd like to detach from the target.  */
4873 static void
4874 sync_remote_interrupt (int signo)
4875 {
4876   /* If this doesn't work, try more severe steps.  */
4877   signal (signo, sync_remote_interrupt_twice);
4878
4879   gdb_call_async_signal_handler (async_sigint_remote_token, 1);
4880 }
4881
4882 /* The user typed ^C twice.  */
4883
4884 static void
4885 sync_remote_interrupt_twice (int signo)
4886 {
4887   signal (signo, ofunc);
4888   gdb_call_async_signal_handler (async_sigint_remote_twice_token, 1);
4889   signal (signo, sync_remote_interrupt);
4890 }
4891
4892 /* Non-stop version of target_stop.  Uses `vCont;t' to stop a remote
4893    thread, all threads of a remote process, or all threads of all
4894    processes.  */
4895
4896 static void
4897 remote_stop_ns (ptid_t ptid)
4898 {
4899   struct remote_state *rs = get_remote_state ();
4900   char *p = rs->buf;
4901   char *endp = rs->buf + get_remote_packet_size ();
4902
4903   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
4904     remote_vcont_probe (rs);
4905
4906   if (!rs->supports_vCont.t)
4907     error (_("Remote server does not support stopping threads"));
4908
4909   if (ptid_equal (ptid, minus_one_ptid)
4910       || (!remote_multi_process_p (rs) && ptid_is_pid (ptid)))
4911     p += xsnprintf (p, endp - p, "vCont;t");
4912   else
4913     {
4914       ptid_t nptid;
4915
4916       p += xsnprintf (p, endp - p, "vCont;t:");
4917
4918       if (ptid_is_pid (ptid))
4919           /* All (-1) threads of process.  */
4920         nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
4921       else
4922         {
4923           /* Small optimization: if we already have a stop reply for
4924              this thread, no use in telling the stub we want this
4925              stopped.  */
4926           if (peek_stop_reply (ptid))
4927             return;
4928
4929           nptid = ptid;
4930         }
4931
4932       write_ptid (p, endp, nptid);
4933     }
4934
4935   /* In non-stop, we get an immediate OK reply.  The stop reply will
4936      come in asynchronously by notification.  */
4937   putpkt (rs->buf);
4938   getpkt (&rs->buf, &rs->buf_size, 0);
4939   if (strcmp (rs->buf, "OK") != 0)
4940     error (_("Stopping %s failed: %s"), target_pid_to_str (ptid), rs->buf);
4941 }
4942
4943 /* All-stop version of target_stop.  Sends a break or a ^C to stop the
4944    remote target.  It is undefined which thread of which process
4945    reports the stop.  */
4946
4947 static void
4948 remote_stop_as (ptid_t ptid)
4949 {
4950   struct remote_state *rs = get_remote_state ();
4951
4952   rs->ctrlc_pending_p = 1;
4953
4954   /* If the inferior is stopped already, but the core didn't know
4955      about it yet, just ignore the request.  The cached wait status
4956      will be collected in remote_wait.  */
4957   if (rs->cached_wait_status)
4958     return;
4959
4960   /* Send interrupt_sequence to remote target.  */
4961   send_interrupt_sequence ();
4962 }
4963
4964 /* This is the generic stop called via the target vector.  When a target
4965    interrupt is requested, either by the command line or the GUI, we
4966    will eventually end up here.  */
4967
4968 static void
4969 remote_stop (struct target_ops *self, ptid_t ptid)
4970 {
4971   if (remote_debug)
4972     fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
4973
4974   if (non_stop)
4975     remote_stop_ns (ptid);
4976   else
4977     remote_stop_as (ptid);
4978 }
4979
4980 /* Ask the user what to do when an interrupt is received.  */
4981
4982 static void
4983 interrupt_query (void)
4984 {
4985   target_terminal_ours ();
4986
4987   if (target_can_async_p ())
4988     {
4989       signal (SIGINT, handle_sigint);
4990       quit ();
4991     }
4992   else
4993     {
4994       if (query (_("Interrupted while waiting for the program.\n\
4995 Give up (and stop debugging it)? ")))
4996         {
4997           remote_unpush_target ();
4998           quit ();
4999         }
5000     }
5001
5002   target_terminal_inferior ();
5003 }
5004
5005 /* Enable/disable target terminal ownership.  Most targets can use
5006    terminal groups to control terminal ownership.  Remote targets are
5007    different in that explicit transfer of ownership to/from GDB/target
5008    is required.  */
5009
5010 static void
5011 remote_terminal_inferior (struct target_ops *self)
5012 {
5013   if (!target_async_permitted)
5014     /* Nothing to do.  */
5015     return;
5016
5017   /* FIXME: cagney/1999-09-27: Make calls to target_terminal_*()
5018      idempotent.  The event-loop GDB talking to an asynchronous target
5019      with a synchronous command calls this function from both
5020      event-top.c and infrun.c/infcmd.c.  Once GDB stops trying to
5021      transfer the terminal to the target when it shouldn't this guard
5022      can go away.  */
5023   if (!remote_async_terminal_ours_p)
5024     return;
5025   delete_file_handler (input_fd);
5026   remote_async_terminal_ours_p = 0;
5027   async_initialize_sigint_signal_handler ();
5028   /* NOTE: At this point we could also register our selves as the
5029      recipient of all input.  Any characters typed could then be
5030      passed on down to the target.  */
5031 }
5032
5033 static void
5034 remote_terminal_ours (struct target_ops *self)
5035 {
5036   if (!target_async_permitted)
5037     /* Nothing to do.  */
5038     return;
5039
5040   /* See FIXME in remote_terminal_inferior.  */
5041   if (remote_async_terminal_ours_p)
5042     return;
5043   async_cleanup_sigint_signal_handler (NULL);
5044   add_file_handler (input_fd, stdin_event_handler, 0);
5045   remote_async_terminal_ours_p = 1;
5046 }
5047
5048 static void
5049 remote_console_output (char *msg)
5050 {
5051   char *p;
5052
5053   for (p = msg; p[0] && p[1]; p += 2)
5054     {
5055       char tb[2];
5056       char c = fromhex (p[0]) * 16 + fromhex (p[1]);
5057
5058       tb[0] = c;
5059       tb[1] = 0;
5060       fputs_unfiltered (tb, gdb_stdtarg);
5061     }
5062   gdb_flush (gdb_stdtarg);
5063 }
5064
5065 typedef struct cached_reg
5066 {
5067   int num;
5068   gdb_byte data[MAX_REGISTER_SIZE];
5069 } cached_reg_t;
5070
5071 DEF_VEC_O(cached_reg_t);
5072
5073 typedef struct stop_reply
5074 {
5075   struct notif_event base;
5076
5077   /* The identifier of the thread about this event  */
5078   ptid_t ptid;
5079
5080   /* The remote state this event is associated with.  When the remote
5081      connection, represented by a remote_state object, is closed,
5082      all the associated stop_reply events should be released.  */
5083   struct remote_state *rs;
5084
5085   struct target_waitstatus ws;
5086
5087   /* Expedited registers.  This makes remote debugging a bit more
5088      efficient for those targets that provide critical registers as
5089      part of their normal status mechanism (as another roundtrip to
5090      fetch them is avoided).  */
5091   VEC(cached_reg_t) *regcache;
5092
5093   int stopped_by_watchpoint_p;
5094   CORE_ADDR watch_data_address;
5095
5096   int core;
5097 } *stop_reply_p;
5098
5099 DECLARE_QUEUE_P (stop_reply_p);
5100 DEFINE_QUEUE_P (stop_reply_p);
5101 /* The list of already fetched and acknowledged stop events.  This
5102    queue is used for notification Stop, and other notifications
5103    don't need queue for their events, because the notification events
5104    of Stop can't be consumed immediately, so that events should be
5105    queued first, and be consumed by remote_wait_{ns,as} one per
5106    time.  Other notifications can consume their events immediately,
5107    so queue is not needed for them.  */
5108 static QUEUE (stop_reply_p) *stop_reply_queue;
5109
5110 static void
5111 stop_reply_xfree (struct stop_reply *r)
5112 {
5113   notif_event_xfree ((struct notif_event *) r);
5114 }
5115
5116 static void
5117 remote_notif_stop_parse (struct notif_client *self, char *buf,
5118                          struct notif_event *event)
5119 {
5120   remote_parse_stop_reply (buf, (struct stop_reply *) event);
5121 }
5122
5123 static void
5124 remote_notif_stop_ack (struct notif_client *self, char *buf,
5125                        struct notif_event *event)
5126 {
5127   struct stop_reply *stop_reply = (struct stop_reply *) event;
5128
5129   /* acknowledge */
5130   putpkt ((char *) self->ack_command);
5131
5132   if (stop_reply->ws.kind == TARGET_WAITKIND_IGNORE)
5133       /* We got an unknown stop reply.  */
5134       error (_("Unknown stop reply"));
5135
5136   push_stop_reply (stop_reply);
5137 }
5138
5139 static int
5140 remote_notif_stop_can_get_pending_events (struct notif_client *self)
5141 {
5142   /* We can't get pending events in remote_notif_process for
5143      notification stop, and we have to do this in remote_wait_ns
5144      instead.  If we fetch all queued events from stub, remote stub
5145      may exit and we have no chance to process them back in
5146      remote_wait_ns.  */
5147   mark_async_event_handler (remote_async_inferior_event_token);
5148   return 0;
5149 }
5150
5151 static void
5152 stop_reply_dtr (struct notif_event *event)
5153 {
5154   struct stop_reply *r = (struct stop_reply *) event;
5155
5156   VEC_free (cached_reg_t, r->regcache);
5157 }
5158
5159 static struct notif_event *
5160 remote_notif_stop_alloc_reply (void)
5161 {
5162   struct notif_event *r
5163     = (struct notif_event *) XNEW (struct stop_reply);
5164
5165   r->dtr = stop_reply_dtr;
5166
5167   return r;
5168 }
5169
5170 /* A client of notification Stop.  */
5171
5172 struct notif_client notif_client_stop =
5173 {
5174   "Stop",
5175   "vStopped",
5176   remote_notif_stop_parse,
5177   remote_notif_stop_ack,
5178   remote_notif_stop_can_get_pending_events,
5179   remote_notif_stop_alloc_reply,
5180   REMOTE_NOTIF_STOP,
5181 };
5182
5183 /* A parameter to pass data in and out.  */
5184
5185 struct queue_iter_param
5186 {
5187   void *input;
5188   struct stop_reply *output;
5189 };
5190
5191 /* Remove stop replies in the queue if its pid is equal to the given
5192    inferior's pid.  */
5193
5194 static int
5195 remove_stop_reply_for_inferior (QUEUE (stop_reply_p) *q,
5196                                 QUEUE_ITER (stop_reply_p) *iter,
5197                                 stop_reply_p event,
5198                                 void *data)
5199 {
5200   struct queue_iter_param *param = data;
5201   struct inferior *inf = param->input;
5202
5203   if (ptid_get_pid (event->ptid) == inf->pid)
5204     {
5205       stop_reply_xfree (event);
5206       QUEUE_remove_elem (stop_reply_p, q, iter);
5207     }
5208
5209   return 1;
5210 }
5211
5212 /* Discard all pending stop replies of inferior INF.  */
5213
5214 static void
5215 discard_pending_stop_replies (struct inferior *inf)
5216 {
5217   int i;
5218   struct queue_iter_param param;
5219   struct stop_reply *reply;
5220   struct remote_state *rs = get_remote_state ();
5221   struct remote_notif_state *rns = rs->notif_state;
5222
5223   /* This function can be notified when an inferior exists.  When the
5224      target is not remote, the notification state is NULL.  */
5225   if (rs->remote_desc == NULL)
5226     return;
5227
5228   reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
5229
5230   /* Discard the in-flight notification.  */
5231   if (reply != NULL && ptid_get_pid (reply->ptid) == inf->pid)
5232     {
5233       stop_reply_xfree (reply);
5234       rns->pending_event[notif_client_stop.id] = NULL;
5235     }
5236
5237   param.input = inf;
5238   param.output = NULL;
5239   /* Discard the stop replies we have already pulled with
5240      vStopped.  */
5241   QUEUE_iterate (stop_reply_p, stop_reply_queue,
5242                  remove_stop_reply_for_inferior, &param);
5243 }
5244
5245 /* If its remote state is equal to the given remote state,
5246    remove EVENT from the stop reply queue.  */
5247
5248 static int
5249 remove_stop_reply_of_remote_state (QUEUE (stop_reply_p) *q,
5250                                    QUEUE_ITER (stop_reply_p) *iter,
5251                                    stop_reply_p event,
5252                                    void *data)
5253 {
5254   struct queue_iter_param *param = data;
5255   struct remote_state *rs = param->input;
5256
5257   if (event->rs == rs)
5258     {
5259       stop_reply_xfree (event);
5260       QUEUE_remove_elem (stop_reply_p, q, iter);
5261     }
5262
5263   return 1;
5264 }
5265
5266 /* Discard the stop replies for RS in stop_reply_queue.  */
5267
5268 static void
5269 discard_pending_stop_replies_in_queue (struct remote_state *rs)
5270 {
5271   struct queue_iter_param param;
5272
5273   param.input = rs;
5274   param.output = NULL;
5275   /* Discard the stop replies we have already pulled with
5276      vStopped.  */
5277   QUEUE_iterate (stop_reply_p, stop_reply_queue,
5278                  remove_stop_reply_of_remote_state, &param);
5279 }
5280
5281 /* A parameter to pass data in and out.  */
5282
5283 static int
5284 remote_notif_remove_once_on_match (QUEUE (stop_reply_p) *q,
5285                                    QUEUE_ITER (stop_reply_p) *iter,
5286                                    stop_reply_p event,
5287                                    void *data)
5288 {
5289   struct queue_iter_param *param = data;
5290   ptid_t *ptid = param->input;
5291
5292   if (ptid_match (event->ptid, *ptid))
5293     {
5294       param->output = event;
5295       QUEUE_remove_elem (stop_reply_p, q, iter);
5296       return 0;
5297     }
5298
5299   return 1;
5300 }
5301
5302 /* Remove the first reply in 'stop_reply_queue' which matches
5303    PTID.  */
5304
5305 static struct stop_reply *
5306 remote_notif_remove_queued_reply (ptid_t ptid)
5307 {
5308   struct queue_iter_param param;
5309
5310   param.input = &ptid;
5311   param.output = NULL;
5312
5313   QUEUE_iterate (stop_reply_p, stop_reply_queue,
5314                  remote_notif_remove_once_on_match, &param);
5315   if (notif_debug)
5316     fprintf_unfiltered (gdb_stdlog,
5317                         "notif: discard queued event: 'Stop' in %s\n",
5318                         target_pid_to_str (ptid));
5319
5320   return param.output;
5321 }
5322
5323 /* Look for a queued stop reply belonging to PTID.  If one is found,
5324    remove it from the queue, and return it.  Returns NULL if none is
5325    found.  If there are still queued events left to process, tell the
5326    event loop to get back to target_wait soon.  */
5327
5328 static struct stop_reply *
5329 queued_stop_reply (ptid_t ptid)
5330 {
5331   struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
5332
5333   if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
5334     /* There's still at least an event left.  */
5335     mark_async_event_handler (remote_async_inferior_event_token);
5336
5337   return r;
5338 }
5339
5340 /* Push a fully parsed stop reply in the stop reply queue.  Since we
5341    know that we now have at least one queued event left to pass to the
5342    core side, tell the event loop to get back to target_wait soon.  */
5343
5344 static void
5345 push_stop_reply (struct stop_reply *new_event)
5346 {
5347   QUEUE_enque (stop_reply_p, stop_reply_queue, new_event);
5348
5349   if (notif_debug)
5350     fprintf_unfiltered (gdb_stdlog,
5351                         "notif: push 'Stop' %s to queue %d\n",
5352                         target_pid_to_str (new_event->ptid),
5353                         QUEUE_length (stop_reply_p,
5354                                       stop_reply_queue));
5355
5356   mark_async_event_handler (remote_async_inferior_event_token);
5357 }
5358
5359 static int
5360 stop_reply_match_ptid_and_ws (QUEUE (stop_reply_p) *q,
5361                               QUEUE_ITER (stop_reply_p) *iter,
5362                               struct stop_reply *event,
5363                               void *data)
5364 {
5365   ptid_t *ptid = data;
5366
5367   return !(ptid_equal (*ptid, event->ptid)
5368            && event->ws.kind == TARGET_WAITKIND_STOPPED);
5369 }
5370
5371 /* Returns true if we have a stop reply for PTID.  */
5372
5373 static int
5374 peek_stop_reply (ptid_t ptid)
5375 {
5376   return !QUEUE_iterate (stop_reply_p, stop_reply_queue,
5377                          stop_reply_match_ptid_and_ws, &ptid);
5378 }
5379
5380 /* Parse the stop reply in BUF.  Either the function succeeds, and the
5381    result is stored in EVENT, or throws an error.  */
5382
5383 static void
5384 remote_parse_stop_reply (char *buf, struct stop_reply *event)
5385 {
5386   struct remote_arch_state *rsa = get_remote_arch_state ();
5387   ULONGEST addr;
5388   char *p;
5389
5390   event->ptid = null_ptid;
5391   event->rs = get_remote_state ();
5392   event->ws.kind = TARGET_WAITKIND_IGNORE;
5393   event->ws.value.integer = 0;
5394   event->stopped_by_watchpoint_p = 0;
5395   event->regcache = NULL;
5396   event->core = -1;
5397
5398   switch (buf[0])
5399     {
5400     case 'T':           /* Status with PC, SP, FP, ...  */
5401       /* Expedited reply, containing Signal, {regno, reg} repeat.  */
5402       /*  format is:  'Tssn...:r...;n...:r...;n...:r...;#cc', where
5403             ss = signal number
5404             n... = register number
5405             r... = register contents
5406       */
5407
5408       p = &buf[3];      /* after Txx */
5409       while (*p)
5410         {
5411           char *p1;
5412           char *p_temp;
5413           int fieldsize;
5414           LONGEST pnum = 0;
5415
5416           /* If the packet contains a register number, save it in
5417              pnum and set p1 to point to the character following it.
5418              Otherwise p1 points to p.  */
5419
5420           /* If this packet is an awatch packet, don't parse the 'a'
5421              as a register number.  */
5422
5423           if (strncmp (p, "awatch", strlen("awatch")) != 0
5424               && strncmp (p, "core", strlen ("core") != 0))
5425             {
5426               /* Read the ``P'' register number.  */
5427               pnum = strtol (p, &p_temp, 16);
5428               p1 = p_temp;
5429             }
5430           else
5431             p1 = p;
5432
5433           if (p1 == p)  /* No register number present here.  */
5434             {
5435               p1 = strchr (p, ':');
5436               if (p1 == NULL)
5437                 error (_("Malformed packet(a) (missing colon): %s\n\
5438 Packet: '%s'\n"),
5439                        p, buf);
5440               if (strncmp (p, "thread", p1 - p) == 0)
5441                 event->ptid = read_ptid (++p1, &p);
5442               else if ((strncmp (p, "watch", p1 - p) == 0)
5443                        || (strncmp (p, "rwatch", p1 - p) == 0)
5444                        || (strncmp (p, "awatch", p1 - p) == 0))
5445                 {
5446                   event->stopped_by_watchpoint_p = 1;
5447                   p = unpack_varlen_hex (++p1, &addr);
5448                   event->watch_data_address = (CORE_ADDR) addr;
5449                 }
5450               else if (strncmp (p, "library", p1 - p) == 0)
5451                 {
5452                   p1++;
5453                   p_temp = p1;
5454                   while (*p_temp && *p_temp != ';')
5455                     p_temp++;
5456
5457                   event->ws.kind = TARGET_WAITKIND_LOADED;
5458                   p = p_temp;
5459                 }
5460               else if (strncmp (p, "replaylog", p1 - p) == 0)
5461                 {
5462                   event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
5463                   /* p1 will indicate "begin" or "end", but it makes
5464                      no difference for now, so ignore it.  */
5465                   p_temp = strchr (p1 + 1, ';');
5466                   if (p_temp)
5467                     p = p_temp;
5468                 }
5469               else if (strncmp (p, "core", p1 - p) == 0)
5470                 {
5471                   ULONGEST c;
5472
5473                   p = unpack_varlen_hex (++p1, &c);
5474                   event->core = c;
5475                 }
5476               else
5477                 {
5478                   /* Silently skip unknown optional info.  */
5479                   p_temp = strchr (p1 + 1, ';');
5480                   if (p_temp)
5481                     p = p_temp;
5482                 }
5483             }
5484           else
5485             {
5486               struct packet_reg *reg = packet_reg_from_pnum (rsa, pnum);
5487               cached_reg_t cached_reg;
5488
5489               p = p1;
5490
5491               if (*p != ':')
5492                 error (_("Malformed packet(b) (missing colon): %s\n\
5493 Packet: '%s'\n"),
5494                        p, buf);
5495               ++p;
5496
5497               if (reg == NULL)
5498                 error (_("Remote sent bad register number %s: %s\n\
5499 Packet: '%s'\n"),
5500                        hex_string (pnum), p, buf);
5501
5502               cached_reg.num = reg->regnum;
5503
5504               fieldsize = hex2bin (p, cached_reg.data,
5505                                    register_size (target_gdbarch (),
5506                                                   reg->regnum));
5507               p += 2 * fieldsize;
5508               if (fieldsize < register_size (target_gdbarch (),
5509                                              reg->regnum))
5510                 warning (_("Remote reply is too short: %s"), buf);
5511
5512               VEC_safe_push (cached_reg_t, event->regcache, &cached_reg);
5513             }
5514
5515           if (*p != ';')
5516             error (_("Remote register badly formatted: %s\nhere: %s"),
5517                    buf, p);
5518           ++p;
5519         }
5520
5521       if (event->ws.kind != TARGET_WAITKIND_IGNORE)
5522         break;
5523
5524       /* fall through */
5525     case 'S':           /* Old style status, just signal only.  */
5526       {
5527         int sig;
5528
5529         event->ws.kind = TARGET_WAITKIND_STOPPED;
5530         sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
5531         if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
5532           event->ws.value.sig = (enum gdb_signal) sig;
5533         else
5534           event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
5535       }
5536       break;
5537     case 'W':           /* Target exited.  */
5538     case 'X':
5539       {
5540         char *p;
5541         int pid;
5542         ULONGEST value;
5543
5544         /* GDB used to accept only 2 hex chars here.  Stubs should
5545            only send more if they detect GDB supports multi-process
5546            support.  */
5547         p = unpack_varlen_hex (&buf[1], &value);
5548
5549         if (buf[0] == 'W')
5550           {
5551             /* The remote process exited.  */
5552             event->ws.kind = TARGET_WAITKIND_EXITED;
5553             event->ws.value.integer = value;
5554           }
5555         else
5556           {
5557             /* The remote process exited with a signal.  */
5558             event->ws.kind = TARGET_WAITKIND_SIGNALLED;
5559             if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
5560               event->ws.value.sig = (enum gdb_signal) value;
5561             else
5562               event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
5563           }
5564
5565         /* If no process is specified, assume inferior_ptid.  */
5566         pid = ptid_get_pid (inferior_ptid);
5567         if (*p == '\0')
5568           ;
5569         else if (*p == ';')
5570           {
5571             p++;
5572
5573             if (p == '\0')
5574               ;
5575             else if (strncmp (p,
5576                               "process:", sizeof ("process:") - 1) == 0)
5577               {
5578                 ULONGEST upid;
5579
5580                 p += sizeof ("process:") - 1;
5581                 unpack_varlen_hex (p, &upid);
5582                 pid = upid;
5583               }
5584             else
5585               error (_("unknown stop reply packet: %s"), buf);
5586           }
5587         else
5588           error (_("unknown stop reply packet: %s"), buf);
5589         event->ptid = pid_to_ptid (pid);
5590       }
5591       break;
5592     }
5593
5594   if (non_stop && ptid_equal (event->ptid, null_ptid))
5595     error (_("No process or thread specified in stop reply: %s"), buf);
5596 }
5597
5598 /* When the stub wants to tell GDB about a new notification reply, it
5599    sends a notification (%Stop, for example).  Those can come it at
5600    any time, hence, we have to make sure that any pending
5601    putpkt/getpkt sequence we're making is finished, before querying
5602    the stub for more events with the corresponding ack command
5603    (vStopped, for example).  E.g., if we started a vStopped sequence
5604    immediately upon receiving the notification, something like this
5605    could happen:
5606
5607     1.1) --> Hg 1
5608     1.2) <-- OK
5609     1.3) --> g
5610     1.4) <-- %Stop
5611     1.5) --> vStopped
5612     1.6) <-- (registers reply to step #1.3)
5613
5614    Obviously, the reply in step #1.6 would be unexpected to a vStopped
5615    query.
5616
5617    To solve this, whenever we parse a %Stop notification successfully,
5618    we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
5619    doing whatever we were doing:
5620
5621     2.1) --> Hg 1
5622     2.2) <-- OK
5623     2.3) --> g
5624     2.4) <-- %Stop
5625       <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
5626     2.5) <-- (registers reply to step #2.3)
5627
5628    Eventualy after step #2.5, we return to the event loop, which
5629    notices there's an event on the
5630    REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
5631    associated callback --- the function below.  At this point, we're
5632    always safe to start a vStopped sequence. :
5633
5634     2.6) --> vStopped
5635     2.7) <-- T05 thread:2
5636     2.8) --> vStopped
5637     2.9) --> OK
5638 */
5639
5640 void
5641 remote_notif_get_pending_events (struct notif_client *nc)
5642 {
5643   struct remote_state *rs = get_remote_state ();
5644
5645   if (rs->notif_state->pending_event[nc->id] != NULL)
5646     {
5647       if (notif_debug)
5648         fprintf_unfiltered (gdb_stdlog,
5649                             "notif: process: '%s' ack pending event\n",
5650                             nc->name);
5651
5652       /* acknowledge */
5653       nc->ack (nc, rs->buf, rs->notif_state->pending_event[nc->id]);
5654       rs->notif_state->pending_event[nc->id] = NULL;
5655
5656       while (1)
5657         {
5658           getpkt (&rs->buf, &rs->buf_size, 0);
5659           if (strcmp (rs->buf, "OK") == 0)
5660             break;
5661           else
5662             remote_notif_ack (nc, rs->buf);
5663         }
5664     }
5665   else
5666     {
5667       if (notif_debug)
5668         fprintf_unfiltered (gdb_stdlog,
5669                             "notif: process: '%s' no pending reply\n",
5670                             nc->name);
5671     }
5672 }
5673
5674 /* Called when it is decided that STOP_REPLY holds the info of the
5675    event that is to be returned to the core.  This function always
5676    destroys STOP_REPLY.  */
5677
5678 static ptid_t
5679 process_stop_reply (struct stop_reply *stop_reply,
5680                     struct target_waitstatus *status)
5681 {
5682   ptid_t ptid;
5683
5684   *status = stop_reply->ws;
5685   ptid = stop_reply->ptid;
5686
5687   /* If no thread/process was reported by the stub, assume the current
5688      inferior.  */
5689   if (ptid_equal (ptid, null_ptid))
5690     ptid = inferior_ptid;
5691
5692   if (status->kind != TARGET_WAITKIND_EXITED
5693       && status->kind != TARGET_WAITKIND_SIGNALLED)
5694     {
5695       struct remote_state *rs = get_remote_state ();
5696
5697       /* Expedited registers.  */
5698       if (stop_reply->regcache)
5699         {
5700           struct regcache *regcache
5701             = get_thread_arch_regcache (ptid, target_gdbarch ());
5702           cached_reg_t *reg;
5703           int ix;
5704
5705           for (ix = 0;
5706                VEC_iterate(cached_reg_t, stop_reply->regcache, ix, reg);
5707                ix++)
5708             regcache_raw_supply (regcache, reg->num, reg->data);
5709           VEC_free (cached_reg_t, stop_reply->regcache);
5710         }
5711
5712       rs->remote_stopped_by_watchpoint_p = stop_reply->stopped_by_watchpoint_p;
5713       rs->remote_watch_data_address = stop_reply->watch_data_address;
5714
5715       remote_notice_new_inferior (ptid, 0);
5716       demand_private_info (ptid)->core = stop_reply->core;
5717     }
5718
5719   stop_reply_xfree (stop_reply);
5720   return ptid;
5721 }
5722
5723 /* The non-stop mode version of target_wait.  */
5724
5725 static ptid_t
5726 remote_wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
5727 {
5728   struct remote_state *rs = get_remote_state ();
5729   struct stop_reply *stop_reply;
5730   int ret;
5731   int is_notif = 0;
5732
5733   /* If in non-stop mode, get out of getpkt even if a
5734      notification is received.  */
5735
5736   ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
5737                               0 /* forever */, &is_notif);
5738   while (1)
5739     {
5740       if (ret != -1 && !is_notif)
5741         switch (rs->buf[0])
5742           {
5743           case 'E':             /* Error of some sort.  */
5744             /* We're out of sync with the target now.  Did it continue
5745                or not?  We can't tell which thread it was in non-stop,
5746                so just ignore this.  */
5747             warning (_("Remote failure reply: %s"), rs->buf);
5748             break;
5749           case 'O':             /* Console output.  */
5750             remote_console_output (rs->buf + 1);
5751             break;
5752           default:
5753             warning (_("Invalid remote reply: %s"), rs->buf);
5754             break;
5755           }
5756
5757       /* Acknowledge a pending stop reply that may have arrived in the
5758          mean time.  */
5759       if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
5760         remote_notif_get_pending_events (&notif_client_stop);
5761
5762       /* If indeed we noticed a stop reply, we're done.  */
5763       stop_reply = queued_stop_reply (ptid);
5764       if (stop_reply != NULL)
5765         return process_stop_reply (stop_reply, status);
5766
5767       /* Still no event.  If we're just polling for an event, then
5768          return to the event loop.  */
5769       if (options & TARGET_WNOHANG)
5770         {
5771           status->kind = TARGET_WAITKIND_IGNORE;
5772           return minus_one_ptid;
5773         }
5774
5775       /* Otherwise do a blocking wait.  */
5776       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
5777                                   1 /* forever */, &is_notif);
5778     }
5779 }
5780
5781 /* Wait until the remote machine stops, then return, storing status in
5782    STATUS just as `wait' would.  */
5783
5784 static ptid_t
5785 remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
5786 {
5787   struct remote_state *rs = get_remote_state ();
5788   ptid_t event_ptid = null_ptid;
5789   char *buf;
5790   struct stop_reply *stop_reply;
5791
5792  again:
5793
5794   status->kind = TARGET_WAITKIND_IGNORE;
5795   status->value.integer = 0;
5796
5797   stop_reply = queued_stop_reply (ptid);
5798   if (stop_reply != NULL)
5799     return process_stop_reply (stop_reply, status);
5800
5801   if (rs->cached_wait_status)
5802     /* Use the cached wait status, but only once.  */
5803     rs->cached_wait_status = 0;
5804   else
5805     {
5806       int ret;
5807       int is_notif;
5808
5809       if (!target_is_async_p ())
5810         {
5811           ofunc = signal (SIGINT, sync_remote_interrupt);
5812           /* If the user hit C-c before this packet, or between packets,
5813              pretend that it was hit right here.  */
5814           if (check_quit_flag ())
5815             {
5816               clear_quit_flag ();
5817               sync_remote_interrupt (SIGINT);
5818             }
5819         }
5820
5821       /* FIXME: cagney/1999-09-27: If we're in async mode we should
5822          _never_ wait for ever -> test on target_is_async_p().
5823          However, before we do that we need to ensure that the caller
5824          knows how to take the target into/out of async mode.  */
5825       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
5826                                   wait_forever_enabled_p, &is_notif);
5827
5828       if (!target_is_async_p ())
5829         signal (SIGINT, ofunc);
5830
5831       /* GDB gets a notification.  Return to core as this event is
5832          not interesting.  */
5833       if (ret != -1 && is_notif)
5834         return minus_one_ptid;
5835     }
5836
5837   buf = rs->buf;
5838
5839   rs->remote_stopped_by_watchpoint_p = 0;
5840
5841   /* We got something.  */
5842   rs->waiting_for_stop_reply = 0;
5843
5844   /* Assume that the target has acknowledged Ctrl-C unless we receive
5845      an 'F' or 'O' packet.  */
5846   if (buf[0] != 'F' && buf[0] != 'O')
5847     rs->ctrlc_pending_p = 0;
5848
5849   switch (buf[0])
5850     {
5851     case 'E':           /* Error of some sort.  */
5852       /* We're out of sync with the target now.  Did it continue or
5853          not?  Not is more likely, so report a stop.  */
5854       warning (_("Remote failure reply: %s"), buf);
5855       status->kind = TARGET_WAITKIND_STOPPED;
5856       status->value.sig = GDB_SIGNAL_0;
5857       break;
5858     case 'F':           /* File-I/O request.  */
5859       remote_fileio_request (buf, rs->ctrlc_pending_p);
5860       rs->ctrlc_pending_p = 0;
5861       break;
5862     case 'T': case 'S': case 'X': case 'W':
5863       {
5864         struct stop_reply *stop_reply
5865           = (struct stop_reply *) remote_notif_parse (&notif_client_stop,
5866                                                       rs->buf);
5867
5868         event_ptid = process_stop_reply (stop_reply, status);
5869         break;
5870       }
5871     case 'O':           /* Console output.  */
5872       remote_console_output (buf + 1);
5873
5874       /* The target didn't really stop; keep waiting.  */
5875       rs->waiting_for_stop_reply = 1;
5876
5877       break;
5878     case '\0':
5879       if (rs->last_sent_signal != GDB_SIGNAL_0)
5880         {
5881           /* Zero length reply means that we tried 'S' or 'C' and the
5882              remote system doesn't support it.  */
5883           target_terminal_ours_for_output ();
5884           printf_filtered
5885             ("Can't send signals to this remote system.  %s not sent.\n",
5886              gdb_signal_to_name (rs->last_sent_signal));
5887           rs->last_sent_signal = GDB_SIGNAL_0;
5888           target_terminal_inferior ();
5889
5890           strcpy ((char *) buf, rs->last_sent_step ? "s" : "c");
5891           putpkt ((char *) buf);
5892
5893           /* We just told the target to resume, so a stop reply is in
5894              order.  */
5895           rs->waiting_for_stop_reply = 1;
5896           break;
5897         }
5898       /* else fallthrough */
5899     default:
5900       warning (_("Invalid remote reply: %s"), buf);
5901       /* Keep waiting.  */
5902       rs->waiting_for_stop_reply = 1;
5903       break;
5904     }
5905
5906   if (status->kind == TARGET_WAITKIND_IGNORE)
5907     {
5908       /* Nothing interesting happened.  If we're doing a non-blocking
5909          poll, we're done.  Otherwise, go back to waiting.  */
5910       if (options & TARGET_WNOHANG)
5911         return minus_one_ptid;
5912       else
5913         goto again;
5914     }
5915   else if (status->kind != TARGET_WAITKIND_EXITED
5916            && status->kind != TARGET_WAITKIND_SIGNALLED)
5917     {
5918       if (!ptid_equal (event_ptid, null_ptid))
5919         record_currthread (rs, event_ptid);
5920       else
5921         event_ptid = inferior_ptid;
5922     }
5923   else
5924     /* A process exit.  Invalidate our notion of current thread.  */
5925     record_currthread (rs, minus_one_ptid);
5926
5927   return event_ptid;
5928 }
5929
5930 /* Wait until the remote machine stops, then return, storing status in
5931    STATUS just as `wait' would.  */
5932
5933 static ptid_t
5934 remote_wait (struct target_ops *ops,
5935              ptid_t ptid, struct target_waitstatus *status, int options)
5936 {
5937   ptid_t event_ptid;
5938
5939   if (non_stop)
5940     event_ptid = remote_wait_ns (ptid, status, options);
5941   else
5942     event_ptid = remote_wait_as (ptid, status, options);
5943
5944   if (target_can_async_p ())
5945     {
5946       /* If there are are events left in the queue tell the event loop
5947          to return here.  */
5948       if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
5949         mark_async_event_handler (remote_async_inferior_event_token);
5950     }
5951
5952   return event_ptid;
5953 }
5954
5955 /* Fetch a single register using a 'p' packet.  */
5956
5957 static int
5958 fetch_register_using_p (struct regcache *regcache, struct packet_reg *reg)
5959 {
5960   struct remote_state *rs = get_remote_state ();
5961   char *buf, *p;
5962   char regp[MAX_REGISTER_SIZE];
5963   int i;
5964
5965   if (packet_support (PACKET_p) == PACKET_DISABLE)
5966     return 0;
5967
5968   if (reg->pnum == -1)
5969     return 0;
5970
5971   p = rs->buf;
5972   *p++ = 'p';
5973   p += hexnumstr (p, reg->pnum);
5974   *p++ = '\0';
5975   putpkt (rs->buf);
5976   getpkt (&rs->buf, &rs->buf_size, 0);
5977
5978   buf = rs->buf;
5979
5980   switch (packet_ok (buf, &remote_protocol_packets[PACKET_p]))
5981     {
5982     case PACKET_OK:
5983       break;
5984     case PACKET_UNKNOWN:
5985       return 0;
5986     case PACKET_ERROR:
5987       error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
5988              gdbarch_register_name (get_regcache_arch (regcache), 
5989                                     reg->regnum), 
5990              buf);
5991     }
5992
5993   /* If this register is unfetchable, tell the regcache.  */
5994   if (buf[0] == 'x')
5995     {
5996       regcache_raw_supply (regcache, reg->regnum, NULL);
5997       return 1;
5998     }
5999
6000   /* Otherwise, parse and supply the value.  */
6001   p = buf;
6002   i = 0;
6003   while (p[0] != 0)
6004     {
6005       if (p[1] == 0)
6006         error (_("fetch_register_using_p: early buf termination"));
6007
6008       regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
6009       p += 2;
6010     }
6011   regcache_raw_supply (regcache, reg->regnum, regp);
6012   return 1;
6013 }
6014
6015 /* Fetch the registers included in the target's 'g' packet.  */
6016
6017 static int
6018 send_g_packet (void)
6019 {
6020   struct remote_state *rs = get_remote_state ();
6021   int buf_len;
6022
6023   xsnprintf (rs->buf, get_remote_packet_size (), "g");
6024   remote_send (&rs->buf, &rs->buf_size);
6025
6026   /* We can get out of synch in various cases.  If the first character
6027      in the buffer is not a hex character, assume that has happened
6028      and try to fetch another packet to read.  */
6029   while ((rs->buf[0] < '0' || rs->buf[0] > '9')
6030          && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
6031          && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
6032          && rs->buf[0] != 'x')  /* New: unavailable register value.  */
6033     {
6034       if (remote_debug)
6035         fprintf_unfiltered (gdb_stdlog,
6036                             "Bad register packet; fetching a new packet\n");
6037       getpkt (&rs->buf, &rs->buf_size, 0);
6038     }
6039
6040   buf_len = strlen (rs->buf);
6041
6042   /* Sanity check the received packet.  */
6043   if (buf_len % 2 != 0)
6044     error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf);
6045
6046   return buf_len / 2;
6047 }
6048
6049 static void
6050 process_g_packet (struct regcache *regcache)
6051 {
6052   struct gdbarch *gdbarch = get_regcache_arch (regcache);
6053   struct remote_state *rs = get_remote_state ();
6054   struct remote_arch_state *rsa = get_remote_arch_state ();
6055   int i, buf_len;
6056   char *p;
6057   char *regs;
6058
6059   buf_len = strlen (rs->buf);
6060
6061   /* Further sanity checks, with knowledge of the architecture.  */
6062   if (buf_len > 2 * rsa->sizeof_g_packet)
6063     error (_("Remote 'g' packet reply is too long: %s"), rs->buf);
6064
6065   /* Save the size of the packet sent to us by the target.  It is used
6066      as a heuristic when determining the max size of packets that the
6067      target can safely receive.  */
6068   if (rsa->actual_register_packet_size == 0)
6069     rsa->actual_register_packet_size = buf_len;
6070
6071   /* If this is smaller than we guessed the 'g' packet would be,
6072      update our records.  A 'g' reply that doesn't include a register's
6073      value implies either that the register is not available, or that
6074      the 'p' packet must be used.  */
6075   if (buf_len < 2 * rsa->sizeof_g_packet)
6076     {
6077       rsa->sizeof_g_packet = buf_len / 2;
6078
6079       for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
6080         {
6081           if (rsa->regs[i].pnum == -1)
6082             continue;
6083
6084           if (rsa->regs[i].offset >= rsa->sizeof_g_packet)
6085             rsa->regs[i].in_g_packet = 0;
6086           else
6087             rsa->regs[i].in_g_packet = 1;
6088         }
6089     }
6090
6091   regs = alloca (rsa->sizeof_g_packet);
6092
6093   /* Unimplemented registers read as all bits zero.  */
6094   memset (regs, 0, rsa->sizeof_g_packet);
6095
6096   /* Reply describes registers byte by byte, each byte encoded as two
6097      hex characters.  Suck them all up, then supply them to the
6098      register cacheing/storage mechanism.  */
6099
6100   p = rs->buf;
6101   for (i = 0; i < rsa->sizeof_g_packet; i++)
6102     {
6103       if (p[0] == 0 || p[1] == 0)
6104         /* This shouldn't happen - we adjusted sizeof_g_packet above.  */
6105         internal_error (__FILE__, __LINE__,
6106                         _("unexpected end of 'g' packet reply"));
6107
6108       if (p[0] == 'x' && p[1] == 'x')
6109         regs[i] = 0;            /* 'x' */
6110       else
6111         regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
6112       p += 2;
6113     }
6114
6115   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
6116     {
6117       struct packet_reg *r = &rsa->regs[i];
6118
6119       if (r->in_g_packet)
6120         {
6121           if (r->offset * 2 >= strlen (rs->buf))
6122             /* This shouldn't happen - we adjusted in_g_packet above.  */
6123             internal_error (__FILE__, __LINE__,
6124                             _("unexpected end of 'g' packet reply"));
6125           else if (rs->buf[r->offset * 2] == 'x')
6126             {
6127               gdb_assert (r->offset * 2 < strlen (rs->buf));
6128               /* The register isn't available, mark it as such (at
6129                  the same time setting the value to zero).  */
6130               regcache_raw_supply (regcache, r->regnum, NULL);
6131             }
6132           else
6133             regcache_raw_supply (regcache, r->regnum,
6134                                  regs + r->offset);
6135         }
6136     }
6137 }
6138
6139 static void
6140 fetch_registers_using_g (struct regcache *regcache)
6141 {
6142   send_g_packet ();
6143   process_g_packet (regcache);
6144 }
6145
6146 /* Make the remote selected traceframe match GDB's selected
6147    traceframe.  */
6148
6149 static void
6150 set_remote_traceframe (void)
6151 {
6152   int newnum;
6153   struct remote_state *rs = get_remote_state ();
6154
6155   if (rs->remote_traceframe_number == get_traceframe_number ())
6156     return;
6157
6158   /* Avoid recursion, remote_trace_find calls us again.  */
6159   rs->remote_traceframe_number = get_traceframe_number ();
6160
6161   newnum = target_trace_find (tfind_number,
6162                               get_traceframe_number (), 0, 0, NULL);
6163
6164   /* Should not happen.  If it does, all bets are off.  */
6165   if (newnum != get_traceframe_number ())
6166     warning (_("could not set remote traceframe"));
6167 }
6168
6169 static void
6170 remote_fetch_registers (struct target_ops *ops,
6171                         struct regcache *regcache, int regnum)
6172 {
6173   struct remote_arch_state *rsa = get_remote_arch_state ();
6174   int i;
6175
6176   set_remote_traceframe ();
6177   set_general_thread (inferior_ptid);
6178
6179   if (regnum >= 0)
6180     {
6181       struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
6182
6183       gdb_assert (reg != NULL);
6184
6185       /* If this register might be in the 'g' packet, try that first -
6186          we are likely to read more than one register.  If this is the
6187          first 'g' packet, we might be overly optimistic about its
6188          contents, so fall back to 'p'.  */
6189       if (reg->in_g_packet)
6190         {
6191           fetch_registers_using_g (regcache);
6192           if (reg->in_g_packet)
6193             return;
6194         }
6195
6196       if (fetch_register_using_p (regcache, reg))
6197         return;
6198
6199       /* This register is not available.  */
6200       regcache_raw_supply (regcache, reg->regnum, NULL);
6201
6202       return;
6203     }
6204
6205   fetch_registers_using_g (regcache);
6206
6207   for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
6208     if (!rsa->regs[i].in_g_packet)
6209       if (!fetch_register_using_p (regcache, &rsa->regs[i]))
6210         {
6211           /* This register is not available.  */
6212           regcache_raw_supply (regcache, i, NULL);
6213         }
6214 }
6215
6216 /* Prepare to store registers.  Since we may send them all (using a
6217    'G' request), we have to read out the ones we don't want to change
6218    first.  */
6219
6220 static void
6221 remote_prepare_to_store (struct target_ops *self, struct regcache *regcache)
6222 {
6223   struct remote_arch_state *rsa = get_remote_arch_state ();
6224   int i;
6225   gdb_byte buf[MAX_REGISTER_SIZE];
6226
6227   /* Make sure the entire registers array is valid.  */
6228   switch (packet_support (PACKET_P))
6229     {
6230     case PACKET_DISABLE:
6231     case PACKET_SUPPORT_UNKNOWN:
6232       /* Make sure all the necessary registers are cached.  */
6233       for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
6234         if (rsa->regs[i].in_g_packet)
6235           regcache_raw_read (regcache, rsa->regs[i].regnum, buf);
6236       break;
6237     case PACKET_ENABLE:
6238       break;
6239     }
6240 }
6241
6242 /* Helper: Attempt to store REGNUM using the P packet.  Return fail IFF
6243    packet was not recognized.  */
6244
6245 static int
6246 store_register_using_P (const struct regcache *regcache, 
6247                         struct packet_reg *reg)
6248 {
6249   struct gdbarch *gdbarch = get_regcache_arch (regcache);
6250   struct remote_state *rs = get_remote_state ();
6251   /* Try storing a single register.  */
6252   char *buf = rs->buf;
6253   gdb_byte regp[MAX_REGISTER_SIZE];
6254   char *p;
6255
6256   if (packet_support (PACKET_P) == PACKET_DISABLE)
6257     return 0;
6258
6259   if (reg->pnum == -1)
6260     return 0;
6261
6262   xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
6263   p = buf + strlen (buf);
6264   regcache_raw_collect (regcache, reg->regnum, regp);
6265   bin2hex (regp, p, register_size (gdbarch, reg->regnum));
6266   putpkt (rs->buf);
6267   getpkt (&rs->buf, &rs->buf_size, 0);
6268
6269   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
6270     {
6271     case PACKET_OK:
6272       return 1;
6273     case PACKET_ERROR:
6274       error (_("Could not write register \"%s\"; remote failure reply '%s'"),
6275              gdbarch_register_name (gdbarch, reg->regnum), rs->buf);
6276     case PACKET_UNKNOWN:
6277       return 0;
6278     default:
6279       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
6280     }
6281 }
6282
6283 /* Store register REGNUM, or all registers if REGNUM == -1, from the
6284    contents of the register cache buffer.  FIXME: ignores errors.  */
6285
6286 static void
6287 store_registers_using_G (const struct regcache *regcache)
6288 {
6289   struct remote_state *rs = get_remote_state ();
6290   struct remote_arch_state *rsa = get_remote_arch_state ();
6291   gdb_byte *regs;
6292   char *p;
6293
6294   /* Extract all the registers in the regcache copying them into a
6295      local buffer.  */
6296   {
6297     int i;
6298
6299     regs = alloca (rsa->sizeof_g_packet);
6300     memset (regs, 0, rsa->sizeof_g_packet);
6301     for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
6302       {
6303         struct packet_reg *r = &rsa->regs[i];
6304
6305         if (r->in_g_packet)
6306           regcache_raw_collect (regcache, r->regnum, regs + r->offset);
6307       }
6308   }
6309
6310   /* Command describes registers byte by byte,
6311      each byte encoded as two hex characters.  */
6312   p = rs->buf;
6313   *p++ = 'G';
6314   /* remote_prepare_to_store insures that rsa->sizeof_g_packet gets
6315      updated.  */
6316   bin2hex (regs, p, rsa->sizeof_g_packet);
6317   putpkt (rs->buf);
6318   getpkt (&rs->buf, &rs->buf_size, 0);
6319   if (packet_check_result (rs->buf) == PACKET_ERROR)
6320     error (_("Could not write registers; remote failure reply '%s'"), 
6321            rs->buf);
6322 }
6323
6324 /* Store register REGNUM, or all registers if REGNUM == -1, from the contents
6325    of the register cache buffer.  FIXME: ignores errors.  */
6326
6327 static void
6328 remote_store_registers (struct target_ops *ops,
6329                         struct regcache *regcache, int regnum)
6330 {
6331   struct remote_arch_state *rsa = get_remote_arch_state ();
6332   int i;
6333
6334   set_remote_traceframe ();
6335   set_general_thread (inferior_ptid);
6336
6337   if (regnum >= 0)
6338     {
6339       struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
6340
6341       gdb_assert (reg != NULL);
6342
6343       /* Always prefer to store registers using the 'P' packet if
6344          possible; we often change only a small number of registers.
6345          Sometimes we change a larger number; we'd need help from a
6346          higher layer to know to use 'G'.  */
6347       if (store_register_using_P (regcache, reg))
6348         return;
6349
6350       /* For now, don't complain if we have no way to write the
6351          register.  GDB loses track of unavailable registers too
6352          easily.  Some day, this may be an error.  We don't have
6353          any way to read the register, either...  */
6354       if (!reg->in_g_packet)
6355         return;
6356
6357       store_registers_using_G (regcache);
6358       return;
6359     }
6360
6361   store_registers_using_G (regcache);
6362
6363   for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
6364     if (!rsa->regs[i].in_g_packet)
6365       if (!store_register_using_P (regcache, &rsa->regs[i]))
6366         /* See above for why we do not issue an error here.  */
6367         continue;
6368 }
6369 \f
6370
6371 /* Return the number of hex digits in num.  */
6372
6373 static int
6374 hexnumlen (ULONGEST num)
6375 {
6376   int i;
6377
6378   for (i = 0; num != 0; i++)
6379     num >>= 4;
6380
6381   return max (i, 1);
6382 }
6383
6384 /* Set BUF to the minimum number of hex digits representing NUM.  */
6385
6386 static int
6387 hexnumstr (char *buf, ULONGEST num)
6388 {
6389   int len = hexnumlen (num);
6390
6391   return hexnumnstr (buf, num, len);
6392 }
6393
6394
6395 /* Set BUF to the hex digits representing NUM, padded to WIDTH characters.  */
6396
6397 static int
6398 hexnumnstr (char *buf, ULONGEST num, int width)
6399 {
6400   int i;
6401
6402   buf[width] = '\0';
6403
6404   for (i = width - 1; i >= 0; i--)
6405     {
6406       buf[i] = "0123456789abcdef"[(num & 0xf)];
6407       num >>= 4;
6408     }
6409
6410   return width;
6411 }
6412
6413 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits.  */
6414
6415 static CORE_ADDR
6416 remote_address_masked (CORE_ADDR addr)
6417 {
6418   unsigned int address_size = remote_address_size;
6419
6420   /* If "remoteaddresssize" was not set, default to target address size.  */
6421   if (!address_size)
6422     address_size = gdbarch_addr_bit (target_gdbarch ());
6423
6424   if (address_size > 0
6425       && address_size < (sizeof (ULONGEST) * 8))
6426     {
6427       /* Only create a mask when that mask can safely be constructed
6428          in a ULONGEST variable.  */
6429       ULONGEST mask = 1;
6430
6431       mask = (mask << address_size) - 1;
6432       addr &= mask;
6433     }
6434   return addr;
6435 }
6436
6437 /* Determine whether the remote target supports binary downloading.
6438    This is accomplished by sending a no-op memory write of zero length
6439    to the target at the specified address. It does not suffice to send
6440    the whole packet, since many stubs strip the eighth bit and
6441    subsequently compute a wrong checksum, which causes real havoc with
6442    remote_write_bytes.
6443
6444    NOTE: This can still lose if the serial line is not eight-bit
6445    clean.  In cases like this, the user should clear "remote
6446    X-packet".  */
6447
6448 static void
6449 check_binary_download (CORE_ADDR addr)
6450 {
6451   struct remote_state *rs = get_remote_state ();
6452
6453   switch (packet_support (PACKET_X))
6454     {
6455     case PACKET_DISABLE:
6456       break;
6457     case PACKET_ENABLE:
6458       break;
6459     case PACKET_SUPPORT_UNKNOWN:
6460       {
6461         char *p;
6462
6463         p = rs->buf;
6464         *p++ = 'X';
6465         p += hexnumstr (p, (ULONGEST) addr);
6466         *p++ = ',';
6467         p += hexnumstr (p, (ULONGEST) 0);
6468         *p++ = ':';
6469         *p = '\0';
6470
6471         putpkt_binary (rs->buf, (int) (p - rs->buf));
6472         getpkt (&rs->buf, &rs->buf_size, 0);
6473
6474         if (rs->buf[0] == '\0')
6475           {
6476             if (remote_debug)
6477               fprintf_unfiltered (gdb_stdlog,
6478                                   "binary downloading NOT "
6479                                   "supported by target\n");
6480             remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
6481           }
6482         else
6483           {
6484             if (remote_debug)
6485               fprintf_unfiltered (gdb_stdlog,
6486                                   "binary downloading supported by target\n");
6487             remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
6488           }
6489         break;
6490       }
6491     }
6492 }
6493
6494 /* Write memory data directly to the remote machine.
6495    This does not inform the data cache; the data cache uses this.
6496    HEADER is the starting part of the packet.
6497    MEMADDR is the address in the remote memory space.
6498    MYADDR is the address of the buffer in our space.
6499    LEN is the number of bytes.
6500    PACKET_FORMAT should be either 'X' or 'M', and indicates if we
6501    should send data as binary ('X'), or hex-encoded ('M').
6502
6503    The function creates packet of the form
6504        <HEADER><ADDRESS>,<LENGTH>:<DATA>
6505
6506    where encoding of <DATA> is termined by PACKET_FORMAT.
6507
6508    If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
6509    are omitted.
6510
6511    Return the transferred status, error or OK (an
6512    'enum target_xfer_status' value).  Save the number of bytes
6513    transferred in *XFERED_LEN.  Only transfer a single packet.  */
6514
6515 static enum target_xfer_status
6516 remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
6517                         const gdb_byte *myaddr, ULONGEST len,
6518                         ULONGEST *xfered_len, char packet_format,
6519                         int use_length)
6520 {
6521   struct remote_state *rs = get_remote_state ();
6522   char *p;
6523   char *plen = NULL;
6524   int plenlen = 0;
6525   int todo;
6526   int nr_bytes;
6527   int payload_size;
6528   int payload_length;
6529   int header_length;
6530
6531   if (packet_format != 'X' && packet_format != 'M')
6532     internal_error (__FILE__, __LINE__,
6533                     _("remote_write_bytes_aux: bad packet format"));
6534
6535   if (len == 0)
6536     return TARGET_XFER_EOF;
6537
6538   payload_size = get_memory_write_packet_size ();
6539
6540   /* The packet buffer will be large enough for the payload;
6541      get_memory_packet_size ensures this.  */
6542   rs->buf[0] = '\0';
6543
6544   /* Compute the size of the actual payload by subtracting out the
6545      packet header and footer overhead: "$M<memaddr>,<len>:...#nn".  */
6546
6547   payload_size -= strlen ("$,:#NN");
6548   if (!use_length)
6549     /* The comma won't be used.  */
6550     payload_size += 1;
6551   header_length = strlen (header);
6552   payload_size -= header_length;
6553   payload_size -= hexnumlen (memaddr);
6554
6555   /* Construct the packet excluding the data: "<header><memaddr>,<len>:".  */
6556
6557   strcat (rs->buf, header);
6558   p = rs->buf + strlen (header);
6559
6560   /* Compute a best guess of the number of bytes actually transfered.  */
6561   if (packet_format == 'X')
6562     {
6563       /* Best guess at number of bytes that will fit.  */
6564       todo = min (len, payload_size);
6565       if (use_length)
6566         payload_size -= hexnumlen (todo);
6567       todo = min (todo, payload_size);
6568     }
6569   else
6570     {
6571       /* Num bytes that will fit.  */
6572       todo = min (len, payload_size / 2);
6573       if (use_length)
6574         payload_size -= hexnumlen (todo);
6575       todo = min (todo, payload_size / 2);
6576     }
6577
6578   if (todo <= 0)
6579     internal_error (__FILE__, __LINE__,
6580                     _("minimum packet size too small to write data"));
6581
6582   /* If we already need another packet, then try to align the end
6583      of this packet to a useful boundary.  */
6584   if (todo > 2 * REMOTE_ALIGN_WRITES && todo < len)
6585     todo = ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
6586
6587   /* Append "<memaddr>".  */
6588   memaddr = remote_address_masked (memaddr);
6589   p += hexnumstr (p, (ULONGEST) memaddr);
6590
6591   if (use_length)
6592     {
6593       /* Append ",".  */
6594       *p++ = ',';
6595
6596       /* Append <len>.  Retain the location/size of <len>.  It may need to
6597          be adjusted once the packet body has been created.  */
6598       plen = p;
6599       plenlen = hexnumstr (p, (ULONGEST) todo);
6600       p += plenlen;
6601     }
6602
6603   /* Append ":".  */
6604   *p++ = ':';
6605   *p = '\0';
6606
6607   /* Append the packet body.  */
6608   if (packet_format == 'X')
6609     {
6610       /* Binary mode.  Send target system values byte by byte, in
6611          increasing byte addresses.  Only escape certain critical
6612          characters.  */
6613       payload_length = remote_escape_output (myaddr, todo, (gdb_byte *) p,
6614                                              &nr_bytes, payload_size);
6615
6616       /* If not all TODO bytes fit, then we'll need another packet.  Make
6617          a second try to keep the end of the packet aligned.  Don't do
6618          this if the packet is tiny.  */
6619       if (nr_bytes < todo && nr_bytes > 2 * REMOTE_ALIGN_WRITES)
6620         {
6621           int new_nr_bytes;
6622
6623           new_nr_bytes = (((memaddr + nr_bytes) & ~(REMOTE_ALIGN_WRITES - 1))
6624                           - memaddr);
6625           if (new_nr_bytes != nr_bytes)
6626             payload_length = remote_escape_output (myaddr, new_nr_bytes,
6627                                                    (gdb_byte *) p, &nr_bytes,
6628                                                    payload_size);
6629         }
6630
6631       p += payload_length;
6632       if (use_length && nr_bytes < todo)
6633         {
6634           /* Escape chars have filled up the buffer prematurely,
6635              and we have actually sent fewer bytes than planned.
6636              Fix-up the length field of the packet.  Use the same
6637              number of characters as before.  */
6638           plen += hexnumnstr (plen, (ULONGEST) nr_bytes, plenlen);
6639           *plen = ':';  /* overwrite \0 from hexnumnstr() */
6640         }
6641     }
6642   else
6643     {
6644       /* Normal mode: Send target system values byte by byte, in
6645          increasing byte addresses.  Each byte is encoded as a two hex
6646          value.  */
6647       nr_bytes = bin2hex (myaddr, p, todo);
6648       p += 2 * nr_bytes;
6649     }
6650
6651   putpkt_binary (rs->buf, (int) (p - rs->buf));
6652   getpkt (&rs->buf, &rs->buf_size, 0);
6653
6654   if (rs->buf[0] == 'E')
6655     return TARGET_XFER_E_IO;
6656
6657   /* Return NR_BYTES, not TODO, in case escape chars caused us to send
6658      fewer bytes than we'd planned.  */
6659   *xfered_len = (ULONGEST) nr_bytes;
6660   return TARGET_XFER_OK;
6661 }
6662
6663 /* Write memory data directly to the remote machine.
6664    This does not inform the data cache; the data cache uses this.
6665    MEMADDR is the address in the remote memory space.
6666    MYADDR is the address of the buffer in our space.
6667    LEN is the number of bytes.
6668
6669    Return the transferred status, error or OK (an
6670    'enum target_xfer_status' value).  Save the number of bytes
6671    transferred in *XFERED_LEN.  Only transfer a single packet.  */
6672
6673 static enum target_xfer_status
6674 remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, ULONGEST len,
6675                     ULONGEST *xfered_len)
6676 {
6677   char *packet_format = 0;
6678
6679   /* Check whether the target supports binary download.  */
6680   check_binary_download (memaddr);
6681
6682   switch (packet_support (PACKET_X))
6683     {
6684     case PACKET_ENABLE:
6685       packet_format = "X";
6686       break;
6687     case PACKET_DISABLE:
6688       packet_format = "M";
6689       break;
6690     case PACKET_SUPPORT_UNKNOWN:
6691       internal_error (__FILE__, __LINE__,
6692                       _("remote_write_bytes: bad internal state"));
6693     default:
6694       internal_error (__FILE__, __LINE__, _("bad switch"));
6695     }
6696
6697   return remote_write_bytes_aux (packet_format,
6698                                  memaddr, myaddr, len, xfered_len,
6699                                  packet_format[0], 1);
6700 }
6701
6702 /* Read memory data directly from the remote machine.
6703    This does not use the data cache; the data cache uses this.
6704    MEMADDR is the address in the remote memory space.
6705    MYADDR is the address of the buffer in our space.
6706    LEN is the number of bytes.
6707
6708    Return the transferred status, error or OK (an
6709    'enum target_xfer_status' value).  Save the number of bytes
6710    transferred in *XFERED_LEN.  */
6711
6712 static enum target_xfer_status
6713 remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr, ULONGEST len,
6714                      ULONGEST *xfered_len)
6715 {
6716   struct remote_state *rs = get_remote_state ();
6717   int max_buf_size;             /* Max size of packet output buffer.  */
6718   char *p;
6719   int todo;
6720   int i;
6721
6722   max_buf_size = get_memory_read_packet_size ();
6723   /* The packet buffer will be large enough for the payload;
6724      get_memory_packet_size ensures this.  */
6725
6726   /* Number if bytes that will fit.  */
6727   todo = min (len, max_buf_size / 2);
6728
6729   /* Construct "m"<memaddr>","<len>".  */
6730   memaddr = remote_address_masked (memaddr);
6731   p = rs->buf;
6732   *p++ = 'm';
6733   p += hexnumstr (p, (ULONGEST) memaddr);
6734   *p++ = ',';
6735   p += hexnumstr (p, (ULONGEST) todo);
6736   *p = '\0';
6737   putpkt (rs->buf);
6738   getpkt (&rs->buf, &rs->buf_size, 0);
6739   if (rs->buf[0] == 'E'
6740       && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
6741       && rs->buf[3] == '\0')
6742     return TARGET_XFER_E_IO;
6743   /* Reply describes memory byte by byte, each byte encoded as two hex
6744      characters.  */
6745   p = rs->buf;
6746   i = hex2bin (p, myaddr, todo);
6747   /* Return what we have.  Let higher layers handle partial reads.  */
6748   *xfered_len = (ULONGEST) i;
6749   return TARGET_XFER_OK;
6750 }
6751
6752 /* Using the set of read-only target sections of remote, read live
6753    read-only memory.
6754
6755    For interface/parameters/return description see target.h,
6756    to_xfer_partial.  */
6757
6758 static enum target_xfer_status
6759 remote_xfer_live_readonly_partial (struct target_ops *ops, gdb_byte *readbuf,
6760                                    ULONGEST memaddr, ULONGEST len,
6761                                    ULONGEST *xfered_len)
6762 {
6763   struct target_section *secp;
6764   struct target_section_table *table;
6765
6766   secp = target_section_by_addr (ops, memaddr);
6767   if (secp != NULL
6768       && (bfd_get_section_flags (secp->the_bfd_section->owner,
6769                                  secp->the_bfd_section)
6770           & SEC_READONLY))
6771     {
6772       struct target_section *p;
6773       ULONGEST memend = memaddr + len;
6774
6775       table = target_get_section_table (ops);
6776
6777       for (p = table->sections; p < table->sections_end; p++)
6778         {
6779           if (memaddr >= p->addr)
6780             {
6781               if (memend <= p->endaddr)
6782                 {
6783                   /* Entire transfer is within this section.  */
6784                   return remote_read_bytes_1 (memaddr, readbuf, len,
6785                                               xfered_len);
6786                 }
6787               else if (memaddr >= p->endaddr)
6788                 {
6789                   /* This section ends before the transfer starts.  */
6790                   continue;
6791                 }
6792               else
6793                 {
6794                   /* This section overlaps the transfer.  Just do half.  */
6795                   len = p->endaddr - memaddr;
6796                   return remote_read_bytes_1 (memaddr, readbuf, len,
6797                                               xfered_len);
6798                 }
6799             }
6800         }
6801     }
6802
6803   return TARGET_XFER_EOF;
6804 }
6805
6806 /* Similar to remote_read_bytes_1, but it reads from the remote stub
6807    first if the requested memory is unavailable in traceframe.
6808    Otherwise, fall back to remote_read_bytes_1.  */
6809
6810 static enum target_xfer_status
6811 remote_read_bytes (struct target_ops *ops, CORE_ADDR memaddr,
6812                    gdb_byte *myaddr, ULONGEST len, ULONGEST *xfered_len)
6813 {
6814   if (len == 0)
6815     return 0;
6816
6817   if (get_traceframe_number () != -1)
6818     {
6819       VEC(mem_range_s) *available;
6820
6821       /* If we fail to get the set of available memory, then the
6822          target does not support querying traceframe info, and so we
6823          attempt reading from the traceframe anyway (assuming the
6824          target implements the old QTro packet then).  */
6825       if (traceframe_available_memory (&available, memaddr, len))
6826         {
6827           struct cleanup *old_chain;
6828
6829           old_chain = make_cleanup (VEC_cleanup(mem_range_s), &available);
6830
6831           if (VEC_empty (mem_range_s, available)
6832               || VEC_index (mem_range_s, available, 0)->start != memaddr)
6833             {
6834               enum target_xfer_status res;
6835
6836               /* Don't read into the traceframe's available
6837                  memory.  */
6838               if (!VEC_empty (mem_range_s, available))
6839                 {
6840                   LONGEST oldlen = len;
6841
6842                   len = VEC_index (mem_range_s, available, 0)->start - memaddr;
6843                   gdb_assert (len <= oldlen);
6844                 }
6845
6846               do_cleanups (old_chain);
6847
6848               /* This goes through the topmost target again.  */
6849               res = remote_xfer_live_readonly_partial (ops, myaddr, memaddr,
6850                                                        len, xfered_len);
6851               if (res == TARGET_XFER_OK)
6852                 return TARGET_XFER_OK;
6853               else
6854                 {
6855                   /* No use trying further, we know some memory starting
6856                      at MEMADDR isn't available.  */
6857                   *xfered_len = len;
6858                   return TARGET_XFER_UNAVAILABLE;
6859                 }
6860             }
6861
6862           /* Don't try to read more than how much is available, in
6863              case the target implements the deprecated QTro packet to
6864              cater for older GDBs (the target's knowledge of read-only
6865              sections may be outdated by now).  */
6866           len = VEC_index (mem_range_s, available, 0)->length;
6867
6868           do_cleanups (old_chain);
6869         }
6870     }
6871
6872   return remote_read_bytes_1 (memaddr, myaddr, len, xfered_len);
6873 }
6874
6875 \f
6876
6877 /* Sends a packet with content determined by the printf format string
6878    FORMAT and the remaining arguments, then gets the reply.  Returns
6879    whether the packet was a success, a failure, or unknown.  */
6880
6881 static enum packet_result
6882 remote_send_printf (const char *format, ...)
6883 {
6884   struct remote_state *rs = get_remote_state ();
6885   int max_size = get_remote_packet_size ();
6886   va_list ap;
6887
6888   va_start (ap, format);
6889
6890   rs->buf[0] = '\0';
6891   if (vsnprintf (rs->buf, max_size, format, ap) >= max_size)
6892     internal_error (__FILE__, __LINE__, _("Too long remote packet."));
6893
6894   if (putpkt (rs->buf) < 0)
6895     error (_("Communication problem with target."));
6896
6897   rs->buf[0] = '\0';
6898   getpkt (&rs->buf, &rs->buf_size, 0);
6899
6900   return packet_check_result (rs->buf);
6901 }
6902
6903 static void
6904 restore_remote_timeout (void *p)
6905 {
6906   int value = *(int *)p;
6907
6908   remote_timeout = value;
6909 }
6910
6911 /* Flash writing can take quite some time.  We'll set
6912    effectively infinite timeout for flash operations.
6913    In future, we'll need to decide on a better approach.  */
6914 static const int remote_flash_timeout = 1000;
6915
6916 static void
6917 remote_flash_erase (struct target_ops *ops,
6918                     ULONGEST address, LONGEST length)
6919 {
6920   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
6921   int saved_remote_timeout = remote_timeout;
6922   enum packet_result ret;
6923   struct cleanup *back_to = make_cleanup (restore_remote_timeout,
6924                                           &saved_remote_timeout);
6925
6926   remote_timeout = remote_flash_timeout;
6927
6928   ret = remote_send_printf ("vFlashErase:%s,%s",
6929                             phex (address, addr_size),
6930                             phex (length, 4));
6931   switch (ret)
6932     {
6933     case PACKET_UNKNOWN:
6934       error (_("Remote target does not support flash erase"));
6935     case PACKET_ERROR:
6936       error (_("Error erasing flash with vFlashErase packet"));
6937     default:
6938       break;
6939     }
6940
6941   do_cleanups (back_to);
6942 }
6943
6944 static enum target_xfer_status
6945 remote_flash_write (struct target_ops *ops, ULONGEST address,
6946                     ULONGEST length, ULONGEST *xfered_len,
6947                     const gdb_byte *data)
6948 {
6949   int saved_remote_timeout = remote_timeout;
6950   enum target_xfer_status ret;
6951   struct cleanup *back_to = make_cleanup (restore_remote_timeout,
6952                                           &saved_remote_timeout);
6953
6954   remote_timeout = remote_flash_timeout;
6955   ret = remote_write_bytes_aux ("vFlashWrite:", address, data, length,
6956                                 xfered_len,'X', 0);
6957   do_cleanups (back_to);
6958
6959   return ret;
6960 }
6961
6962 static void
6963 remote_flash_done (struct target_ops *ops)
6964 {
6965   int saved_remote_timeout = remote_timeout;
6966   int ret;
6967   struct cleanup *back_to = make_cleanup (restore_remote_timeout,
6968                                           &saved_remote_timeout);
6969
6970   remote_timeout = remote_flash_timeout;
6971   ret = remote_send_printf ("vFlashDone");
6972   do_cleanups (back_to);
6973
6974   switch (ret)
6975     {
6976     case PACKET_UNKNOWN:
6977       error (_("Remote target does not support vFlashDone"));
6978     case PACKET_ERROR:
6979       error (_("Error finishing flash operation"));
6980     default:
6981       break;
6982     }
6983 }
6984
6985 static void
6986 remote_files_info (struct target_ops *ignore)
6987 {
6988   puts_filtered ("Debugging a target over a serial line.\n");
6989 }
6990 \f
6991 /* Stuff for dealing with the packets which are part of this protocol.
6992    See comment at top of file for details.  */
6993
6994 /* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
6995    error to higher layers.  Called when a serial error is detected.
6996    The exception message is STRING, followed by a colon and a blank,
6997    the system error message for errno at function entry and final dot
6998    for output compatibility with throw_perror_with_name.  */
6999
7000 static void
7001 unpush_and_perror (const char *string)
7002 {
7003   int saved_errno = errno;
7004
7005   remote_unpush_target ();
7006   throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
7007                safe_strerror (saved_errno));
7008 }
7009
7010 /* Read a single character from the remote end.  */
7011
7012 static int
7013 readchar (int timeout)
7014 {
7015   int ch;
7016   struct remote_state *rs = get_remote_state ();
7017
7018   ch = serial_readchar (rs->remote_desc, timeout);
7019
7020   if (ch >= 0)
7021     return ch;
7022
7023   switch ((enum serial_rc) ch)
7024     {
7025     case SERIAL_EOF:
7026       remote_unpush_target ();
7027       throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
7028       /* no return */
7029     case SERIAL_ERROR:
7030       unpush_and_perror (_("Remote communication error.  "
7031                            "Target disconnected."));
7032       /* no return */
7033     case SERIAL_TIMEOUT:
7034       break;
7035     }
7036   return ch;
7037 }
7038
7039 /* Wrapper for serial_write that closes the target and throws if
7040    writing fails.  */
7041
7042 static void
7043 remote_serial_write (const char *str, int len)
7044 {
7045   struct remote_state *rs = get_remote_state ();
7046
7047   if (serial_write (rs->remote_desc, str, len))
7048     {
7049       unpush_and_perror (_("Remote communication error.  "
7050                            "Target disconnected."));
7051     }
7052 }
7053
7054 /* Send the command in *BUF to the remote machine, and read the reply
7055    into *BUF.  Report an error if we get an error reply.  Resize
7056    *BUF using xrealloc if necessary to hold the result, and update
7057    *SIZEOF_BUF.  */
7058
7059 static void
7060 remote_send (char **buf,
7061              long *sizeof_buf)
7062 {
7063   putpkt (*buf);
7064   getpkt (buf, sizeof_buf, 0);
7065
7066   if ((*buf)[0] == 'E')
7067     error (_("Remote failure reply: %s"), *buf);
7068 }
7069
7070 /* Return a pointer to an xmalloc'ed string representing an escaped
7071    version of BUF, of len N.  E.g. \n is converted to \\n, \t to \\t,
7072    etc.  The caller is responsible for releasing the returned
7073    memory.  */
7074
7075 static char *
7076 escape_buffer (const char *buf, int n)
7077 {
7078   struct cleanup *old_chain;
7079   struct ui_file *stb;
7080   char *str;
7081
7082   stb = mem_fileopen ();
7083   old_chain = make_cleanup_ui_file_delete (stb);
7084
7085   fputstrn_unfiltered (buf, n, '\\', stb);
7086   str = ui_file_xstrdup (stb, NULL);
7087   do_cleanups (old_chain);
7088   return str;
7089 }
7090
7091 /* Display a null-terminated packet on stdout, for debugging, using C
7092    string notation.  */
7093
7094 static void
7095 print_packet (char *buf)
7096 {
7097   puts_filtered ("\"");
7098   fputstr_filtered (buf, '"', gdb_stdout);
7099   puts_filtered ("\"");
7100 }
7101
7102 int
7103 putpkt (char *buf)
7104 {
7105   return putpkt_binary (buf, strlen (buf));
7106 }
7107
7108 /* Send a packet to the remote machine, with error checking.  The data
7109    of the packet is in BUF.  The string in BUF can be at most
7110    get_remote_packet_size () - 5 to account for the $, # and checksum,
7111    and for a possible /0 if we are debugging (remote_debug) and want
7112    to print the sent packet as a string.  */
7113
7114 static int
7115 putpkt_binary (char *buf, int cnt)
7116 {
7117   struct remote_state *rs = get_remote_state ();
7118   int i;
7119   unsigned char csum = 0;
7120   char *buf2 = alloca (cnt + 6);
7121
7122   int ch;
7123   int tcount = 0;
7124   char *p;
7125   char *message;
7126
7127   /* Catch cases like trying to read memory or listing threads while
7128      we're waiting for a stop reply.  The remote server wouldn't be
7129      ready to handle this request, so we'd hang and timeout.  We don't
7130      have to worry about this in synchronous mode, because in that
7131      case it's not possible to issue a command while the target is
7132      running.  This is not a problem in non-stop mode, because in that
7133      case, the stub is always ready to process serial input.  */
7134   if (!non_stop && target_can_async_p () && rs->waiting_for_stop_reply)
7135     error (_("Cannot execute this command while the target is running."));
7136
7137   /* We're sending out a new packet.  Make sure we don't look at a
7138      stale cached response.  */
7139   rs->cached_wait_status = 0;
7140
7141   /* Copy the packet into buffer BUF2, encapsulating it
7142      and giving it a checksum.  */
7143
7144   p = buf2;
7145   *p++ = '$';
7146
7147   for (i = 0; i < cnt; i++)
7148     {
7149       csum += buf[i];
7150       *p++ = buf[i];
7151     }
7152   *p++ = '#';
7153   *p++ = tohex ((csum >> 4) & 0xf);
7154   *p++ = tohex (csum & 0xf);
7155
7156   /* Send it over and over until we get a positive ack.  */
7157
7158   while (1)
7159     {
7160       int started_error_output = 0;
7161
7162       if (remote_debug)
7163         {
7164           struct cleanup *old_chain;
7165           char *str;
7166
7167           *p = '\0';
7168           str = escape_buffer (buf2, p - buf2);
7169           old_chain = make_cleanup (xfree, str);
7170           fprintf_unfiltered (gdb_stdlog, "Sending packet: %s...", str);
7171           gdb_flush (gdb_stdlog);
7172           do_cleanups (old_chain);
7173         }
7174       remote_serial_write (buf2, p - buf2);
7175
7176       /* If this is a no acks version of the remote protocol, send the
7177          packet and move on.  */
7178       if (rs->noack_mode)
7179         break;
7180
7181       /* Read until either a timeout occurs (-2) or '+' is read.
7182          Handle any notification that arrives in the mean time.  */
7183       while (1)
7184         {
7185           ch = readchar (remote_timeout);
7186
7187           if (remote_debug)
7188             {
7189               switch (ch)
7190                 {
7191                 case '+':
7192                 case '-':
7193                 case SERIAL_TIMEOUT:
7194                 case '$':
7195                 case '%':
7196                   if (started_error_output)
7197                     {
7198                       putchar_unfiltered ('\n');
7199                       started_error_output = 0;
7200                     }
7201                 }
7202             }
7203
7204           switch (ch)
7205             {
7206             case '+':
7207               if (remote_debug)
7208                 fprintf_unfiltered (gdb_stdlog, "Ack\n");
7209               return 1;
7210             case '-':
7211               if (remote_debug)
7212                 fprintf_unfiltered (gdb_stdlog, "Nak\n");
7213               /* FALLTHROUGH */
7214             case SERIAL_TIMEOUT:
7215               tcount++;
7216               if (tcount > 3)
7217                 return 0;
7218               break;            /* Retransmit buffer.  */
7219             case '$':
7220               {
7221                 if (remote_debug)
7222                   fprintf_unfiltered (gdb_stdlog,
7223                                       "Packet instead of Ack, ignoring it\n");
7224                 /* It's probably an old response sent because an ACK
7225                    was lost.  Gobble up the packet and ack it so it
7226                    doesn't get retransmitted when we resend this
7227                    packet.  */
7228                 skip_frame ();
7229                 remote_serial_write ("+", 1);
7230                 continue;       /* Now, go look for +.  */
7231               }
7232
7233             case '%':
7234               {
7235                 int val;
7236
7237                 /* If we got a notification, handle it, and go back to looking
7238                    for an ack.  */
7239                 /* We've found the start of a notification.  Now
7240                    collect the data.  */
7241                 val = read_frame (&rs->buf, &rs->buf_size);
7242                 if (val >= 0)
7243                   {
7244                     if (remote_debug)
7245                       {
7246                         struct cleanup *old_chain;
7247                         char *str;
7248
7249                         str = escape_buffer (rs->buf, val);
7250                         old_chain = make_cleanup (xfree, str);
7251                         fprintf_unfiltered (gdb_stdlog,
7252                                             "  Notification received: %s\n",
7253                                             str);
7254                         do_cleanups (old_chain);
7255                       }
7256                     handle_notification (rs->notif_state, rs->buf);
7257                     /* We're in sync now, rewait for the ack.  */
7258                     tcount = 0;
7259                   }
7260                 else
7261                   {
7262                     if (remote_debug)
7263                       {
7264                         if (!started_error_output)
7265                           {
7266                             started_error_output = 1;
7267                             fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
7268                           }
7269                         fputc_unfiltered (ch & 0177, gdb_stdlog);
7270                         fprintf_unfiltered (gdb_stdlog, "%s", rs->buf);
7271                       }
7272                   }
7273                 continue;
7274               }
7275               /* fall-through */
7276             default:
7277               if (remote_debug)
7278                 {
7279                   if (!started_error_output)
7280                     {
7281                       started_error_output = 1;
7282                       fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
7283                     }
7284                   fputc_unfiltered (ch & 0177, gdb_stdlog);
7285                 }
7286               continue;
7287             }
7288           break;                /* Here to retransmit.  */
7289         }
7290
7291 #if 0
7292       /* This is wrong.  If doing a long backtrace, the user should be
7293          able to get out next time we call QUIT, without anything as
7294          violent as interrupt_query.  If we want to provide a way out of
7295          here without getting to the next QUIT, it should be based on
7296          hitting ^C twice as in remote_wait.  */
7297       if (quit_flag)
7298         {
7299           quit_flag = 0;
7300           interrupt_query ();
7301         }
7302 #endif
7303     }
7304   return 0;
7305 }
7306
7307 /* Come here after finding the start of a frame when we expected an
7308    ack.  Do our best to discard the rest of this packet.  */
7309
7310 static void
7311 skip_frame (void)
7312 {
7313   int c;
7314
7315   while (1)
7316     {
7317       c = readchar (remote_timeout);
7318       switch (c)
7319         {
7320         case SERIAL_TIMEOUT:
7321           /* Nothing we can do.  */
7322           return;
7323         case '#':
7324           /* Discard the two bytes of checksum and stop.  */
7325           c = readchar (remote_timeout);
7326           if (c >= 0)
7327             c = readchar (remote_timeout);
7328
7329           return;
7330         case '*':               /* Run length encoding.  */
7331           /* Discard the repeat count.  */
7332           c = readchar (remote_timeout);
7333           if (c < 0)
7334             return;
7335           break;
7336         default:
7337           /* A regular character.  */
7338           break;
7339         }
7340     }
7341 }
7342
7343 /* Come here after finding the start of the frame.  Collect the rest
7344    into *BUF, verifying the checksum, length, and handling run-length
7345    compression.  NUL terminate the buffer.  If there is not enough room,
7346    expand *BUF using xrealloc.
7347
7348    Returns -1 on error, number of characters in buffer (ignoring the
7349    trailing NULL) on success. (could be extended to return one of the
7350    SERIAL status indications).  */
7351
7352 static long
7353 read_frame (char **buf_p,
7354             long *sizeof_buf)
7355 {
7356   unsigned char csum;
7357   long bc;
7358   int c;
7359   char *buf = *buf_p;
7360   struct remote_state *rs = get_remote_state ();
7361
7362   csum = 0;
7363   bc = 0;
7364
7365   while (1)
7366     {
7367       c = readchar (remote_timeout);
7368       switch (c)
7369         {
7370         case SERIAL_TIMEOUT:
7371           if (remote_debug)
7372             fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
7373           return -1;
7374         case '$':
7375           if (remote_debug)
7376             fputs_filtered ("Saw new packet start in middle of old one\n",
7377                             gdb_stdlog);
7378           return -1;            /* Start a new packet, count retries.  */
7379         case '#':
7380           {
7381             unsigned char pktcsum;
7382             int check_0 = 0;
7383             int check_1 = 0;
7384
7385             buf[bc] = '\0';
7386
7387             check_0 = readchar (remote_timeout);
7388             if (check_0 >= 0)
7389               check_1 = readchar (remote_timeout);
7390
7391             if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
7392               {
7393                 if (remote_debug)
7394                   fputs_filtered ("Timeout in checksum, retrying\n",
7395                                   gdb_stdlog);
7396                 return -1;
7397               }
7398             else if (check_0 < 0 || check_1 < 0)
7399               {
7400                 if (remote_debug)
7401                   fputs_filtered ("Communication error in checksum\n",
7402                                   gdb_stdlog);
7403                 return -1;
7404               }
7405
7406             /* Don't recompute the checksum; with no ack packets we
7407                don't have any way to indicate a packet retransmission
7408                is necessary.  */
7409             if (rs->noack_mode)
7410               return bc;
7411
7412             pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
7413             if (csum == pktcsum)
7414               return bc;
7415
7416             if (remote_debug)
7417               {
7418                 struct cleanup *old_chain;
7419                 char *str;
7420
7421                 str = escape_buffer (buf, bc);
7422                 old_chain = make_cleanup (xfree, str);
7423                 fprintf_unfiltered (gdb_stdlog,
7424                                     "Bad checksum, sentsum=0x%x, "
7425                                     "csum=0x%x, buf=%s\n",
7426                                     pktcsum, csum, str);
7427                 do_cleanups (old_chain);
7428               }
7429             /* Number of characters in buffer ignoring trailing
7430                NULL.  */
7431             return -1;
7432           }
7433         case '*':               /* Run length encoding.  */
7434           {
7435             int repeat;
7436
7437             csum += c;
7438             c = readchar (remote_timeout);
7439             csum += c;
7440             repeat = c - ' ' + 3;       /* Compute repeat count.  */
7441
7442             /* The character before ``*'' is repeated.  */
7443
7444             if (repeat > 0 && repeat <= 255 && bc > 0)
7445               {
7446                 if (bc + repeat - 1 >= *sizeof_buf - 1)
7447                   {
7448                     /* Make some more room in the buffer.  */
7449                     *sizeof_buf += repeat;
7450                     *buf_p = xrealloc (*buf_p, *sizeof_buf);
7451                     buf = *buf_p;
7452                   }
7453
7454                 memset (&buf[bc], buf[bc - 1], repeat);
7455                 bc += repeat;
7456                 continue;
7457               }
7458
7459             buf[bc] = '\0';
7460             printf_filtered (_("Invalid run length encoding: %s\n"), buf);
7461             return -1;
7462           }
7463         default:
7464           if (bc >= *sizeof_buf - 1)
7465             {
7466               /* Make some more room in the buffer.  */
7467               *sizeof_buf *= 2;
7468               *buf_p = xrealloc (*buf_p, *sizeof_buf);
7469               buf = *buf_p;
7470             }
7471
7472           buf[bc++] = c;
7473           csum += c;
7474           continue;
7475         }
7476     }
7477 }
7478
7479 /* Read a packet from the remote machine, with error checking, and
7480    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
7481    the result, and update *SIZEOF_BUF.  If FOREVER, wait forever
7482    rather than timing out; this is used (in synchronous mode) to wait
7483    for a target that is is executing user code to stop.  */
7484 /* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
7485    don't have to change all the calls to getpkt to deal with the
7486    return value, because at the moment I don't know what the right
7487    thing to do it for those.  */
7488 void
7489 getpkt (char **buf,
7490         long *sizeof_buf,
7491         int forever)
7492 {
7493   int timed_out;
7494
7495   timed_out = getpkt_sane (buf, sizeof_buf, forever);
7496 }
7497
7498
7499 /* Read a packet from the remote machine, with error checking, and
7500    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
7501    the result, and update *SIZEOF_BUF.  If FOREVER, wait forever
7502    rather than timing out; this is used (in synchronous mode) to wait
7503    for a target that is is executing user code to stop.  If FOREVER ==
7504    0, this function is allowed to time out gracefully and return an
7505    indication of this to the caller.  Otherwise return the number of
7506    bytes read.  If EXPECTING_NOTIF, consider receiving a notification
7507    enough reason to return to the caller.  *IS_NOTIF is an output
7508    boolean that indicates whether *BUF holds a notification or not
7509    (a regular packet).  */
7510
7511 static int
7512 getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
7513                         int expecting_notif, int *is_notif)
7514 {
7515   struct remote_state *rs = get_remote_state ();
7516   int c;
7517   int tries;
7518   int timeout;
7519   int val = -1;
7520
7521   /* We're reading a new response.  Make sure we don't look at a
7522      previously cached response.  */
7523   rs->cached_wait_status = 0;
7524
7525   strcpy (*buf, "timeout");
7526
7527   if (forever)
7528     timeout = watchdog > 0 ? watchdog : -1;
7529   else if (expecting_notif)
7530     timeout = 0; /* There should already be a char in the buffer.  If
7531                     not, bail out.  */
7532   else
7533     timeout = remote_timeout;
7534
7535 #define MAX_TRIES 3
7536
7537   /* Process any number of notifications, and then return when
7538      we get a packet.  */
7539   for (;;)
7540     {
7541       /* If we get a timeout or bad checksum, retry up to MAX_TRIES
7542          times.  */
7543       for (tries = 1; tries <= MAX_TRIES; tries++)
7544         {
7545           /* This can loop forever if the remote side sends us
7546              characters continuously, but if it pauses, we'll get
7547              SERIAL_TIMEOUT from readchar because of timeout.  Then
7548              we'll count that as a retry.
7549
7550              Note that even when forever is set, we will only wait
7551              forever prior to the start of a packet.  After that, we
7552              expect characters to arrive at a brisk pace.  They should
7553              show up within remote_timeout intervals.  */
7554           do
7555             c = readchar (timeout);
7556           while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
7557
7558           if (c == SERIAL_TIMEOUT)
7559             {
7560               if (expecting_notif)
7561                 return -1; /* Don't complain, it's normal to not get
7562                               anything in this case.  */
7563
7564               if (forever)      /* Watchdog went off?  Kill the target.  */
7565                 {
7566                   QUIT;
7567                   remote_unpush_target ();
7568                   throw_error (TARGET_CLOSE_ERROR,
7569                                _("Watchdog timeout has expired.  "
7570                                  "Target detached."));
7571                 }
7572               if (remote_debug)
7573                 fputs_filtered ("Timed out.\n", gdb_stdlog);
7574             }
7575           else
7576             {
7577               /* We've found the start of a packet or notification.
7578                  Now collect the data.  */
7579               val = read_frame (buf, sizeof_buf);
7580               if (val >= 0)
7581                 break;
7582             }
7583
7584           remote_serial_write ("-", 1);
7585         }
7586
7587       if (tries > MAX_TRIES)
7588         {
7589           /* We have tried hard enough, and just can't receive the
7590              packet/notification.  Give up.  */
7591           printf_unfiltered (_("Ignoring packet error, continuing...\n"));
7592
7593           /* Skip the ack char if we're in no-ack mode.  */
7594           if (!rs->noack_mode)
7595             remote_serial_write ("+", 1);
7596           return -1;
7597         }
7598
7599       /* If we got an ordinary packet, return that to our caller.  */
7600       if (c == '$')
7601         {
7602           if (remote_debug)
7603             {
7604              struct cleanup *old_chain;
7605              char *str;
7606
7607              str = escape_buffer (*buf, val);
7608              old_chain = make_cleanup (xfree, str);
7609              fprintf_unfiltered (gdb_stdlog, "Packet received: %s\n", str);
7610              do_cleanups (old_chain);
7611             }
7612
7613           /* Skip the ack char if we're in no-ack mode.  */
7614           if (!rs->noack_mode)
7615             remote_serial_write ("+", 1);
7616           if (is_notif != NULL)
7617             *is_notif = 0;
7618           return val;
7619         }
7620
7621        /* If we got a notification, handle it, and go back to looking
7622          for a packet.  */
7623       else
7624         {
7625           gdb_assert (c == '%');
7626
7627           if (remote_debug)
7628             {
7629               struct cleanup *old_chain;
7630               char *str;
7631
7632               str = escape_buffer (*buf, val);
7633               old_chain = make_cleanup (xfree, str);
7634               fprintf_unfiltered (gdb_stdlog,
7635                                   "  Notification received: %s\n",
7636                                   str);
7637               do_cleanups (old_chain);
7638             }
7639           if (is_notif != NULL)
7640             *is_notif = 1;
7641
7642           handle_notification (rs->notif_state, *buf);
7643
7644           /* Notifications require no acknowledgement.  */
7645
7646           if (expecting_notif)
7647             return val;
7648         }
7649     }
7650 }
7651
7652 static int
7653 getpkt_sane (char **buf, long *sizeof_buf, int forever)
7654 {
7655   return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 0, NULL);
7656 }
7657
7658 static int
7659 getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever,
7660                       int *is_notif)
7661 {
7662   return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 1,
7663                                  is_notif);
7664 }
7665
7666 \f
7667 static void
7668 remote_kill (struct target_ops *ops)
7669 {
7670   volatile struct gdb_exception ex;
7671
7672   /* Catch errors so the user can quit from gdb even when we
7673      aren't on speaking terms with the remote system.  */
7674   TRY_CATCH (ex, RETURN_MASK_ERROR)
7675     {
7676       putpkt ("k");
7677     }
7678   if (ex.reason < 0)
7679     {
7680       if (ex.error == TARGET_CLOSE_ERROR)
7681         {
7682           /* If we got an (EOF) error that caused the target
7683              to go away, then we're done, that's what we wanted.
7684              "k" is susceptible to cause a premature EOF, given
7685              that the remote server isn't actually required to
7686              reply to "k", and it can happen that it doesn't
7687              even get to reply ACK to the "k".  */
7688           return;
7689         }
7690
7691         /* Otherwise, something went wrong.  We didn't actually kill
7692            the target.  Just propagate the exception, and let the
7693            user or higher layers decide what to do.  */
7694         throw_exception (ex);
7695     }
7696
7697   /* We've killed the remote end, we get to mourn it.  Since this is
7698      target remote, single-process, mourning the inferior also
7699      unpushes remote_ops.  */
7700   target_mourn_inferior ();
7701 }
7702
7703 static int
7704 remote_vkill (int pid, struct remote_state *rs)
7705 {
7706   if (packet_support (PACKET_vKill) == PACKET_DISABLE)
7707     return -1;
7708
7709   /* Tell the remote target to detach.  */
7710   xsnprintf (rs->buf, get_remote_packet_size (), "vKill;%x", pid);
7711   putpkt (rs->buf);
7712   getpkt (&rs->buf, &rs->buf_size, 0);
7713
7714   switch (packet_ok (rs->buf,
7715                      &remote_protocol_packets[PACKET_vKill]))
7716     {
7717     case PACKET_OK:
7718       return 0;
7719     case PACKET_ERROR:
7720       return 1;
7721     case PACKET_UNKNOWN:
7722       return -1;
7723     default:
7724       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
7725     }
7726 }
7727
7728 static void
7729 extended_remote_kill (struct target_ops *ops)
7730 {
7731   int res;
7732   int pid = ptid_get_pid (inferior_ptid);
7733   struct remote_state *rs = get_remote_state ();
7734
7735   res = remote_vkill (pid, rs);
7736   if (res == -1 && !(rs->extended && remote_multi_process_p (rs)))
7737     {
7738       /* Don't try 'k' on a multi-process aware stub -- it has no way
7739          to specify the pid.  */
7740
7741       putpkt ("k");
7742 #if 0
7743       getpkt (&rs->buf, &rs->buf_size, 0);
7744       if (rs->buf[0] != 'O' || rs->buf[0] != 'K')
7745         res = 1;
7746 #else
7747       /* Don't wait for it to die.  I'm not really sure it matters whether
7748          we do or not.  For the existing stubs, kill is a noop.  */
7749       res = 0;
7750 #endif
7751     }
7752
7753   if (res != 0)
7754     error (_("Can't kill process"));
7755
7756   target_mourn_inferior ();
7757 }
7758
7759 static void
7760 remote_mourn (struct target_ops *ops)
7761 {
7762   remote_mourn_1 (ops);
7763 }
7764
7765 /* Worker function for remote_mourn.  */
7766 static void
7767 remote_mourn_1 (struct target_ops *target)
7768 {
7769   unpush_target (target);
7770
7771   /* remote_close takes care of doing most of the clean up.  */
7772   generic_mourn_inferior ();
7773 }
7774
7775 static void
7776 extended_remote_mourn_1 (struct target_ops *target)
7777 {
7778   struct remote_state *rs = get_remote_state ();
7779
7780   /* In case we got here due to an error, but we're going to stay
7781      connected.  */
7782   rs->waiting_for_stop_reply = 0;
7783
7784   /* If the current general thread belonged to the process we just
7785      detached from or has exited, the remote side current general
7786      thread becomes undefined.  Considering a case like this:
7787
7788      - We just got here due to a detach.
7789      - The process that we're detaching from happens to immediately
7790        report a global breakpoint being hit in non-stop mode, in the
7791        same thread we had selected before.
7792      - GDB attaches to this process again.
7793      - This event happens to be the next event we handle.
7794
7795      GDB would consider that the current general thread didn't need to
7796      be set on the stub side (with Hg), since for all it knew,
7797      GENERAL_THREAD hadn't changed.
7798
7799      Notice that although in all-stop mode, the remote server always
7800      sets the current thread to the thread reporting the stop event,
7801      that doesn't happen in non-stop mode; in non-stop, the stub *must
7802      not* change the current thread when reporting a breakpoint hit,
7803      due to the decoupling of event reporting and event handling.
7804
7805      To keep things simple, we always invalidate our notion of the
7806      current thread.  */
7807   record_currthread (rs, minus_one_ptid);
7808
7809   /* Unlike "target remote", we do not want to unpush the target; then
7810      the next time the user says "run", we won't be connected.  */
7811
7812   /* Call common code to mark the inferior as not running.      */
7813   generic_mourn_inferior ();
7814
7815   if (!have_inferiors ())
7816     {
7817       if (!remote_multi_process_p (rs))
7818         {
7819           /* Check whether the target is running now - some remote stubs
7820              automatically restart after kill.  */
7821           putpkt ("?");
7822           getpkt (&rs->buf, &rs->buf_size, 0);
7823
7824           if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
7825             {
7826               /* Assume that the target has been restarted.  Set
7827                  inferior_ptid so that bits of core GDB realizes
7828                  there's something here, e.g., so that the user can
7829                  say "kill" again.  */
7830               inferior_ptid = magic_null_ptid;
7831             }
7832         }
7833     }
7834 }
7835
7836 static void
7837 extended_remote_mourn (struct target_ops *ops)
7838 {
7839   extended_remote_mourn_1 (ops);
7840 }
7841
7842 static int
7843 extended_remote_supports_disable_randomization (struct target_ops *self)
7844 {
7845   return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
7846 }
7847
7848 static void
7849 extended_remote_disable_randomization (int val)
7850 {
7851   struct remote_state *rs = get_remote_state ();
7852   char *reply;
7853
7854   xsnprintf (rs->buf, get_remote_packet_size (), "QDisableRandomization:%x",
7855              val);
7856   putpkt (rs->buf);
7857   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
7858   if (*reply == '\0')
7859     error (_("Target does not support QDisableRandomization."));
7860   if (strcmp (reply, "OK") != 0)
7861     error (_("Bogus QDisableRandomization reply from target: %s"), reply);
7862 }
7863
7864 static int
7865 extended_remote_run (char *args)
7866 {
7867   struct remote_state *rs = get_remote_state ();
7868   int len;
7869
7870   /* If the user has disabled vRun support, or we have detected that
7871      support is not available, do not try it.  */
7872   if (packet_support (PACKET_vRun) == PACKET_DISABLE)
7873     return -1;
7874
7875   strcpy (rs->buf, "vRun;");
7876   len = strlen (rs->buf);
7877
7878   if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
7879     error (_("Remote file name too long for run packet"));
7880   len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf + len,
7881                       strlen (remote_exec_file));
7882
7883   gdb_assert (args != NULL);
7884   if (*args)
7885     {
7886       struct cleanup *back_to;
7887       int i;
7888       char **argv;
7889
7890       argv = gdb_buildargv (args);
7891       back_to = make_cleanup ((void (*) (void *)) freeargv, argv);
7892       for (i = 0; argv[i] != NULL; i++)
7893         {
7894           if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
7895             error (_("Argument list too long for run packet"));
7896           rs->buf[len++] = ';';
7897           len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf + len,
7898                               strlen (argv[i]));
7899         }
7900       do_cleanups (back_to);
7901     }
7902
7903   rs->buf[len++] = '\0';
7904
7905   putpkt (rs->buf);
7906   getpkt (&rs->buf, &rs->buf_size, 0);
7907
7908   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
7909     {
7910     case PACKET_OK:
7911       /* We have a wait response.  All is well.  */
7912       return 0;
7913     case PACKET_UNKNOWN:
7914       return -1;
7915     case PACKET_ERROR:
7916       if (remote_exec_file[0] == '\0')
7917         error (_("Running the default executable on the remote target failed; "
7918                  "try \"set remote exec-file\"?"));
7919       else
7920         error (_("Running \"%s\" on the remote target failed"),
7921                remote_exec_file);
7922     default:
7923       gdb_assert_not_reached (_("bad switch"));
7924     }
7925 }
7926
7927 /* In the extended protocol we want to be able to do things like
7928    "run" and have them basically work as expected.  So we need
7929    a special create_inferior function.  We support changing the
7930    executable file and the command line arguments, but not the
7931    environment.  */
7932
7933 static void
7934 extended_remote_create_inferior (struct target_ops *ops,
7935                                  char *exec_file, char *args,
7936                                  char **env, int from_tty)
7937 {
7938   int run_worked;
7939   char *stop_reply;
7940   struct remote_state *rs = get_remote_state ();
7941
7942   /* If running asynchronously, register the target file descriptor
7943      with the event loop.  */
7944   if (target_can_async_p ())
7945     target_async (inferior_event_handler, 0);
7946
7947   /* Disable address space randomization if requested (and supported).  */
7948   if (extended_remote_supports_disable_randomization (ops))
7949     extended_remote_disable_randomization (disable_randomization);
7950
7951   /* Now restart the remote server.  */
7952   run_worked = extended_remote_run (args) != -1;
7953   if (!run_worked)
7954     {
7955       /* vRun was not supported.  Fail if we need it to do what the
7956          user requested.  */
7957       if (remote_exec_file[0])
7958         error (_("Remote target does not support \"set remote exec-file\""));
7959       if (args[0])
7960         error (_("Remote target does not support \"set args\" or run <ARGS>"));
7961
7962       /* Fall back to "R".  */
7963       extended_remote_restart ();
7964     }
7965
7966   if (!have_inferiors ())
7967     {
7968       /* Clean up from the last time we ran, before we mark the target
7969          running again.  This will mark breakpoints uninserted, and
7970          get_offsets may insert breakpoints.  */
7971       init_thread_list ();
7972       init_wait_for_inferior ();
7973     }
7974
7975   /* vRun's success return is a stop reply.  */
7976   stop_reply = run_worked ? rs->buf : NULL;
7977   add_current_inferior_and_thread (stop_reply);
7978
7979   /* Get updated offsets, if the stub uses qOffsets.  */
7980   get_offsets ();
7981 }
7982 \f
7983
7984 /* Given a location's target info BP_TGT and the packet buffer BUF,  output
7985    the list of conditions (in agent expression bytecode format), if any, the
7986    target needs to evaluate.  The output is placed into the packet buffer
7987    started from BUF and ended at BUF_END.  */
7988
7989 static int
7990 remote_add_target_side_condition (struct gdbarch *gdbarch,
7991                                   struct bp_target_info *bp_tgt, char *buf,
7992                                   char *buf_end)
7993 {
7994   struct agent_expr *aexpr = NULL;
7995   int i, ix;
7996   char *pkt;
7997   char *buf_start = buf;
7998
7999   if (VEC_empty (agent_expr_p, bp_tgt->conditions))
8000     return 0;
8001
8002   buf += strlen (buf);
8003   xsnprintf (buf, buf_end - buf, "%s", ";");
8004   buf++;
8005
8006   /* Send conditions to the target and free the vector.  */
8007   for (ix = 0;
8008        VEC_iterate (agent_expr_p, bp_tgt->conditions, ix, aexpr);
8009        ix++)
8010     {
8011       xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
8012       buf += strlen (buf);
8013       for (i = 0; i < aexpr->len; ++i)
8014         buf = pack_hex_byte (buf, aexpr->buf[i]);
8015       *buf = '\0';
8016     }
8017   return 0;
8018 }
8019
8020 static void
8021 remote_add_target_side_commands (struct gdbarch *gdbarch,
8022                                  struct bp_target_info *bp_tgt, char *buf)
8023 {
8024   struct agent_expr *aexpr = NULL;
8025   int i, ix;
8026
8027   if (VEC_empty (agent_expr_p, bp_tgt->tcommands))
8028     return;
8029
8030   buf += strlen (buf);
8031
8032   sprintf (buf, ";cmds:%x,", bp_tgt->persist);
8033   buf += strlen (buf);
8034
8035   /* Concatenate all the agent expressions that are commands into the
8036      cmds parameter.  */
8037   for (ix = 0;
8038        VEC_iterate (agent_expr_p, bp_tgt->tcommands, ix, aexpr);
8039        ix++)
8040     {
8041       sprintf (buf, "X%x,", aexpr->len);
8042       buf += strlen (buf);
8043       for (i = 0; i < aexpr->len; ++i)
8044         buf = pack_hex_byte (buf, aexpr->buf[i]);
8045       *buf = '\0';
8046     }
8047 }
8048
8049 /* Insert a breakpoint.  On targets that have software breakpoint
8050    support, we ask the remote target to do the work; on targets
8051    which don't, we insert a traditional memory breakpoint.  */
8052
8053 static int
8054 remote_insert_breakpoint (struct target_ops *ops,
8055                           struct gdbarch *gdbarch,
8056                           struct bp_target_info *bp_tgt)
8057 {
8058   /* Try the "Z" s/w breakpoint packet if it is not already disabled.
8059      If it succeeds, then set the support to PACKET_ENABLE.  If it
8060      fails, and the user has explicitly requested the Z support then
8061      report an error, otherwise, mark it disabled and go on.  */
8062
8063   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
8064     {
8065       CORE_ADDR addr = bp_tgt->placed_address;
8066       struct remote_state *rs;
8067       char *p, *endbuf;
8068       int bpsize;
8069       struct condition_list *cond = NULL;
8070
8071       /* Make sure the remote is pointing at the right process, if
8072          necessary.  */
8073       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
8074         set_general_process ();
8075
8076       gdbarch_remote_breakpoint_from_pc (gdbarch, &addr, &bpsize);
8077
8078       rs = get_remote_state ();
8079       p = rs->buf;
8080       endbuf = rs->buf + get_remote_packet_size ();
8081
8082       *(p++) = 'Z';
8083       *(p++) = '0';
8084       *(p++) = ',';
8085       addr = (ULONGEST) remote_address_masked (addr);
8086       p += hexnumstr (p, addr);
8087       xsnprintf (p, endbuf - p, ",%d", bpsize);
8088
8089       if (remote_supports_cond_breakpoints (ops))
8090         remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
8091
8092       if (remote_can_run_breakpoint_commands (ops))
8093         remote_add_target_side_commands (gdbarch, bp_tgt, p);
8094
8095       putpkt (rs->buf);
8096       getpkt (&rs->buf, &rs->buf_size, 0);
8097
8098       switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
8099         {
8100         case PACKET_ERROR:
8101           return -1;
8102         case PACKET_OK:
8103           bp_tgt->placed_address = addr;
8104           bp_tgt->placed_size = bpsize;
8105           return 0;
8106         case PACKET_UNKNOWN:
8107           break;
8108         }
8109     }
8110
8111   /* If this breakpoint has target-side commands but this stub doesn't
8112      support Z0 packets, throw error.  */
8113   if (!VEC_empty (agent_expr_p, bp_tgt->tcommands))
8114     throw_error (NOT_SUPPORTED_ERROR, _("\
8115 Target doesn't support breakpoints that have target side commands."));
8116
8117   return memory_insert_breakpoint (ops, gdbarch, bp_tgt);
8118 }
8119
8120 static int
8121 remote_remove_breakpoint (struct target_ops *ops,
8122                           struct gdbarch *gdbarch,
8123                           struct bp_target_info *bp_tgt)
8124 {
8125   CORE_ADDR addr = bp_tgt->placed_address;
8126   struct remote_state *rs = get_remote_state ();
8127
8128   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
8129     {
8130       char *p = rs->buf;
8131       char *endbuf = rs->buf + get_remote_packet_size ();
8132
8133       /* Make sure the remote is pointing at the right process, if
8134          necessary.  */
8135       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
8136         set_general_process ();
8137
8138       *(p++) = 'z';
8139       *(p++) = '0';
8140       *(p++) = ',';
8141
8142       addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
8143       p += hexnumstr (p, addr);
8144       xsnprintf (p, endbuf - p, ",%d", bp_tgt->placed_size);
8145
8146       putpkt (rs->buf);
8147       getpkt (&rs->buf, &rs->buf_size, 0);
8148
8149       return (rs->buf[0] == 'E');
8150     }
8151
8152   return memory_remove_breakpoint (ops, gdbarch, bp_tgt);
8153 }
8154
8155 static int
8156 watchpoint_to_Z_packet (int type)
8157 {
8158   switch (type)
8159     {
8160     case hw_write:
8161       return Z_PACKET_WRITE_WP;
8162       break;
8163     case hw_read:
8164       return Z_PACKET_READ_WP;
8165       break;
8166     case hw_access:
8167       return Z_PACKET_ACCESS_WP;
8168       break;
8169     default:
8170       internal_error (__FILE__, __LINE__,
8171                       _("hw_bp_to_z: bad watchpoint type %d"), type);
8172     }
8173 }
8174
8175 static int
8176 remote_insert_watchpoint (struct target_ops *self,
8177                           CORE_ADDR addr, int len, int type,
8178                           struct expression *cond)
8179 {
8180   struct remote_state *rs = get_remote_state ();
8181   char *endbuf = rs->buf + get_remote_packet_size ();
8182   char *p;
8183   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
8184
8185   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
8186     return 1;
8187
8188   /* Make sure the remote is pointing at the right process, if
8189      necessary.  */
8190   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
8191     set_general_process ();
8192
8193   xsnprintf (rs->buf, endbuf - rs->buf, "Z%x,", packet);
8194   p = strchr (rs->buf, '\0');
8195   addr = remote_address_masked (addr);
8196   p += hexnumstr (p, (ULONGEST) addr);
8197   xsnprintf (p, endbuf - p, ",%x", len);
8198
8199   putpkt (rs->buf);
8200   getpkt (&rs->buf, &rs->buf_size, 0);
8201
8202   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
8203     {
8204     case PACKET_ERROR:
8205       return -1;
8206     case PACKET_UNKNOWN:
8207       return 1;
8208     case PACKET_OK:
8209       return 0;
8210     }
8211   internal_error (__FILE__, __LINE__,
8212                   _("remote_insert_watchpoint: reached end of function"));
8213 }
8214
8215 static int
8216 remote_watchpoint_addr_within_range (struct target_ops *target, CORE_ADDR addr,
8217                                      CORE_ADDR start, int length)
8218 {
8219   CORE_ADDR diff = remote_address_masked (addr - start);
8220
8221   return diff < length;
8222 }
8223
8224
8225 static int
8226 remote_remove_watchpoint (struct target_ops *self,
8227                           CORE_ADDR addr, int len, int type,
8228                           struct expression *cond)
8229 {
8230   struct remote_state *rs = get_remote_state ();
8231   char *endbuf = rs->buf + get_remote_packet_size ();
8232   char *p;
8233   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
8234
8235   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
8236     return -1;
8237
8238   /* Make sure the remote is pointing at the right process, if
8239      necessary.  */
8240   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
8241     set_general_process ();
8242
8243   xsnprintf (rs->buf, endbuf - rs->buf, "z%x,", packet);
8244   p = strchr (rs->buf, '\0');
8245   addr = remote_address_masked (addr);
8246   p += hexnumstr (p, (ULONGEST) addr);
8247   xsnprintf (p, endbuf - p, ",%x", len);
8248   putpkt (rs->buf);
8249   getpkt (&rs->buf, &rs->buf_size, 0);
8250
8251   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
8252     {
8253     case PACKET_ERROR:
8254     case PACKET_UNKNOWN:
8255       return -1;
8256     case PACKET_OK:
8257       return 0;
8258     }
8259   internal_error (__FILE__, __LINE__,
8260                   _("remote_remove_watchpoint: reached end of function"));
8261 }
8262
8263
8264 int remote_hw_watchpoint_limit = -1;
8265 int remote_hw_watchpoint_length_limit = -1;
8266 int remote_hw_breakpoint_limit = -1;
8267
8268 static int
8269 remote_region_ok_for_hw_watchpoint (struct target_ops *self,
8270                                     CORE_ADDR addr, int len)
8271 {
8272   if (remote_hw_watchpoint_length_limit == 0)
8273     return 0;
8274   else if (remote_hw_watchpoint_length_limit < 0)
8275     return 1;
8276   else if (len <= remote_hw_watchpoint_length_limit)
8277     return 1;
8278   else
8279     return 0;
8280 }
8281
8282 static int
8283 remote_check_watch_resources (struct target_ops *self,
8284                               int type, int cnt, int ot)
8285 {
8286   if (type == bp_hardware_breakpoint)
8287     {
8288       if (remote_hw_breakpoint_limit == 0)
8289         return 0;
8290       else if (remote_hw_breakpoint_limit < 0)
8291         return 1;
8292       else if (cnt <= remote_hw_breakpoint_limit)
8293         return 1;
8294     }
8295   else
8296     {
8297       if (remote_hw_watchpoint_limit == 0)
8298         return 0;
8299       else if (remote_hw_watchpoint_limit < 0)
8300         return 1;
8301       else if (ot)
8302         return -1;
8303       else if (cnt <= remote_hw_watchpoint_limit)
8304         return 1;
8305     }
8306   return -1;
8307 }
8308
8309 static int
8310 remote_stopped_by_watchpoint (struct target_ops *ops)
8311 {
8312   struct remote_state *rs = get_remote_state ();
8313
8314   return rs->remote_stopped_by_watchpoint_p;
8315 }
8316
8317 static int
8318 remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
8319 {
8320   struct remote_state *rs = get_remote_state ();
8321   int rc = 0;
8322
8323   if (remote_stopped_by_watchpoint (target))
8324     {
8325       *addr_p = rs->remote_watch_data_address;
8326       rc = 1;
8327     }
8328
8329   return rc;
8330 }
8331
8332
8333 static int
8334 remote_insert_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
8335                              struct bp_target_info *bp_tgt)
8336 {
8337   CORE_ADDR addr;
8338   struct remote_state *rs;
8339   char *p, *endbuf;
8340   char *message;
8341
8342   /* The length field should be set to the size of a breakpoint
8343      instruction, even though we aren't inserting one ourselves.  */
8344
8345   gdbarch_remote_breakpoint_from_pc
8346     (gdbarch, &bp_tgt->placed_address, &bp_tgt->placed_size);
8347
8348   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
8349     return -1;
8350
8351   /* Make sure the remote is pointing at the right process, if
8352      necessary.  */
8353   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
8354     set_general_process ();
8355
8356   rs = get_remote_state ();
8357   p = rs->buf;
8358   endbuf = rs->buf + get_remote_packet_size ();
8359
8360   *(p++) = 'Z';
8361   *(p++) = '1';
8362   *(p++) = ',';
8363
8364   addr = remote_address_masked (bp_tgt->placed_address);
8365   p += hexnumstr (p, (ULONGEST) addr);
8366   xsnprintf (p, endbuf - p, ",%x", bp_tgt->placed_size);
8367
8368   if (remote_supports_cond_breakpoints (self))
8369     remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
8370
8371   if (remote_can_run_breakpoint_commands (self))
8372     remote_add_target_side_commands (gdbarch, bp_tgt, p);
8373
8374   putpkt (rs->buf);
8375   getpkt (&rs->buf, &rs->buf_size, 0);
8376
8377   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
8378     {
8379     case PACKET_ERROR:
8380       if (rs->buf[1] == '.')
8381         {
8382           message = strchr (rs->buf + 2, '.');
8383           if (message)
8384             error (_("Remote failure reply: %s"), message + 1);
8385         }
8386       return -1;
8387     case PACKET_UNKNOWN:
8388       return -1;
8389     case PACKET_OK:
8390       return 0;
8391     }
8392   internal_error (__FILE__, __LINE__,
8393                   _("remote_insert_hw_breakpoint: reached end of function"));
8394 }
8395
8396
8397 static int
8398 remote_remove_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
8399                              struct bp_target_info *bp_tgt)
8400 {
8401   CORE_ADDR addr;
8402   struct remote_state *rs = get_remote_state ();
8403   char *p = rs->buf;
8404   char *endbuf = rs->buf + get_remote_packet_size ();
8405
8406   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
8407     return -1;
8408
8409   /* Make sure the remote is pointing at the right process, if
8410      necessary.  */
8411   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
8412     set_general_process ();
8413
8414   *(p++) = 'z';
8415   *(p++) = '1';
8416   *(p++) = ',';
8417
8418   addr = remote_address_masked (bp_tgt->placed_address);
8419   p += hexnumstr (p, (ULONGEST) addr);
8420   xsnprintf (p, endbuf  - p, ",%x", bp_tgt->placed_size);
8421
8422   putpkt (rs->buf);
8423   getpkt (&rs->buf, &rs->buf_size, 0);
8424
8425   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
8426     {
8427     case PACKET_ERROR:
8428     case PACKET_UNKNOWN:
8429       return -1;
8430     case PACKET_OK:
8431       return 0;
8432     }
8433   internal_error (__FILE__, __LINE__,
8434                   _("remote_remove_hw_breakpoint: reached end of function"));
8435 }
8436
8437 /* Verify memory using the "qCRC:" request.  */
8438
8439 static int
8440 remote_verify_memory (struct target_ops *ops,
8441                       const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
8442 {
8443   struct remote_state *rs = get_remote_state ();
8444   unsigned long host_crc, target_crc;
8445   char *tmp;
8446
8447   /* It doesn't make sense to use qCRC if the remote target is
8448      connected but not running.  */
8449   if (target_has_execution && packet_support (PACKET_qCRC) != PACKET_DISABLE)
8450     {
8451       enum packet_result result;
8452
8453       /* Make sure the remote is pointing at the right process.  */
8454       set_general_process ();
8455
8456       /* FIXME: assumes lma can fit into long.  */
8457       xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
8458                  (long) lma, (long) size);
8459       putpkt (rs->buf);
8460
8461       /* Be clever; compute the host_crc before waiting for target
8462          reply.  */
8463       host_crc = xcrc32 (data, size, 0xffffffff);
8464
8465       getpkt (&rs->buf, &rs->buf_size, 0);
8466
8467       result = packet_ok (rs->buf,
8468                           &remote_protocol_packets[PACKET_qCRC]);
8469       if (result == PACKET_ERROR)
8470         return -1;
8471       else if (result == PACKET_OK)
8472         {
8473           for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
8474             target_crc = target_crc * 16 + fromhex (*tmp);
8475
8476           return (host_crc == target_crc);
8477         }
8478     }
8479
8480   return simple_verify_memory (ops, data, lma, size);
8481 }
8482
8483 /* compare-sections command
8484
8485    With no arguments, compares each loadable section in the exec bfd
8486    with the same memory range on the target, and reports mismatches.
8487    Useful for verifying the image on the target against the exec file.  */
8488
8489 static void
8490 compare_sections_command (char *args, int from_tty)
8491 {
8492   asection *s;
8493   struct cleanup *old_chain;
8494   gdb_byte *sectdata;
8495   const char *sectname;
8496   bfd_size_type size;
8497   bfd_vma lma;
8498   int matched = 0;
8499   int mismatched = 0;
8500   int res;
8501   int read_only = 0;
8502
8503   if (!exec_bfd)
8504     error (_("command cannot be used without an exec file"));
8505
8506   /* Make sure the remote is pointing at the right process.  */
8507   set_general_process ();
8508
8509   if (args != NULL && strcmp (args, "-r") == 0)
8510     {
8511       read_only = 1;
8512       args = NULL;
8513     }
8514
8515   for (s = exec_bfd->sections; s; s = s->next)
8516     {
8517       if (!(s->flags & SEC_LOAD))
8518         continue;               /* Skip non-loadable section.  */
8519
8520       if (read_only && (s->flags & SEC_READONLY) == 0)
8521         continue;               /* Skip writeable sections */
8522
8523       size = bfd_get_section_size (s);
8524       if (size == 0)
8525         continue;               /* Skip zero-length section.  */
8526
8527       sectname = bfd_get_section_name (exec_bfd, s);
8528       if (args && strcmp (args, sectname) != 0)
8529         continue;               /* Not the section selected by user.  */
8530
8531       matched = 1;              /* Do this section.  */
8532       lma = s->lma;
8533
8534       sectdata = xmalloc (size);
8535       old_chain = make_cleanup (xfree, sectdata);
8536       bfd_get_section_contents (exec_bfd, s, sectdata, 0, size);
8537
8538       res = target_verify_memory (sectdata, lma, size);
8539
8540       if (res == -1)
8541         error (_("target memory fault, section %s, range %s -- %s"), sectname,
8542                paddress (target_gdbarch (), lma),
8543                paddress (target_gdbarch (), lma + size));
8544
8545       printf_filtered ("Section %s, range %s -- %s: ", sectname,
8546                        paddress (target_gdbarch (), lma),
8547                        paddress (target_gdbarch (), lma + size));
8548       if (res)
8549         printf_filtered ("matched.\n");
8550       else
8551         {
8552           printf_filtered ("MIS-MATCHED!\n");
8553           mismatched++;
8554         }
8555
8556       do_cleanups (old_chain);
8557     }
8558   if (mismatched > 0)
8559     warning (_("One or more sections of the target image does not match\n\
8560 the loaded file\n"));
8561   if (args && !matched)
8562     printf_filtered (_("No loaded section named '%s'.\n"), args);
8563 }
8564
8565 /* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
8566    into remote target.  The number of bytes written to the remote
8567    target is returned, or -1 for error.  */
8568
8569 static enum target_xfer_status
8570 remote_write_qxfer (struct target_ops *ops, const char *object_name,
8571                     const char *annex, const gdb_byte *writebuf, 
8572                     ULONGEST offset, LONGEST len, ULONGEST *xfered_len,
8573                     struct packet_config *packet)
8574 {
8575   int i, buf_len;
8576   ULONGEST n;
8577   struct remote_state *rs = get_remote_state ();
8578   int max_size = get_memory_write_packet_size (); 
8579
8580   if (packet->support == PACKET_DISABLE)
8581     return TARGET_XFER_E_IO;
8582
8583   /* Insert header.  */
8584   i = snprintf (rs->buf, max_size, 
8585                 "qXfer:%s:write:%s:%s:",
8586                 object_name, annex ? annex : "",
8587                 phex_nz (offset, sizeof offset));
8588   max_size -= (i + 1);
8589
8590   /* Escape as much data as fits into rs->buf.  */
8591   buf_len = remote_escape_output 
8592     (writebuf, len, (gdb_byte *) rs->buf + i, &max_size, max_size);
8593
8594   if (putpkt_binary (rs->buf, i + buf_len) < 0
8595       || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
8596       || packet_ok (rs->buf, packet) != PACKET_OK)
8597     return TARGET_XFER_E_IO;
8598
8599   unpack_varlen_hex (rs->buf, &n);
8600
8601   *xfered_len = n;
8602   return TARGET_XFER_OK;
8603 }
8604
8605 /* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
8606    Data at OFFSET, of up to LEN bytes, is read into READBUF; the
8607    number of bytes read is returned, or 0 for EOF, or -1 for error.
8608    The number of bytes read may be less than LEN without indicating an
8609    EOF.  PACKET is checked and updated to indicate whether the remote
8610    target supports this object.  */
8611
8612 static enum target_xfer_status
8613 remote_read_qxfer (struct target_ops *ops, const char *object_name,
8614                    const char *annex,
8615                    gdb_byte *readbuf, ULONGEST offset, LONGEST len,
8616                    ULONGEST *xfered_len,
8617                    struct packet_config *packet)
8618 {
8619   struct remote_state *rs = get_remote_state ();
8620   LONGEST i, n, packet_len;
8621
8622   if (packet->support == PACKET_DISABLE)
8623     return TARGET_XFER_E_IO;
8624
8625   /* Check whether we've cached an end-of-object packet that matches
8626      this request.  */
8627   if (rs->finished_object)
8628     {
8629       if (strcmp (object_name, rs->finished_object) == 0
8630           && strcmp (annex ? annex : "", rs->finished_annex) == 0
8631           && offset == rs->finished_offset)
8632         return TARGET_XFER_EOF;
8633
8634
8635       /* Otherwise, we're now reading something different.  Discard
8636          the cache.  */
8637       xfree (rs->finished_object);
8638       xfree (rs->finished_annex);
8639       rs->finished_object = NULL;
8640       rs->finished_annex = NULL;
8641     }
8642
8643   /* Request only enough to fit in a single packet.  The actual data
8644      may not, since we don't know how much of it will need to be escaped;
8645      the target is free to respond with slightly less data.  We subtract
8646      five to account for the response type and the protocol frame.  */
8647   n = min (get_remote_packet_size () - 5, len);
8648   snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
8649             object_name, annex ? annex : "",
8650             phex_nz (offset, sizeof offset),
8651             phex_nz (n, sizeof n));
8652   i = putpkt (rs->buf);
8653   if (i < 0)
8654     return TARGET_XFER_E_IO;
8655
8656   rs->buf[0] = '\0';
8657   packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
8658   if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
8659     return TARGET_XFER_E_IO;
8660
8661   if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
8662     error (_("Unknown remote qXfer reply: %s"), rs->buf);
8663
8664   /* 'm' means there is (or at least might be) more data after this
8665      batch.  That does not make sense unless there's at least one byte
8666      of data in this reply.  */
8667   if (rs->buf[0] == 'm' && packet_len == 1)
8668     error (_("Remote qXfer reply contained no data."));
8669
8670   /* Got some data.  */
8671   i = remote_unescape_input ((gdb_byte *) rs->buf + 1,
8672                              packet_len - 1, readbuf, n);
8673
8674   /* 'l' is an EOF marker, possibly including a final block of data,
8675      or possibly empty.  If we have the final block of a non-empty
8676      object, record this fact to bypass a subsequent partial read.  */
8677   if (rs->buf[0] == 'l' && offset + i > 0)
8678     {
8679       rs->finished_object = xstrdup (object_name);
8680       rs->finished_annex = xstrdup (annex ? annex : "");
8681       rs->finished_offset = offset + i;
8682     }
8683
8684   if (i == 0)
8685     return TARGET_XFER_EOF;
8686   else
8687     {
8688       *xfered_len = i;
8689       return TARGET_XFER_OK;
8690     }
8691 }
8692
8693 static enum target_xfer_status
8694 remote_xfer_partial (struct target_ops *ops, enum target_object object,
8695                      const char *annex, gdb_byte *readbuf,
8696                      const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
8697                      ULONGEST *xfered_len)
8698 {
8699   struct remote_state *rs;
8700   int i;
8701   char *p2;
8702   char query_type;
8703
8704   set_remote_traceframe ();
8705   set_general_thread (inferior_ptid);
8706
8707   rs = get_remote_state ();
8708
8709   /* Handle memory using the standard memory routines.  */
8710   if (object == TARGET_OBJECT_MEMORY)
8711     {
8712       /* If the remote target is connected but not running, we should
8713          pass this request down to a lower stratum (e.g. the executable
8714          file).  */
8715       if (!target_has_execution)
8716         return TARGET_XFER_EOF;
8717
8718       if (writebuf != NULL)
8719         return remote_write_bytes (offset, writebuf, len, xfered_len);
8720       else
8721         return remote_read_bytes (ops, offset, readbuf, len, xfered_len);
8722     }
8723
8724   /* Handle SPU memory using qxfer packets.  */
8725   if (object == TARGET_OBJECT_SPU)
8726     {
8727       if (readbuf)
8728         return remote_read_qxfer (ops, "spu", annex, readbuf, offset, len,
8729                                   xfered_len, &remote_protocol_packets
8730                                   [PACKET_qXfer_spu_read]);
8731       else
8732         return remote_write_qxfer (ops, "spu", annex, writebuf, offset, len,
8733                                    xfered_len, &remote_protocol_packets
8734                                    [PACKET_qXfer_spu_write]);
8735     }
8736
8737   /* Handle extra signal info using qxfer packets.  */
8738   if (object == TARGET_OBJECT_SIGNAL_INFO)
8739     {
8740       if (readbuf)
8741         return remote_read_qxfer (ops, "siginfo", annex, readbuf, offset, len,
8742                                   xfered_len, &remote_protocol_packets
8743                                   [PACKET_qXfer_siginfo_read]);
8744       else
8745         return remote_write_qxfer (ops, "siginfo", annex,
8746                                    writebuf, offset, len, xfered_len,
8747                                    &remote_protocol_packets
8748                                    [PACKET_qXfer_siginfo_write]);
8749     }
8750
8751   if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
8752     {
8753       if (readbuf)
8754         return remote_read_qxfer (ops, "statictrace", annex,
8755                                   readbuf, offset, len, xfered_len,
8756                                   &remote_protocol_packets
8757                                   [PACKET_qXfer_statictrace_read]);
8758       else
8759         return TARGET_XFER_E_IO;
8760     }
8761
8762   /* Only handle flash writes.  */
8763   if (writebuf != NULL)
8764     {
8765       LONGEST xfered;
8766
8767       switch (object)
8768         {
8769         case TARGET_OBJECT_FLASH:
8770           return remote_flash_write (ops, offset, len, xfered_len,
8771                                      writebuf);
8772
8773         default:
8774           return TARGET_XFER_E_IO;
8775         }
8776     }
8777
8778   /* Map pre-existing objects onto letters.  DO NOT do this for new
8779      objects!!!  Instead specify new query packets.  */
8780   switch (object)
8781     {
8782     case TARGET_OBJECT_AVR:
8783       query_type = 'R';
8784       break;
8785
8786     case TARGET_OBJECT_AUXV:
8787       gdb_assert (annex == NULL);
8788       return remote_read_qxfer (ops, "auxv", annex, readbuf, offset, len,
8789                                 xfered_len,
8790                                 &remote_protocol_packets[PACKET_qXfer_auxv]);
8791
8792     case TARGET_OBJECT_AVAILABLE_FEATURES:
8793       return remote_read_qxfer
8794         (ops, "features", annex, readbuf, offset, len, xfered_len,
8795          &remote_protocol_packets[PACKET_qXfer_features]);
8796
8797     case TARGET_OBJECT_LIBRARIES:
8798       return remote_read_qxfer
8799         (ops, "libraries", annex, readbuf, offset, len, xfered_len,
8800          &remote_protocol_packets[PACKET_qXfer_libraries]);
8801
8802     case TARGET_OBJECT_LIBRARIES_SVR4:
8803       return remote_read_qxfer
8804         (ops, "libraries-svr4", annex, readbuf, offset, len, xfered_len,
8805          &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
8806
8807     case TARGET_OBJECT_MEMORY_MAP:
8808       gdb_assert (annex == NULL);
8809       return remote_read_qxfer (ops, "memory-map", annex, readbuf, offset, len,
8810                                  xfered_len,
8811                                 &remote_protocol_packets[PACKET_qXfer_memory_map]);
8812
8813     case TARGET_OBJECT_OSDATA:
8814       /* Should only get here if we're connected.  */
8815       gdb_assert (rs->remote_desc);
8816       return remote_read_qxfer
8817         (ops, "osdata", annex, readbuf, offset, len, xfered_len,
8818         &remote_protocol_packets[PACKET_qXfer_osdata]);
8819
8820     case TARGET_OBJECT_THREADS:
8821       gdb_assert (annex == NULL);
8822       return remote_read_qxfer (ops, "threads", annex, readbuf, offset, len,
8823                                 xfered_len,
8824                                 &remote_protocol_packets[PACKET_qXfer_threads]);
8825
8826     case TARGET_OBJECT_TRACEFRAME_INFO:
8827       gdb_assert (annex == NULL);
8828       return remote_read_qxfer
8829         (ops, "traceframe-info", annex, readbuf, offset, len, xfered_len,
8830          &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
8831
8832     case TARGET_OBJECT_FDPIC:
8833       return remote_read_qxfer (ops, "fdpic", annex, readbuf, offset, len,
8834                                 xfered_len,
8835                                 &remote_protocol_packets[PACKET_qXfer_fdpic]);
8836
8837     case TARGET_OBJECT_OPENVMS_UIB:
8838       return remote_read_qxfer (ops, "uib", annex, readbuf, offset, len,
8839                                 xfered_len,
8840                                 &remote_protocol_packets[PACKET_qXfer_uib]);
8841
8842     case TARGET_OBJECT_BTRACE:
8843       return remote_read_qxfer (ops, "btrace", annex, readbuf, offset, len,
8844                                 xfered_len,
8845         &remote_protocol_packets[PACKET_qXfer_btrace]);
8846
8847     default:
8848       return TARGET_XFER_E_IO;
8849     }
8850
8851   /* Note: a zero OFFSET and LEN can be used to query the minimum
8852      buffer size.  */
8853   if (offset == 0 && len == 0)
8854     return (get_remote_packet_size ());
8855   /* Minimum outbuf size is get_remote_packet_size ().  If LEN is not
8856      large enough let the caller deal with it.  */
8857   if (len < get_remote_packet_size ())
8858     return TARGET_XFER_E_IO;
8859   len = get_remote_packet_size ();
8860
8861   /* Except for querying the minimum buffer size, target must be open.  */
8862   if (!rs->remote_desc)
8863     error (_("remote query is only available after target open"));
8864
8865   gdb_assert (annex != NULL);
8866   gdb_assert (readbuf != NULL);
8867
8868   p2 = rs->buf;
8869   *p2++ = 'q';
8870   *p2++ = query_type;
8871
8872   /* We used one buffer char for the remote protocol q command and
8873      another for the query type.  As the remote protocol encapsulation
8874      uses 4 chars plus one extra in case we are debugging
8875      (remote_debug), we have PBUFZIZ - 7 left to pack the query
8876      string.  */
8877   i = 0;
8878   while (annex[i] && (i < (get_remote_packet_size () - 8)))
8879     {
8880       /* Bad caller may have sent forbidden characters.  */
8881       gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
8882       *p2++ = annex[i];
8883       i++;
8884     }
8885   *p2 = '\0';
8886   gdb_assert (annex[i] == '\0');
8887
8888   i = putpkt (rs->buf);
8889   if (i < 0)
8890     return TARGET_XFER_E_IO;
8891
8892   getpkt (&rs->buf, &rs->buf_size, 0);
8893   strcpy ((char *) readbuf, rs->buf);
8894
8895   *xfered_len = strlen ((char *) readbuf);
8896   return TARGET_XFER_OK;
8897 }
8898
8899 static int
8900 remote_search_memory (struct target_ops* ops,
8901                       CORE_ADDR start_addr, ULONGEST search_space_len,
8902                       const gdb_byte *pattern, ULONGEST pattern_len,
8903                       CORE_ADDR *found_addrp)
8904 {
8905   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
8906   struct remote_state *rs = get_remote_state ();
8907   int max_size = get_memory_write_packet_size ();
8908   struct packet_config *packet =
8909     &remote_protocol_packets[PACKET_qSearch_memory];
8910   /* Number of packet bytes used to encode the pattern;
8911      this could be more than PATTERN_LEN due to escape characters.  */
8912   int escaped_pattern_len;
8913   /* Amount of pattern that was encodable in the packet.  */
8914   int used_pattern_len;
8915   int i;
8916   int found;
8917   ULONGEST found_addr;
8918
8919   /* Don't go to the target if we don't have to.
8920      This is done before checking packet->support to avoid the possibility that
8921      a success for this edge case means the facility works in general.  */
8922   if (pattern_len > search_space_len)
8923     return 0;
8924   if (pattern_len == 0)
8925     {
8926       *found_addrp = start_addr;
8927       return 1;
8928     }
8929
8930   /* If we already know the packet isn't supported, fall back to the simple
8931      way of searching memory.  */
8932
8933   if (packet_config_support (packet) == PACKET_DISABLE)
8934     {
8935       /* Target doesn't provided special support, fall back and use the
8936          standard support (copy memory and do the search here).  */
8937       return simple_search_memory (ops, start_addr, search_space_len,
8938                                    pattern, pattern_len, found_addrp);
8939     }
8940
8941   /* Make sure the remote is pointing at the right process.  */
8942   set_general_process ();
8943
8944   /* Insert header.  */
8945   i = snprintf (rs->buf, max_size, 
8946                 "qSearch:memory:%s;%s;",
8947                 phex_nz (start_addr, addr_size),
8948                 phex_nz (search_space_len, sizeof (search_space_len)));
8949   max_size -= (i + 1);
8950
8951   /* Escape as much data as fits into rs->buf.  */
8952   escaped_pattern_len =
8953     remote_escape_output (pattern, pattern_len, (gdb_byte *) rs->buf + i,
8954                           &used_pattern_len, max_size);
8955
8956   /* Bail if the pattern is too large.  */
8957   if (used_pattern_len != pattern_len)
8958     error (_("Pattern is too large to transmit to remote target."));
8959
8960   if (putpkt_binary (rs->buf, i + escaped_pattern_len) < 0
8961       || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
8962       || packet_ok (rs->buf, packet) != PACKET_OK)
8963     {
8964       /* The request may not have worked because the command is not
8965          supported.  If so, fall back to the simple way.  */
8966       if (packet->support == PACKET_DISABLE)
8967         {
8968           return simple_search_memory (ops, start_addr, search_space_len,
8969                                        pattern, pattern_len, found_addrp);
8970         }
8971       return -1;
8972     }
8973
8974   if (rs->buf[0] == '0')
8975     found = 0;
8976   else if (rs->buf[0] == '1')
8977     {
8978       found = 1;
8979       if (rs->buf[1] != ',')
8980         error (_("Unknown qSearch:memory reply: %s"), rs->buf);
8981       unpack_varlen_hex (rs->buf + 2, &found_addr);
8982       *found_addrp = found_addr;
8983     }
8984   else
8985     error (_("Unknown qSearch:memory reply: %s"), rs->buf);
8986
8987   return found;
8988 }
8989
8990 static void
8991 remote_rcmd (struct target_ops *self, const char *command,
8992              struct ui_file *outbuf)
8993 {
8994   struct remote_state *rs = get_remote_state ();
8995   char *p = rs->buf;
8996
8997   if (!rs->remote_desc)
8998     error (_("remote rcmd is only available after target open"));
8999
9000   /* Send a NULL command across as an empty command.  */
9001   if (command == NULL)
9002     command = "";
9003
9004   /* The query prefix.  */
9005   strcpy (rs->buf, "qRcmd,");
9006   p = strchr (rs->buf, '\0');
9007
9008   if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/)
9009       > get_remote_packet_size ())
9010     error (_("\"monitor\" command ``%s'' is too long."), command);
9011
9012   /* Encode the actual command.  */
9013   bin2hex ((const gdb_byte *) command, p, strlen (command));
9014
9015   if (putpkt (rs->buf) < 0)
9016     error (_("Communication problem with target."));
9017
9018   /* get/display the response */
9019   while (1)
9020     {
9021       char *buf;
9022
9023       /* XXX - see also remote_get_noisy_reply().  */
9024       QUIT;                     /* Allow user to bail out with ^C.  */
9025       rs->buf[0] = '\0';
9026       if (getpkt_sane (&rs->buf, &rs->buf_size, 0) == -1)
9027         { 
9028           /* Timeout.  Continue to (try to) read responses.
9029              This is better than stopping with an error, assuming the stub
9030              is still executing the (long) monitor command.
9031              If needed, the user can interrupt gdb using C-c, obtaining
9032              an effect similar to stop on timeout.  */
9033           continue;
9034         }
9035       buf = rs->buf;
9036       if (buf[0] == '\0')
9037         error (_("Target does not support this command."));
9038       if (buf[0] == 'O' && buf[1] != 'K')
9039         {
9040           remote_console_output (buf + 1); /* 'O' message from stub.  */
9041           continue;
9042         }
9043       if (strcmp (buf, "OK") == 0)
9044         break;
9045       if (strlen (buf) == 3 && buf[0] == 'E'
9046           && isdigit (buf[1]) && isdigit (buf[2]))
9047         {
9048           error (_("Protocol error with Rcmd"));
9049         }
9050       for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
9051         {
9052           char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
9053
9054           fputc_unfiltered (c, outbuf);
9055         }
9056       break;
9057     }
9058 }
9059
9060 static VEC(mem_region_s) *
9061 remote_memory_map (struct target_ops *ops)
9062 {
9063   VEC(mem_region_s) *result = NULL;
9064   char *text = target_read_stralloc (&current_target,
9065                                      TARGET_OBJECT_MEMORY_MAP, NULL);
9066
9067   if (text)
9068     {
9069       struct cleanup *back_to = make_cleanup (xfree, text);
9070
9071       result = parse_memory_map (text);
9072       do_cleanups (back_to);
9073     }
9074
9075   return result;
9076 }
9077
9078 static void
9079 packet_command (char *args, int from_tty)
9080 {
9081   struct remote_state *rs = get_remote_state ();
9082
9083   if (!rs->remote_desc)
9084     error (_("command can only be used with remote target"));
9085
9086   if (!args)
9087     error (_("remote-packet command requires packet text as argument"));
9088
9089   puts_filtered ("sending: ");
9090   print_packet (args);
9091   puts_filtered ("\n");
9092   putpkt (args);
9093
9094   getpkt (&rs->buf, &rs->buf_size, 0);
9095   puts_filtered ("received: ");
9096   print_packet (rs->buf);
9097   puts_filtered ("\n");
9098 }
9099
9100 #if 0
9101 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
9102
9103 static void display_thread_info (struct gdb_ext_thread_info *info);
9104
9105 static void threadset_test_cmd (char *cmd, int tty);
9106
9107 static void threadalive_test (char *cmd, int tty);
9108
9109 static void threadlist_test_cmd (char *cmd, int tty);
9110
9111 int get_and_display_threadinfo (threadref *ref);
9112
9113 static void threadinfo_test_cmd (char *cmd, int tty);
9114
9115 static int thread_display_step (threadref *ref, void *context);
9116
9117 static void threadlist_update_test_cmd (char *cmd, int tty);
9118
9119 static void init_remote_threadtests (void);
9120
9121 #define SAMPLE_THREAD  0x05060708       /* Truncated 64 bit threadid.  */
9122
9123 static void
9124 threadset_test_cmd (char *cmd, int tty)
9125 {
9126   int sample_thread = SAMPLE_THREAD;
9127
9128   printf_filtered (_("Remote threadset test\n"));
9129   set_general_thread (sample_thread);
9130 }
9131
9132
9133 static void
9134 threadalive_test (char *cmd, int tty)
9135 {
9136   int sample_thread = SAMPLE_THREAD;
9137   int pid = ptid_get_pid (inferior_ptid);
9138   ptid_t ptid = ptid_build (pid, sample_thread, 0);
9139
9140   if (remote_thread_alive (ptid))
9141     printf_filtered ("PASS: Thread alive test\n");
9142   else
9143     printf_filtered ("FAIL: Thread alive test\n");
9144 }
9145
9146 void output_threadid (char *title, threadref *ref);
9147
9148 void
9149 output_threadid (char *title, threadref *ref)
9150 {
9151   char hexid[20];
9152
9153   pack_threadid (&hexid[0], ref);       /* Convert threead id into hex.  */
9154   hexid[16] = 0;
9155   printf_filtered ("%s  %s\n", title, (&hexid[0]));
9156 }
9157
9158 static void
9159 threadlist_test_cmd (char *cmd, int tty)
9160 {
9161   int startflag = 1;
9162   threadref nextthread;
9163   int done, result_count;
9164   threadref threadlist[3];
9165
9166   printf_filtered ("Remote Threadlist test\n");
9167   if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
9168                               &result_count, &threadlist[0]))
9169     printf_filtered ("FAIL: threadlist test\n");
9170   else
9171     {
9172       threadref *scan = threadlist;
9173       threadref *limit = scan + result_count;
9174
9175       while (scan < limit)
9176         output_threadid (" thread ", scan++);
9177     }
9178 }
9179
9180 void
9181 display_thread_info (struct gdb_ext_thread_info *info)
9182 {
9183   output_threadid ("Threadid: ", &info->threadid);
9184   printf_filtered ("Name: %s\n ", info->shortname);
9185   printf_filtered ("State: %s\n", info->display);
9186   printf_filtered ("other: %s\n\n", info->more_display);
9187 }
9188
9189 int
9190 get_and_display_threadinfo (threadref *ref)
9191 {
9192   int result;
9193   int set;
9194   struct gdb_ext_thread_info threadinfo;
9195
9196   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
9197     | TAG_MOREDISPLAY | TAG_DISPLAY;
9198   if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
9199     display_thread_info (&threadinfo);
9200   return result;
9201 }
9202
9203 static void
9204 threadinfo_test_cmd (char *cmd, int tty)
9205 {
9206   int athread = SAMPLE_THREAD;
9207   threadref thread;
9208   int set;
9209
9210   int_to_threadref (&thread, athread);
9211   printf_filtered ("Remote Threadinfo test\n");
9212   if (!get_and_display_threadinfo (&thread))
9213     printf_filtered ("FAIL cannot get thread info\n");
9214 }
9215
9216 static int
9217 thread_display_step (threadref *ref, void *context)
9218 {
9219   /* output_threadid(" threadstep ",ref); *//* simple test */
9220   return get_and_display_threadinfo (ref);
9221 }
9222
9223 static void
9224 threadlist_update_test_cmd (char *cmd, int tty)
9225 {
9226   printf_filtered ("Remote Threadlist update test\n");
9227   remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
9228 }
9229
9230 static void
9231 init_remote_threadtests (void)
9232 {
9233   add_com ("tlist", class_obscure, threadlist_test_cmd,
9234            _("Fetch and print the remote list of "
9235              "thread identifiers, one pkt only"));
9236   add_com ("tinfo", class_obscure, threadinfo_test_cmd,
9237            _("Fetch and display info about one thread"));
9238   add_com ("tset", class_obscure, threadset_test_cmd,
9239            _("Test setting to a different thread"));
9240   add_com ("tupd", class_obscure, threadlist_update_test_cmd,
9241            _("Iterate through updating all remote thread info"));
9242   add_com ("talive", class_obscure, threadalive_test,
9243            _(" Remote thread alive test "));
9244 }
9245
9246 #endif /* 0 */
9247
9248 /* Convert a thread ID to a string.  Returns the string in a static
9249    buffer.  */
9250
9251 static char *
9252 remote_pid_to_str (struct target_ops *ops, ptid_t ptid)
9253 {
9254   static char buf[64];
9255   struct remote_state *rs = get_remote_state ();
9256
9257   if (ptid_equal (ptid, null_ptid))
9258     return normal_pid_to_str (ptid);
9259   else if (ptid_is_pid (ptid))
9260     {
9261       /* Printing an inferior target id.  */
9262
9263       /* When multi-process extensions are off, there's no way in the
9264          remote protocol to know the remote process id, if there's any
9265          at all.  There's one exception --- when we're connected with
9266          target extended-remote, and we manually attached to a process
9267          with "attach PID".  We don't record anywhere a flag that
9268          allows us to distinguish that case from the case of
9269          connecting with extended-remote and the stub already being
9270          attached to a process, and reporting yes to qAttached, hence
9271          no smart special casing here.  */
9272       if (!remote_multi_process_p (rs))
9273         {
9274           xsnprintf (buf, sizeof buf, "Remote target");
9275           return buf;
9276         }
9277
9278       return normal_pid_to_str (ptid);
9279     }
9280   else
9281     {
9282       if (ptid_equal (magic_null_ptid, ptid))
9283         xsnprintf (buf, sizeof buf, "Thread <main>");
9284       else if (rs->extended && remote_multi_process_p (rs))
9285         xsnprintf (buf, sizeof buf, "Thread %d.%ld",
9286                    ptid_get_pid (ptid), ptid_get_lwp (ptid));
9287       else
9288         xsnprintf (buf, sizeof buf, "Thread %ld",
9289                    ptid_get_lwp (ptid));
9290       return buf;
9291     }
9292 }
9293
9294 /* Get the address of the thread local variable in OBJFILE which is
9295    stored at OFFSET within the thread local storage for thread PTID.  */
9296
9297 static CORE_ADDR
9298 remote_get_thread_local_address (struct target_ops *ops,
9299                                  ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
9300 {
9301   if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
9302     {
9303       struct remote_state *rs = get_remote_state ();
9304       char *p = rs->buf;
9305       char *endp = rs->buf + get_remote_packet_size ();
9306       enum packet_result result;
9307
9308       strcpy (p, "qGetTLSAddr:");
9309       p += strlen (p);
9310       p = write_ptid (p, endp, ptid);
9311       *p++ = ',';
9312       p += hexnumstr (p, offset);
9313       *p++ = ',';
9314       p += hexnumstr (p, lm);
9315       *p++ = '\0';
9316
9317       putpkt (rs->buf);
9318       getpkt (&rs->buf, &rs->buf_size, 0);
9319       result = packet_ok (rs->buf,
9320                           &remote_protocol_packets[PACKET_qGetTLSAddr]);
9321       if (result == PACKET_OK)
9322         {
9323           ULONGEST result;
9324
9325           unpack_varlen_hex (rs->buf, &result);
9326           return result;
9327         }
9328       else if (result == PACKET_UNKNOWN)
9329         throw_error (TLS_GENERIC_ERROR,
9330                      _("Remote target doesn't support qGetTLSAddr packet"));
9331       else
9332         throw_error (TLS_GENERIC_ERROR,
9333                      _("Remote target failed to process qGetTLSAddr request"));
9334     }
9335   else
9336     throw_error (TLS_GENERIC_ERROR,
9337                  _("TLS not supported or disabled on this target"));
9338   /* Not reached.  */
9339   return 0;
9340 }
9341
9342 /* Provide thread local base, i.e. Thread Information Block address.
9343    Returns 1 if ptid is found and thread_local_base is non zero.  */
9344
9345 static int
9346 remote_get_tib_address (struct target_ops *self, ptid_t ptid, CORE_ADDR *addr)
9347 {
9348   if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
9349     {
9350       struct remote_state *rs = get_remote_state ();
9351       char *p = rs->buf;
9352       char *endp = rs->buf + get_remote_packet_size ();
9353       enum packet_result result;
9354
9355       strcpy (p, "qGetTIBAddr:");
9356       p += strlen (p);
9357       p = write_ptid (p, endp, ptid);
9358       *p++ = '\0';
9359
9360       putpkt (rs->buf);
9361       getpkt (&rs->buf, &rs->buf_size, 0);
9362       result = packet_ok (rs->buf,
9363                           &remote_protocol_packets[PACKET_qGetTIBAddr]);
9364       if (result == PACKET_OK)
9365         {
9366           ULONGEST result;
9367
9368           unpack_varlen_hex (rs->buf, &result);
9369           if (addr)
9370             *addr = (CORE_ADDR) result;
9371           return 1;
9372         }
9373       else if (result == PACKET_UNKNOWN)
9374         error (_("Remote target doesn't support qGetTIBAddr packet"));
9375       else
9376         error (_("Remote target failed to process qGetTIBAddr request"));
9377     }
9378   else
9379     error (_("qGetTIBAddr not supported or disabled on this target"));
9380   /* Not reached.  */
9381   return 0;
9382 }
9383
9384 /* Support for inferring a target description based on the current
9385    architecture and the size of a 'g' packet.  While the 'g' packet
9386    can have any size (since optional registers can be left off the
9387    end), some sizes are easily recognizable given knowledge of the
9388    approximate architecture.  */
9389
9390 struct remote_g_packet_guess
9391 {
9392   int bytes;
9393   const struct target_desc *tdesc;
9394 };
9395 typedef struct remote_g_packet_guess remote_g_packet_guess_s;
9396 DEF_VEC_O(remote_g_packet_guess_s);
9397
9398 struct remote_g_packet_data
9399 {
9400   VEC(remote_g_packet_guess_s) *guesses;
9401 };
9402
9403 static struct gdbarch_data *remote_g_packet_data_handle;
9404
9405 static void *
9406 remote_g_packet_data_init (struct obstack *obstack)
9407 {
9408   return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
9409 }
9410
9411 void
9412 register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
9413                                 const struct target_desc *tdesc)
9414 {
9415   struct remote_g_packet_data *data
9416     = gdbarch_data (gdbarch, remote_g_packet_data_handle);
9417   struct remote_g_packet_guess new_guess, *guess;
9418   int ix;
9419
9420   gdb_assert (tdesc != NULL);
9421
9422   for (ix = 0;
9423        VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
9424        ix++)
9425     if (guess->bytes == bytes)
9426       internal_error (__FILE__, __LINE__,
9427                       _("Duplicate g packet description added for size %d"),
9428                       bytes);
9429
9430   new_guess.bytes = bytes;
9431   new_guess.tdesc = tdesc;
9432   VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
9433 }
9434
9435 /* Return 1 if remote_read_description would do anything on this target
9436    and architecture, 0 otherwise.  */
9437
9438 static int
9439 remote_read_description_p (struct target_ops *target)
9440 {
9441   struct remote_g_packet_data *data
9442     = gdbarch_data (target_gdbarch (), remote_g_packet_data_handle);
9443
9444   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
9445     return 1;
9446
9447   return 0;
9448 }
9449
9450 static const struct target_desc *
9451 remote_read_description (struct target_ops *target)
9452 {
9453   struct remote_g_packet_data *data
9454     = gdbarch_data (target_gdbarch (), remote_g_packet_data_handle);
9455
9456   /* Do not try this during initial connection, when we do not know
9457      whether there is a running but stopped thread.  */
9458   if (!target_has_execution || ptid_equal (inferior_ptid, null_ptid))
9459     return target->beneath->to_read_description (target->beneath);
9460
9461   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
9462     {
9463       struct remote_g_packet_guess *guess;
9464       int ix;
9465       int bytes = send_g_packet ();
9466
9467       for (ix = 0;
9468            VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
9469            ix++)
9470         if (guess->bytes == bytes)
9471           return guess->tdesc;
9472
9473       /* We discard the g packet.  A minor optimization would be to
9474          hold on to it, and fill the register cache once we have selected
9475          an architecture, but it's too tricky to do safely.  */
9476     }
9477
9478   return target->beneath->to_read_description (target->beneath);
9479 }
9480
9481 /* Remote file transfer support.  This is host-initiated I/O, not
9482    target-initiated; for target-initiated, see remote-fileio.c.  */
9483
9484 /* If *LEFT is at least the length of STRING, copy STRING to
9485    *BUFFER, update *BUFFER to point to the new end of the buffer, and
9486    decrease *LEFT.  Otherwise raise an error.  */
9487
9488 static void
9489 remote_buffer_add_string (char **buffer, int *left, char *string)
9490 {
9491   int len = strlen (string);
9492
9493   if (len > *left)
9494     error (_("Packet too long for target."));
9495
9496   memcpy (*buffer, string, len);
9497   *buffer += len;
9498   *left -= len;
9499
9500   /* NUL-terminate the buffer as a convenience, if there is
9501      room.  */
9502   if (*left)
9503     **buffer = '\0';
9504 }
9505
9506 /* If *LEFT is large enough, hex encode LEN bytes from BYTES into
9507    *BUFFER, update *BUFFER to point to the new end of the buffer, and
9508    decrease *LEFT.  Otherwise raise an error.  */
9509
9510 static void
9511 remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
9512                          int len)
9513 {
9514   if (2 * len > *left)
9515     error (_("Packet too long for target."));
9516
9517   bin2hex (bytes, *buffer, len);
9518   *buffer += 2 * len;
9519   *left -= 2 * len;
9520
9521   /* NUL-terminate the buffer as a convenience, if there is
9522      room.  */
9523   if (*left)
9524     **buffer = '\0';
9525 }
9526
9527 /* If *LEFT is large enough, convert VALUE to hex and add it to
9528    *BUFFER, update *BUFFER to point to the new end of the buffer, and
9529    decrease *LEFT.  Otherwise raise an error.  */
9530
9531 static void
9532 remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
9533 {
9534   int len = hexnumlen (value);
9535
9536   if (len > *left)
9537     error (_("Packet too long for target."));
9538
9539   hexnumstr (*buffer, value);
9540   *buffer += len;
9541   *left -= len;
9542
9543   /* NUL-terminate the buffer as a convenience, if there is
9544      room.  */
9545   if (*left)
9546     **buffer = '\0';
9547 }
9548
9549 /* Parse an I/O result packet from BUFFER.  Set RETCODE to the return
9550    value, *REMOTE_ERRNO to the remote error number or zero if none
9551    was included, and *ATTACHMENT to point to the start of the annex
9552    if any.  The length of the packet isn't needed here; there may
9553    be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
9554
9555    Return 0 if the packet could be parsed, -1 if it could not.  If
9556    -1 is returned, the other variables may not be initialized.  */
9557
9558 static int
9559 remote_hostio_parse_result (char *buffer, int *retcode,
9560                             int *remote_errno, char **attachment)
9561 {
9562   char *p, *p2;
9563
9564   *remote_errno = 0;
9565   *attachment = NULL;
9566
9567   if (buffer[0] != 'F')
9568     return -1;
9569
9570   errno = 0;
9571   *retcode = strtol (&buffer[1], &p, 16);
9572   if (errno != 0 || p == &buffer[1])
9573     return -1;
9574
9575   /* Check for ",errno".  */
9576   if (*p == ',')
9577     {
9578       errno = 0;
9579       *remote_errno = strtol (p + 1, &p2, 16);
9580       if (errno != 0 || p + 1 == p2)
9581         return -1;
9582       p = p2;
9583     }
9584
9585   /* Check for ";attachment".  If there is no attachment, the
9586      packet should end here.  */
9587   if (*p == ';')
9588     {
9589       *attachment = p + 1;
9590       return 0;
9591     }
9592   else if (*p == '\0')
9593     return 0;
9594   else
9595     return -1;
9596 }
9597
9598 /* Send a prepared I/O packet to the target and read its response.
9599    The prepared packet is in the global RS->BUF before this function
9600    is called, and the answer is there when we return.
9601
9602    COMMAND_BYTES is the length of the request to send, which may include
9603    binary data.  WHICH_PACKET is the packet configuration to check
9604    before attempting a packet.  If an error occurs, *REMOTE_ERRNO
9605    is set to the error number and -1 is returned.  Otherwise the value
9606    returned by the function is returned.
9607
9608    ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
9609    attachment is expected; an error will be reported if there's a
9610    mismatch.  If one is found, *ATTACHMENT will be set to point into
9611    the packet buffer and *ATTACHMENT_LEN will be set to the
9612    attachment's length.  */
9613
9614 static int
9615 remote_hostio_send_command (int command_bytes, int which_packet,
9616                             int *remote_errno, char **attachment,
9617                             int *attachment_len)
9618 {
9619   struct remote_state *rs = get_remote_state ();
9620   int ret, bytes_read;
9621   char *attachment_tmp;
9622
9623   if (!rs->remote_desc
9624       || packet_support (which_packet) == PACKET_DISABLE)
9625     {
9626       *remote_errno = FILEIO_ENOSYS;
9627       return -1;
9628     }
9629
9630   putpkt_binary (rs->buf, command_bytes);
9631   bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
9632
9633   /* If it timed out, something is wrong.  Don't try to parse the
9634      buffer.  */
9635   if (bytes_read < 0)
9636     {
9637       *remote_errno = FILEIO_EINVAL;
9638       return -1;
9639     }
9640
9641   switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
9642     {
9643     case PACKET_ERROR:
9644       *remote_errno = FILEIO_EINVAL;
9645       return -1;
9646     case PACKET_UNKNOWN:
9647       *remote_errno = FILEIO_ENOSYS;
9648       return -1;
9649     case PACKET_OK:
9650       break;
9651     }
9652
9653   if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
9654                                   &attachment_tmp))
9655     {
9656       *remote_errno = FILEIO_EINVAL;
9657       return -1;
9658     }
9659
9660   /* Make sure we saw an attachment if and only if we expected one.  */
9661   if ((attachment_tmp == NULL && attachment != NULL)
9662       || (attachment_tmp != NULL && attachment == NULL))
9663     {
9664       *remote_errno = FILEIO_EINVAL;
9665       return -1;
9666     }
9667
9668   /* If an attachment was found, it must point into the packet buffer;
9669      work out how many bytes there were.  */
9670   if (attachment_tmp != NULL)
9671     {
9672       *attachment = attachment_tmp;
9673       *attachment_len = bytes_read - (*attachment - rs->buf);
9674     }
9675
9676   return ret;
9677 }
9678
9679 /* Open FILENAME on the remote target, using FLAGS and MODE.  Return a
9680    remote file descriptor, or -1 if an error occurs (and set
9681    *REMOTE_ERRNO).  */
9682
9683 static int
9684 remote_hostio_open (struct target_ops *self,
9685                     const char *filename, int flags, int mode,
9686                     int *remote_errno)
9687 {
9688   struct remote_state *rs = get_remote_state ();
9689   char *p = rs->buf;
9690   int left = get_remote_packet_size () - 1;
9691
9692   remote_buffer_add_string (&p, &left, "vFile:open:");
9693
9694   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
9695                            strlen (filename));
9696   remote_buffer_add_string (&p, &left, ",");
9697
9698   remote_buffer_add_int (&p, &left, flags);
9699   remote_buffer_add_string (&p, &left, ",");
9700
9701   remote_buffer_add_int (&p, &left, mode);
9702
9703   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
9704                                      remote_errno, NULL, NULL);
9705 }
9706
9707 /* Write up to LEN bytes from WRITE_BUF to FD on the remote target.
9708    Return the number of bytes written, or -1 if an error occurs (and
9709    set *REMOTE_ERRNO).  */
9710
9711 static int
9712 remote_hostio_pwrite (struct target_ops *self,
9713                       int fd, const gdb_byte *write_buf, int len,
9714                       ULONGEST offset, int *remote_errno)
9715 {
9716   struct remote_state *rs = get_remote_state ();
9717   char *p = rs->buf;
9718   int left = get_remote_packet_size ();
9719   int out_len;
9720
9721   remote_buffer_add_string (&p, &left, "vFile:pwrite:");
9722
9723   remote_buffer_add_int (&p, &left, fd);
9724   remote_buffer_add_string (&p, &left, ",");
9725
9726   remote_buffer_add_int (&p, &left, offset);
9727   remote_buffer_add_string (&p, &left, ",");
9728
9729   p += remote_escape_output (write_buf, len, (gdb_byte *) p, &out_len,
9730                              get_remote_packet_size () - (p - rs->buf));
9731
9732   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
9733                                      remote_errno, NULL, NULL);
9734 }
9735
9736 /* Read up to LEN bytes FD on the remote target into READ_BUF
9737    Return the number of bytes read, or -1 if an error occurs (and
9738    set *REMOTE_ERRNO).  */
9739
9740 static int
9741 remote_hostio_pread (struct target_ops *self,
9742                      int fd, gdb_byte *read_buf, int len,
9743                      ULONGEST offset, int *remote_errno)
9744 {
9745   struct remote_state *rs = get_remote_state ();
9746   char *p = rs->buf;
9747   char *attachment;
9748   int left = get_remote_packet_size ();
9749   int ret, attachment_len;
9750   int read_len;
9751
9752   remote_buffer_add_string (&p, &left, "vFile:pread:");
9753
9754   remote_buffer_add_int (&p, &left, fd);
9755   remote_buffer_add_string (&p, &left, ",");
9756
9757   remote_buffer_add_int (&p, &left, len);
9758   remote_buffer_add_string (&p, &left, ",");
9759
9760   remote_buffer_add_int (&p, &left, offset);
9761
9762   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
9763                                     remote_errno, &attachment,
9764                                     &attachment_len);
9765
9766   if (ret < 0)
9767     return ret;
9768
9769   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
9770                                     read_buf, len);
9771   if (read_len != ret)
9772     error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
9773
9774   return ret;
9775 }
9776
9777 /* Close FD on the remote target.  Return 0, or -1 if an error occurs
9778    (and set *REMOTE_ERRNO).  */
9779
9780 static int
9781 remote_hostio_close (struct target_ops *self, int fd, int *remote_errno)
9782 {
9783   struct remote_state *rs = get_remote_state ();
9784   char *p = rs->buf;
9785   int left = get_remote_packet_size () - 1;
9786
9787   remote_buffer_add_string (&p, &left, "vFile:close:");
9788
9789   remote_buffer_add_int (&p, &left, fd);
9790
9791   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
9792                                      remote_errno, NULL, NULL);
9793 }
9794
9795 /* Unlink FILENAME on the remote target.  Return 0, or -1 if an error
9796    occurs (and set *REMOTE_ERRNO).  */
9797
9798 static int
9799 remote_hostio_unlink (struct target_ops *self,
9800                       const char *filename, int *remote_errno)
9801 {
9802   struct remote_state *rs = get_remote_state ();
9803   char *p = rs->buf;
9804   int left = get_remote_packet_size () - 1;
9805
9806   remote_buffer_add_string (&p, &left, "vFile:unlink:");
9807
9808   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
9809                            strlen (filename));
9810
9811   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
9812                                      remote_errno, NULL, NULL);
9813 }
9814
9815 /* Read value of symbolic link FILENAME on the remote target.  Return
9816    a null-terminated string allocated via xmalloc, or NULL if an error
9817    occurs (and set *REMOTE_ERRNO).  */
9818
9819 static char *
9820 remote_hostio_readlink (struct target_ops *self,
9821                         const char *filename, int *remote_errno)
9822 {
9823   struct remote_state *rs = get_remote_state ();
9824   char *p = rs->buf;
9825   char *attachment;
9826   int left = get_remote_packet_size ();
9827   int len, attachment_len;
9828   int read_len;
9829   char *ret;
9830
9831   remote_buffer_add_string (&p, &left, "vFile:readlink:");
9832
9833   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
9834                            strlen (filename));
9835
9836   len = remote_hostio_send_command (p - rs->buf, PACKET_vFile_readlink,
9837                                     remote_errno, &attachment,
9838                                     &attachment_len);
9839
9840   if (len < 0)
9841     return NULL;
9842
9843   ret = xmalloc (len + 1);
9844
9845   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
9846                                     (gdb_byte *) ret, len);
9847   if (read_len != len)
9848     error (_("Readlink returned %d, but %d bytes."), len, read_len);
9849
9850   ret[len] = '\0';
9851   return ret;
9852 }
9853
9854 static int
9855 remote_fileio_errno_to_host (int errnum)
9856 {
9857   switch (errnum)
9858     {
9859       case FILEIO_EPERM:
9860         return EPERM;
9861       case FILEIO_ENOENT:
9862         return ENOENT;
9863       case FILEIO_EINTR:
9864         return EINTR;
9865       case FILEIO_EIO:
9866         return EIO;
9867       case FILEIO_EBADF:
9868         return EBADF;
9869       case FILEIO_EACCES:
9870         return EACCES;
9871       case FILEIO_EFAULT:
9872         return EFAULT;
9873       case FILEIO_EBUSY:
9874         return EBUSY;
9875       case FILEIO_EEXIST:
9876         return EEXIST;
9877       case FILEIO_ENODEV:
9878         return ENODEV;
9879       case FILEIO_ENOTDIR:
9880         return ENOTDIR;
9881       case FILEIO_EISDIR:
9882         return EISDIR;
9883       case FILEIO_EINVAL:
9884         return EINVAL;
9885       case FILEIO_ENFILE:
9886         return ENFILE;
9887       case FILEIO_EMFILE:
9888         return EMFILE;
9889       case FILEIO_EFBIG:
9890         return EFBIG;
9891       case FILEIO_ENOSPC:
9892         return ENOSPC;
9893       case FILEIO_ESPIPE:
9894         return ESPIPE;
9895       case FILEIO_EROFS:
9896         return EROFS;
9897       case FILEIO_ENOSYS:
9898         return ENOSYS;
9899       case FILEIO_ENAMETOOLONG:
9900         return ENAMETOOLONG;
9901     }
9902   return -1;
9903 }
9904
9905 static char *
9906 remote_hostio_error (int errnum)
9907 {
9908   int host_error = remote_fileio_errno_to_host (errnum);
9909
9910   if (host_error == -1)
9911     error (_("Unknown remote I/O error %d"), errnum);
9912   else
9913     error (_("Remote I/O error: %s"), safe_strerror (host_error));
9914 }
9915
9916 static void
9917 remote_hostio_close_cleanup (void *opaque)
9918 {
9919   int fd = *(int *) opaque;
9920   int remote_errno;
9921
9922   remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno);
9923 }
9924
9925
9926 static void *
9927 remote_bfd_iovec_open (struct bfd *abfd, void *open_closure)
9928 {
9929   const char *filename = bfd_get_filename (abfd);
9930   int fd, remote_errno;
9931   int *stream;
9932
9933   gdb_assert (remote_filename_p (filename));
9934
9935   fd = remote_hostio_open (find_target_at (process_stratum),
9936                            filename + 7, FILEIO_O_RDONLY, 0, &remote_errno);
9937   if (fd == -1)
9938     {
9939       errno = remote_fileio_errno_to_host (remote_errno);
9940       bfd_set_error (bfd_error_system_call);
9941       return NULL;
9942     }
9943
9944   stream = xmalloc (sizeof (int));
9945   *stream = fd;
9946   return stream;
9947 }
9948
9949 static int
9950 remote_bfd_iovec_close (struct bfd *abfd, void *stream)
9951 {
9952   int fd = *(int *)stream;
9953   int remote_errno;
9954
9955   xfree (stream);
9956
9957   /* Ignore errors on close; these may happen if the remote
9958      connection was already torn down.  */
9959   remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno);
9960
9961   /* Zero means success.  */
9962   return 0;
9963 }
9964
9965 static file_ptr
9966 remote_bfd_iovec_pread (struct bfd *abfd, void *stream, void *buf,
9967                         file_ptr nbytes, file_ptr offset)
9968 {
9969   int fd = *(int *)stream;
9970   int remote_errno;
9971   file_ptr pos, bytes;
9972
9973   pos = 0;
9974   while (nbytes > pos)
9975     {
9976       bytes = remote_hostio_pread (find_target_at (process_stratum),
9977                                    fd, (gdb_byte *) buf + pos, nbytes - pos,
9978                                    offset + pos, &remote_errno);
9979       if (bytes == 0)
9980         /* Success, but no bytes, means end-of-file.  */
9981         break;
9982       if (bytes == -1)
9983         {
9984           errno = remote_fileio_errno_to_host (remote_errno);
9985           bfd_set_error (bfd_error_system_call);
9986           return -1;
9987         }
9988
9989       pos += bytes;
9990     }
9991
9992   return pos;
9993 }
9994
9995 static int
9996 remote_bfd_iovec_stat (struct bfd *abfd, void *stream, struct stat *sb)
9997 {
9998   /* FIXME: We should probably implement remote_hostio_stat.  */
9999   sb->st_size = INT_MAX;
10000   return 0;
10001 }
10002
10003 int
10004 remote_filename_p (const char *filename)
10005 {
10006   return strncmp (filename,
10007                   REMOTE_SYSROOT_PREFIX,
10008                   sizeof (REMOTE_SYSROOT_PREFIX) - 1) == 0;
10009 }
10010
10011 bfd *
10012 remote_bfd_open (const char *remote_file, const char *target)
10013 {
10014   bfd *abfd = gdb_bfd_openr_iovec (remote_file, target,
10015                                    remote_bfd_iovec_open, NULL,
10016                                    remote_bfd_iovec_pread,
10017                                    remote_bfd_iovec_close,
10018                                    remote_bfd_iovec_stat);
10019
10020   return abfd;
10021 }
10022
10023 void
10024 remote_file_put (const char *local_file, const char *remote_file, int from_tty)
10025 {
10026   struct cleanup *back_to, *close_cleanup;
10027   int retcode, fd, remote_errno, bytes, io_size;
10028   FILE *file;
10029   gdb_byte *buffer;
10030   int bytes_in_buffer;
10031   int saw_eof;
10032   ULONGEST offset;
10033   struct remote_state *rs = get_remote_state ();
10034
10035   if (!rs->remote_desc)
10036     error (_("command can only be used with remote target"));
10037
10038   file = gdb_fopen_cloexec (local_file, "rb");
10039   if (file == NULL)
10040     perror_with_name (local_file);
10041   back_to = make_cleanup_fclose (file);
10042
10043   fd = remote_hostio_open (find_target_at (process_stratum),
10044                            remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
10045                                          | FILEIO_O_TRUNC),
10046                            0700, &remote_errno);
10047   if (fd == -1)
10048     remote_hostio_error (remote_errno);
10049
10050   /* Send up to this many bytes at once.  They won't all fit in the
10051      remote packet limit, so we'll transfer slightly fewer.  */
10052   io_size = get_remote_packet_size ();
10053   buffer = xmalloc (io_size);
10054   make_cleanup (xfree, buffer);
10055
10056   close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
10057
10058   bytes_in_buffer = 0;
10059   saw_eof = 0;
10060   offset = 0;
10061   while (bytes_in_buffer || !saw_eof)
10062     {
10063       if (!saw_eof)
10064         {
10065           bytes = fread (buffer + bytes_in_buffer, 1,
10066                          io_size - bytes_in_buffer,
10067                          file);
10068           if (bytes == 0)
10069             {
10070               if (ferror (file))
10071                 error (_("Error reading %s."), local_file);
10072               else
10073                 {
10074                   /* EOF.  Unless there is something still in the
10075                      buffer from the last iteration, we are done.  */
10076                   saw_eof = 1;
10077                   if (bytes_in_buffer == 0)
10078                     break;
10079                 }
10080             }
10081         }
10082       else
10083         bytes = 0;
10084
10085       bytes += bytes_in_buffer;
10086       bytes_in_buffer = 0;
10087
10088       retcode = remote_hostio_pwrite (find_target_at (process_stratum),
10089                                       fd, buffer, bytes,
10090                                       offset, &remote_errno);
10091
10092       if (retcode < 0)
10093         remote_hostio_error (remote_errno);
10094       else if (retcode == 0)
10095         error (_("Remote write of %d bytes returned 0!"), bytes);
10096       else if (retcode < bytes)
10097         {
10098           /* Short write.  Save the rest of the read data for the next
10099              write.  */
10100           bytes_in_buffer = bytes - retcode;
10101           memmove (buffer, buffer + retcode, bytes_in_buffer);
10102         }
10103
10104       offset += retcode;
10105     }
10106
10107   discard_cleanups (close_cleanup);
10108   if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
10109     remote_hostio_error (remote_errno);
10110
10111   if (from_tty)
10112     printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
10113   do_cleanups (back_to);
10114 }
10115
10116 void
10117 remote_file_get (const char *remote_file, const char *local_file, int from_tty)
10118 {
10119   struct cleanup *back_to, *close_cleanup;
10120   int fd, remote_errno, bytes, io_size;
10121   FILE *file;
10122   gdb_byte *buffer;
10123   ULONGEST offset;
10124   struct remote_state *rs = get_remote_state ();
10125
10126   if (!rs->remote_desc)
10127     error (_("command can only be used with remote target"));
10128
10129   fd = remote_hostio_open (find_target_at (process_stratum),
10130                            remote_file, FILEIO_O_RDONLY, 0, &remote_errno);
10131   if (fd == -1)
10132     remote_hostio_error (remote_errno);
10133
10134   file = gdb_fopen_cloexec (local_file, "wb");
10135   if (file == NULL)
10136     perror_with_name (local_file);
10137   back_to = make_cleanup_fclose (file);
10138
10139   /* Send up to this many bytes at once.  They won't all fit in the
10140      remote packet limit, so we'll transfer slightly fewer.  */
10141   io_size = get_remote_packet_size ();
10142   buffer = xmalloc (io_size);
10143   make_cleanup (xfree, buffer);
10144
10145   close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
10146
10147   offset = 0;
10148   while (1)
10149     {
10150       bytes = remote_hostio_pread (find_target_at (process_stratum),
10151                                    fd, buffer, io_size, offset, &remote_errno);
10152       if (bytes == 0)
10153         /* Success, but no bytes, means end-of-file.  */
10154         break;
10155       if (bytes == -1)
10156         remote_hostio_error (remote_errno);
10157
10158       offset += bytes;
10159
10160       bytes = fwrite (buffer, 1, bytes, file);
10161       if (bytes == 0)
10162         perror_with_name (local_file);
10163     }
10164
10165   discard_cleanups (close_cleanup);
10166   if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
10167     remote_hostio_error (remote_errno);
10168
10169   if (from_tty)
10170     printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
10171   do_cleanups (back_to);
10172 }
10173
10174 void
10175 remote_file_delete (const char *remote_file, int from_tty)
10176 {
10177   int retcode, remote_errno;
10178   struct remote_state *rs = get_remote_state ();
10179
10180   if (!rs->remote_desc)
10181     error (_("command can only be used with remote target"));
10182
10183   retcode = remote_hostio_unlink (find_target_at (process_stratum),
10184                                   remote_file, &remote_errno);
10185   if (retcode == -1)
10186     remote_hostio_error (remote_errno);
10187
10188   if (from_tty)
10189     printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
10190 }
10191
10192 static void
10193 remote_put_command (char *args, int from_tty)
10194 {
10195   struct cleanup *back_to;
10196   char **argv;
10197
10198   if (args == NULL)
10199     error_no_arg (_("file to put"));
10200
10201   argv = gdb_buildargv (args);
10202   back_to = make_cleanup_freeargv (argv);
10203   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
10204     error (_("Invalid parameters to remote put"));
10205
10206   remote_file_put (argv[0], argv[1], from_tty);
10207
10208   do_cleanups (back_to);
10209 }
10210
10211 static void
10212 remote_get_command (char *args, int from_tty)
10213 {
10214   struct cleanup *back_to;
10215   char **argv;
10216
10217   if (args == NULL)
10218     error_no_arg (_("file to get"));
10219
10220   argv = gdb_buildargv (args);
10221   back_to = make_cleanup_freeargv (argv);
10222   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
10223     error (_("Invalid parameters to remote get"));
10224
10225   remote_file_get (argv[0], argv[1], from_tty);
10226
10227   do_cleanups (back_to);
10228 }
10229
10230 static void
10231 remote_delete_command (char *args, int from_tty)
10232 {
10233   struct cleanup *back_to;
10234   char **argv;
10235
10236   if (args == NULL)
10237     error_no_arg (_("file to delete"));
10238
10239   argv = gdb_buildargv (args);
10240   back_to = make_cleanup_freeargv (argv);
10241   if (argv[0] == NULL || argv[1] != NULL)
10242     error (_("Invalid parameters to remote delete"));
10243
10244   remote_file_delete (argv[0], from_tty);
10245
10246   do_cleanups (back_to);
10247 }
10248
10249 static void
10250 remote_command (char *args, int from_tty)
10251 {
10252   help_list (remote_cmdlist, "remote ", all_commands, gdb_stdout);
10253 }
10254
10255 static int
10256 remote_can_execute_reverse (struct target_ops *self)
10257 {
10258   if (packet_support (PACKET_bs) == PACKET_ENABLE
10259       || packet_support (PACKET_bc) == PACKET_ENABLE)
10260     return 1;
10261   else
10262     return 0;
10263 }
10264
10265 static int
10266 remote_supports_non_stop (struct target_ops *self)
10267 {
10268   return 1;
10269 }
10270
10271 static int
10272 remote_supports_disable_randomization (struct target_ops *self)
10273 {
10274   /* Only supported in extended mode.  */
10275   return 0;
10276 }
10277
10278 static int
10279 remote_supports_multi_process (struct target_ops *self)
10280 {
10281   struct remote_state *rs = get_remote_state ();
10282
10283   /* Only extended-remote handles being attached to multiple
10284      processes, even though plain remote can use the multi-process
10285      thread id extensions, so that GDB knows the target process's
10286      PID.  */
10287   return rs->extended && remote_multi_process_p (rs);
10288 }
10289
10290 static int
10291 remote_supports_cond_tracepoints (void)
10292 {
10293   return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
10294 }
10295
10296 static int
10297 remote_supports_cond_breakpoints (struct target_ops *self)
10298 {
10299   return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
10300 }
10301
10302 static int
10303 remote_supports_fast_tracepoints (void)
10304 {
10305   return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
10306 }
10307
10308 static int
10309 remote_supports_static_tracepoints (void)
10310 {
10311   return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
10312 }
10313
10314 static int
10315 remote_supports_install_in_trace (void)
10316 {
10317   return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
10318 }
10319
10320 static int
10321 remote_supports_enable_disable_tracepoint (struct target_ops *self)
10322 {
10323   return (packet_support (PACKET_EnableDisableTracepoints_feature)
10324           == PACKET_ENABLE);
10325 }
10326
10327 static int
10328 remote_supports_string_tracing (struct target_ops *self)
10329 {
10330   return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
10331 }
10332
10333 static int
10334 remote_can_run_breakpoint_commands (struct target_ops *self)
10335 {
10336   return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
10337 }
10338
10339 static void
10340 remote_trace_init (struct target_ops *self)
10341 {
10342   putpkt ("QTinit");
10343   remote_get_noisy_reply (&target_buf, &target_buf_size);
10344   if (strcmp (target_buf, "OK") != 0)
10345     error (_("Target does not support this command."));
10346 }
10347
10348 static void free_actions_list (char **actions_list);
10349 static void free_actions_list_cleanup_wrapper (void *);
10350 static void
10351 free_actions_list_cleanup_wrapper (void *al)
10352 {
10353   free_actions_list (al);
10354 }
10355
10356 static void
10357 free_actions_list (char **actions_list)
10358 {
10359   int ndx;
10360
10361   if (actions_list == 0)
10362     return;
10363
10364   for (ndx = 0; actions_list[ndx]; ndx++)
10365     xfree (actions_list[ndx]);
10366
10367   xfree (actions_list);
10368 }
10369
10370 /* Recursive routine to walk through command list including loops, and
10371    download packets for each command.  */
10372
10373 static void
10374 remote_download_command_source (int num, ULONGEST addr,
10375                                 struct command_line *cmds)
10376 {
10377   struct remote_state *rs = get_remote_state ();
10378   struct command_line *cmd;
10379
10380   for (cmd = cmds; cmd; cmd = cmd->next)
10381     {
10382       QUIT;     /* Allow user to bail out with ^C.  */
10383       strcpy (rs->buf, "QTDPsrc:");
10384       encode_source_string (num, addr, "cmd", cmd->line,
10385                             rs->buf + strlen (rs->buf),
10386                             rs->buf_size - strlen (rs->buf));
10387       putpkt (rs->buf);
10388       remote_get_noisy_reply (&target_buf, &target_buf_size);
10389       if (strcmp (target_buf, "OK"))
10390         warning (_("Target does not support source download."));
10391
10392       if (cmd->control_type == while_control
10393           || cmd->control_type == while_stepping_control)
10394         {
10395           remote_download_command_source (num, addr, *cmd->body_list);
10396
10397           QUIT; /* Allow user to bail out with ^C.  */
10398           strcpy (rs->buf, "QTDPsrc:");
10399           encode_source_string (num, addr, "cmd", "end",
10400                                 rs->buf + strlen (rs->buf),
10401                                 rs->buf_size - strlen (rs->buf));
10402           putpkt (rs->buf);
10403           remote_get_noisy_reply (&target_buf, &target_buf_size);
10404           if (strcmp (target_buf, "OK"))
10405             warning (_("Target does not support source download."));
10406         }
10407     }
10408 }
10409
10410 static void
10411 remote_download_tracepoint (struct target_ops *self, struct bp_location *loc)
10412 {
10413 #define BUF_SIZE 2048
10414
10415   CORE_ADDR tpaddr;
10416   char addrbuf[40];
10417   char buf[BUF_SIZE];
10418   char **tdp_actions;
10419   char **stepping_actions;
10420   int ndx;
10421   struct cleanup *old_chain = NULL;
10422   struct agent_expr *aexpr;
10423   struct cleanup *aexpr_chain = NULL;
10424   char *pkt;
10425   struct breakpoint *b = loc->owner;
10426   struct tracepoint *t = (struct tracepoint *) b;
10427
10428   encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
10429   old_chain = make_cleanup (free_actions_list_cleanup_wrapper,
10430                             tdp_actions);
10431   (void) make_cleanup (free_actions_list_cleanup_wrapper,
10432                        stepping_actions);
10433
10434   tpaddr = loc->address;
10435   sprintf_vma (addrbuf, tpaddr);
10436   xsnprintf (buf, BUF_SIZE, "QTDP:%x:%s:%c:%lx:%x", b->number,
10437              addrbuf, /* address */
10438              (b->enable_state == bp_enabled ? 'E' : 'D'),
10439              t->step_count, t->pass_count);
10440   /* Fast tracepoints are mostly handled by the target, but we can
10441      tell the target how big of an instruction block should be moved
10442      around.  */
10443   if (b->type == bp_fast_tracepoint)
10444     {
10445       /* Only test for support at download time; we may not know
10446          target capabilities at definition time.  */
10447       if (remote_supports_fast_tracepoints ())
10448         {
10449           int isize;
10450
10451           if (gdbarch_fast_tracepoint_valid_at (target_gdbarch (),
10452                                                 tpaddr, &isize, NULL))
10453             xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":F%x",
10454                        isize);
10455           else
10456             /* If it passed validation at definition but fails now,
10457                something is very wrong.  */
10458             internal_error (__FILE__, __LINE__,
10459                             _("Fast tracepoint not "
10460                               "valid during download"));
10461         }
10462       else
10463         /* Fast tracepoints are functionally identical to regular
10464            tracepoints, so don't take lack of support as a reason to
10465            give up on the trace run.  */
10466         warning (_("Target does not support fast tracepoints, "
10467                    "downloading %d as regular tracepoint"), b->number);
10468     }
10469   else if (b->type == bp_static_tracepoint)
10470     {
10471       /* Only test for support at download time; we may not know
10472          target capabilities at definition time.  */
10473       if (remote_supports_static_tracepoints ())
10474         {
10475           struct static_tracepoint_marker marker;
10476
10477           if (target_static_tracepoint_marker_at (tpaddr, &marker))
10478             strcat (buf, ":S");
10479           else
10480             error (_("Static tracepoint not valid during download"));
10481         }
10482       else
10483         /* Fast tracepoints are functionally identical to regular
10484            tracepoints, so don't take lack of support as a reason
10485            to give up on the trace run.  */
10486         error (_("Target does not support static tracepoints"));
10487     }
10488   /* If the tracepoint has a conditional, make it into an agent
10489      expression and append to the definition.  */
10490   if (loc->cond)
10491     {
10492       /* Only test support at download time, we may not know target
10493          capabilities at definition time.  */
10494       if (remote_supports_cond_tracepoints ())
10495         {
10496           aexpr = gen_eval_for_expr (tpaddr, loc->cond);
10497           aexpr_chain = make_cleanup_free_agent_expr (aexpr);
10498           xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":X%x,",
10499                      aexpr->len);
10500           pkt = buf + strlen (buf);
10501           for (ndx = 0; ndx < aexpr->len; ++ndx)
10502             pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
10503           *pkt = '\0';
10504           do_cleanups (aexpr_chain);
10505         }
10506       else
10507         warning (_("Target does not support conditional tracepoints, "
10508                    "ignoring tp %d cond"), b->number);
10509     }
10510
10511   if (b->commands || *default_collect)
10512     strcat (buf, "-");
10513   putpkt (buf);
10514   remote_get_noisy_reply (&target_buf, &target_buf_size);
10515   if (strcmp (target_buf, "OK"))
10516     error (_("Target does not support tracepoints."));
10517
10518   /* do_single_steps (t); */
10519   if (tdp_actions)
10520     {
10521       for (ndx = 0; tdp_actions[ndx]; ndx++)
10522         {
10523           QUIT; /* Allow user to bail out with ^C.  */
10524           xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%c",
10525                      b->number, addrbuf, /* address */
10526                      tdp_actions[ndx],
10527                      ((tdp_actions[ndx + 1] || stepping_actions)
10528                       ? '-' : 0));
10529           putpkt (buf);
10530           remote_get_noisy_reply (&target_buf,
10531                                   &target_buf_size);
10532           if (strcmp (target_buf, "OK"))
10533             error (_("Error on target while setting tracepoints."));
10534         }
10535     }
10536   if (stepping_actions)
10537     {
10538       for (ndx = 0; stepping_actions[ndx]; ndx++)
10539         {
10540           QUIT; /* Allow user to bail out with ^C.  */
10541           xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
10542                      b->number, addrbuf, /* address */
10543                      ((ndx == 0) ? "S" : ""),
10544                      stepping_actions[ndx],
10545                      (stepping_actions[ndx + 1] ? "-" : ""));
10546           putpkt (buf);
10547           remote_get_noisy_reply (&target_buf,
10548                                   &target_buf_size);
10549           if (strcmp (target_buf, "OK"))
10550             error (_("Error on target while setting tracepoints."));
10551         }
10552     }
10553
10554   if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
10555     {
10556       if (b->addr_string)
10557         {
10558           strcpy (buf, "QTDPsrc:");
10559           encode_source_string (b->number, loc->address,
10560                                 "at", b->addr_string, buf + strlen (buf),
10561                                 2048 - strlen (buf));
10562
10563           putpkt (buf);
10564           remote_get_noisy_reply (&target_buf, &target_buf_size);
10565           if (strcmp (target_buf, "OK"))
10566             warning (_("Target does not support source download."));
10567         }
10568       if (b->cond_string)
10569         {
10570           strcpy (buf, "QTDPsrc:");
10571           encode_source_string (b->number, loc->address,
10572                                 "cond", b->cond_string, buf + strlen (buf),
10573                                 2048 - strlen (buf));
10574           putpkt (buf);
10575           remote_get_noisy_reply (&target_buf, &target_buf_size);
10576           if (strcmp (target_buf, "OK"))
10577             warning (_("Target does not support source download."));
10578         }
10579       remote_download_command_source (b->number, loc->address,
10580                                       breakpoint_commands (b));
10581     }
10582
10583   do_cleanups (old_chain);
10584 }
10585
10586 static int
10587 remote_can_download_tracepoint (struct target_ops *self)
10588 {
10589   struct remote_state *rs = get_remote_state ();
10590   struct trace_status *ts;
10591   int status;
10592
10593   /* Don't try to install tracepoints until we've relocated our
10594      symbols, and fetched and merged the target's tracepoint list with
10595      ours.  */
10596   if (rs->starting_up)
10597     return 0;
10598
10599   ts = current_trace_status ();
10600   status = remote_get_trace_status (self, ts);
10601
10602   if (status == -1 || !ts->running_known || !ts->running)
10603     return 0;
10604
10605   /* If we are in a tracing experiment, but remote stub doesn't support
10606      installing tracepoint in trace, we have to return.  */
10607   if (!remote_supports_install_in_trace ())
10608     return 0;
10609
10610   return 1;
10611 }
10612
10613
10614 static void
10615 remote_download_trace_state_variable (struct target_ops *self,
10616                                       struct trace_state_variable *tsv)
10617 {
10618   struct remote_state *rs = get_remote_state ();
10619   char *p;
10620
10621   xsnprintf (rs->buf, get_remote_packet_size (), "QTDV:%x:%s:%x:",
10622              tsv->number, phex ((ULONGEST) tsv->initial_value, 8),
10623              tsv->builtin);
10624   p = rs->buf + strlen (rs->buf);
10625   if ((p - rs->buf) + strlen (tsv->name) * 2 >= get_remote_packet_size ())
10626     error (_("Trace state variable name too long for tsv definition packet"));
10627   p += 2 * bin2hex ((gdb_byte *) (tsv->name), p, strlen (tsv->name));
10628   *p++ = '\0';
10629   putpkt (rs->buf);
10630   remote_get_noisy_reply (&target_buf, &target_buf_size);
10631   if (*target_buf == '\0')
10632     error (_("Target does not support this command."));
10633   if (strcmp (target_buf, "OK") != 0)
10634     error (_("Error on target while downloading trace state variable."));
10635 }
10636
10637 static void
10638 remote_enable_tracepoint (struct target_ops *self,
10639                           struct bp_location *location)
10640 {
10641   struct remote_state *rs = get_remote_state ();
10642   char addr_buf[40];
10643
10644   sprintf_vma (addr_buf, location->address);
10645   xsnprintf (rs->buf, get_remote_packet_size (), "QTEnable:%x:%s",
10646              location->owner->number, addr_buf);
10647   putpkt (rs->buf);
10648   remote_get_noisy_reply (&rs->buf, &rs->buf_size);
10649   if (*rs->buf == '\0')
10650     error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
10651   if (strcmp (rs->buf, "OK") != 0)
10652     error (_("Error on target while enabling tracepoint."));
10653 }
10654
10655 static void
10656 remote_disable_tracepoint (struct target_ops *self,
10657                            struct bp_location *location)
10658 {
10659   struct remote_state *rs = get_remote_state ();
10660   char addr_buf[40];
10661
10662   sprintf_vma (addr_buf, location->address);
10663   xsnprintf (rs->buf, get_remote_packet_size (), "QTDisable:%x:%s",
10664              location->owner->number, addr_buf);
10665   putpkt (rs->buf);
10666   remote_get_noisy_reply (&rs->buf, &rs->buf_size);
10667   if (*rs->buf == '\0')
10668     error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
10669   if (strcmp (rs->buf, "OK") != 0)
10670     error (_("Error on target while disabling tracepoint."));
10671 }
10672
10673 static void
10674 remote_trace_set_readonly_regions (struct target_ops *self)
10675 {
10676   asection *s;
10677   bfd *abfd = NULL;
10678   bfd_size_type size;
10679   bfd_vma vma;
10680   int anysecs = 0;
10681   int offset = 0;
10682
10683   if (!exec_bfd)
10684     return;                     /* No information to give.  */
10685
10686   strcpy (target_buf, "QTro");
10687   offset = strlen (target_buf);
10688   for (s = exec_bfd->sections; s; s = s->next)
10689     {
10690       char tmp1[40], tmp2[40];
10691       int sec_length;
10692
10693       if ((s->flags & SEC_LOAD) == 0 ||
10694       /*  (s->flags & SEC_CODE) == 0 || */
10695           (s->flags & SEC_READONLY) == 0)
10696         continue;
10697
10698       anysecs = 1;
10699       vma = bfd_get_section_vma (abfd, s);
10700       size = bfd_get_section_size (s);
10701       sprintf_vma (tmp1, vma);
10702       sprintf_vma (tmp2, vma + size);
10703       sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
10704       if (offset + sec_length + 1 > target_buf_size)
10705         {
10706           if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
10707             warning (_("\
10708 Too many sections for read-only sections definition packet."));
10709           break;
10710         }
10711       xsnprintf (target_buf + offset, target_buf_size - offset, ":%s,%s",
10712                  tmp1, tmp2);
10713       offset += sec_length;
10714     }
10715   if (anysecs)
10716     {
10717       putpkt (target_buf);
10718       getpkt (&target_buf, &target_buf_size, 0);
10719     }
10720 }
10721
10722 static void
10723 remote_trace_start (struct target_ops *self)
10724 {
10725   putpkt ("QTStart");
10726   remote_get_noisy_reply (&target_buf, &target_buf_size);
10727   if (*target_buf == '\0')
10728     error (_("Target does not support this command."));
10729   if (strcmp (target_buf, "OK") != 0)
10730     error (_("Bogus reply from target: %s"), target_buf);
10731 }
10732
10733 static int
10734 remote_get_trace_status (struct target_ops *self, struct trace_status *ts)
10735 {
10736   /* Initialize it just to avoid a GCC false warning.  */
10737   char *p = NULL;
10738   /* FIXME we need to get register block size some other way.  */
10739   extern int trace_regblock_size;
10740   volatile struct gdb_exception ex;
10741   enum packet_result result;
10742
10743   if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
10744     return -1;
10745
10746   trace_regblock_size = get_remote_arch_state ()->sizeof_g_packet;
10747
10748   putpkt ("qTStatus");
10749
10750   TRY_CATCH (ex, RETURN_MASK_ERROR)
10751     {
10752       p = remote_get_noisy_reply (&target_buf, &target_buf_size);
10753     }
10754   if (ex.reason < 0)
10755     {
10756       if (ex.error != TARGET_CLOSE_ERROR)
10757         {
10758           exception_fprintf (gdb_stderr, ex, "qTStatus: ");
10759           return -1;
10760         }
10761       throw_exception (ex);
10762     }
10763
10764   result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
10765
10766   /* If the remote target doesn't do tracing, flag it.  */
10767   if (result == PACKET_UNKNOWN)
10768     return -1;
10769
10770   /* We're working with a live target.  */
10771   ts->filename = NULL;
10772
10773   if (*p++ != 'T')
10774     error (_("Bogus trace status reply from target: %s"), target_buf);
10775
10776   /* Function 'parse_trace_status' sets default value of each field of
10777      'ts' at first, so we don't have to do it here.  */
10778   parse_trace_status (p, ts);
10779
10780   return ts->running;
10781 }
10782
10783 static void
10784 remote_get_tracepoint_status (struct target_ops *self, struct breakpoint *bp,
10785                               struct uploaded_tp *utp)
10786 {
10787   struct remote_state *rs = get_remote_state ();
10788   char *reply;
10789   struct bp_location *loc;
10790   struct tracepoint *tp = (struct tracepoint *) bp;
10791   size_t size = get_remote_packet_size ();
10792
10793   if (tp)
10794     {
10795       tp->base.hit_count = 0;
10796       tp->traceframe_usage = 0;
10797       for (loc = tp->base.loc; loc; loc = loc->next)
10798         {
10799           /* If the tracepoint was never downloaded, don't go asking for
10800              any status.  */
10801           if (tp->number_on_target == 0)
10802             continue;
10803           xsnprintf (rs->buf, size, "qTP:%x:%s", tp->number_on_target,
10804                      phex_nz (loc->address, 0));
10805           putpkt (rs->buf);
10806           reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
10807           if (reply && *reply)
10808             {
10809               if (*reply == 'V')
10810                 parse_tracepoint_status (reply + 1, bp, utp);
10811             }
10812         }
10813     }
10814   else if (utp)
10815     {
10816       utp->hit_count = 0;
10817       utp->traceframe_usage = 0;
10818       xsnprintf (rs->buf, size, "qTP:%x:%s", utp->number,
10819                  phex_nz (utp->addr, 0));
10820       putpkt (rs->buf);
10821       reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
10822       if (reply && *reply)
10823         {
10824           if (*reply == 'V')
10825             parse_tracepoint_status (reply + 1, bp, utp);
10826         }
10827     }
10828 }
10829
10830 static void
10831 remote_trace_stop (struct target_ops *self)
10832 {
10833   putpkt ("QTStop");
10834   remote_get_noisy_reply (&target_buf, &target_buf_size);
10835   if (*target_buf == '\0')
10836     error (_("Target does not support this command."));
10837   if (strcmp (target_buf, "OK") != 0)
10838     error (_("Bogus reply from target: %s"), target_buf);
10839 }
10840
10841 static int
10842 remote_trace_find (struct target_ops *self,
10843                    enum trace_find_type type, int num,
10844                    CORE_ADDR addr1, CORE_ADDR addr2,
10845                    int *tpp)
10846 {
10847   struct remote_state *rs = get_remote_state ();
10848   char *endbuf = rs->buf + get_remote_packet_size ();
10849   char *p, *reply;
10850   int target_frameno = -1, target_tracept = -1;
10851
10852   /* Lookups other than by absolute frame number depend on the current
10853      trace selected, so make sure it is correct on the remote end
10854      first.  */
10855   if (type != tfind_number)
10856     set_remote_traceframe ();
10857
10858   p = rs->buf;
10859   strcpy (p, "QTFrame:");
10860   p = strchr (p, '\0');
10861   switch (type)
10862     {
10863     case tfind_number:
10864       xsnprintf (p, endbuf - p, "%x", num);
10865       break;
10866     case tfind_pc:
10867       xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
10868       break;
10869     case tfind_tp:
10870       xsnprintf (p, endbuf - p, "tdp:%x", num);
10871       break;
10872     case tfind_range:
10873       xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
10874                  phex_nz (addr2, 0));
10875       break;
10876     case tfind_outside:
10877       xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
10878                  phex_nz (addr2, 0));
10879       break;
10880     default:
10881       error (_("Unknown trace find type %d"), type);
10882     }
10883
10884   putpkt (rs->buf);
10885   reply = remote_get_noisy_reply (&(rs->buf), &rs->buf_size);
10886   if (*reply == '\0')
10887     error (_("Target does not support this command."));
10888
10889   while (reply && *reply)
10890     switch (*reply)
10891       {
10892       case 'F':
10893         p = ++reply;
10894         target_frameno = (int) strtol (p, &reply, 16);
10895         if (reply == p)
10896           error (_("Unable to parse trace frame number"));
10897         /* Don't update our remote traceframe number cache on failure
10898            to select a remote traceframe.  */
10899         if (target_frameno == -1)
10900           return -1;
10901         break;
10902       case 'T':
10903         p = ++reply;
10904         target_tracept = (int) strtol (p, &reply, 16);
10905         if (reply == p)
10906           error (_("Unable to parse tracepoint number"));
10907         break;
10908       case 'O':         /* "OK"? */
10909         if (reply[1] == 'K' && reply[2] == '\0')
10910           reply += 2;
10911         else
10912           error (_("Bogus reply from target: %s"), reply);
10913         break;
10914       default:
10915         error (_("Bogus reply from target: %s"), reply);
10916       }
10917   if (tpp)
10918     *tpp = target_tracept;
10919
10920   rs->remote_traceframe_number = target_frameno;
10921   return target_frameno;
10922 }
10923
10924 static int
10925 remote_get_trace_state_variable_value (struct target_ops *self,
10926                                        int tsvnum, LONGEST *val)
10927 {
10928   struct remote_state *rs = get_remote_state ();
10929   char *reply;
10930   ULONGEST uval;
10931
10932   set_remote_traceframe ();
10933
10934   xsnprintf (rs->buf, get_remote_packet_size (), "qTV:%x", tsvnum);
10935   putpkt (rs->buf);
10936   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
10937   if (reply && *reply)
10938     {
10939       if (*reply == 'V')
10940         {
10941           unpack_varlen_hex (reply + 1, &uval);
10942           *val = (LONGEST) uval;
10943           return 1;
10944         }
10945     }
10946   return 0;
10947 }
10948
10949 static int
10950 remote_save_trace_data (struct target_ops *self, const char *filename)
10951 {
10952   struct remote_state *rs = get_remote_state ();
10953   char *p, *reply;
10954
10955   p = rs->buf;
10956   strcpy (p, "QTSave:");
10957   p += strlen (p);
10958   if ((p - rs->buf) + strlen (filename) * 2 >= get_remote_packet_size ())
10959     error (_("Remote file name too long for trace save packet"));
10960   p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
10961   *p++ = '\0';
10962   putpkt (rs->buf);
10963   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
10964   if (*reply == '\0')
10965     error (_("Target does not support this command."));
10966   if (strcmp (reply, "OK") != 0)
10967     error (_("Bogus reply from target: %s"), reply);
10968   return 0;
10969 }
10970
10971 /* This is basically a memory transfer, but needs to be its own packet
10972    because we don't know how the target actually organizes its trace
10973    memory, plus we want to be able to ask for as much as possible, but
10974    not be unhappy if we don't get as much as we ask for.  */
10975
10976 static LONGEST
10977 remote_get_raw_trace_data (struct target_ops *self,
10978                            gdb_byte *buf, ULONGEST offset, LONGEST len)
10979 {
10980   struct remote_state *rs = get_remote_state ();
10981   char *reply;
10982   char *p;
10983   int rslt;
10984
10985   p = rs->buf;
10986   strcpy (p, "qTBuffer:");
10987   p += strlen (p);
10988   p += hexnumstr (p, offset);
10989   *p++ = ',';
10990   p += hexnumstr (p, len);
10991   *p++ = '\0';
10992
10993   putpkt (rs->buf);
10994   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
10995   if (reply && *reply)
10996     {
10997       /* 'l' by itself means we're at the end of the buffer and
10998          there is nothing more to get.  */
10999       if (*reply == 'l')
11000         return 0;
11001
11002       /* Convert the reply into binary.  Limit the number of bytes to
11003          convert according to our passed-in buffer size, rather than
11004          what was returned in the packet; if the target is
11005          unexpectedly generous and gives us a bigger reply than we
11006          asked for, we don't want to crash.  */
11007       rslt = hex2bin (target_buf, buf, len);
11008       return rslt;
11009     }
11010
11011   /* Something went wrong, flag as an error.  */
11012   return -1;
11013 }
11014
11015 static void
11016 remote_set_disconnected_tracing (struct target_ops *self, int val)
11017 {
11018   struct remote_state *rs = get_remote_state ();
11019
11020   if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
11021     {
11022       char *reply;
11023
11024       xsnprintf (rs->buf, get_remote_packet_size (), "QTDisconnected:%x", val);
11025       putpkt (rs->buf);
11026       reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
11027       if (*reply == '\0')
11028         error (_("Target does not support this command."));
11029       if (strcmp (reply, "OK") != 0)
11030         error (_("Bogus reply from target: %s"), reply);
11031     }
11032   else if (val)
11033     warning (_("Target does not support disconnected tracing."));
11034 }
11035
11036 static int
11037 remote_core_of_thread (struct target_ops *ops, ptid_t ptid)
11038 {
11039   struct thread_info *info = find_thread_ptid (ptid);
11040
11041   if (info && info->private)
11042     return info->private->core;
11043   return -1;
11044 }
11045
11046 static void
11047 remote_set_circular_trace_buffer (struct target_ops *self, int val)
11048 {
11049   struct remote_state *rs = get_remote_state ();
11050   char *reply;
11051
11052   xsnprintf (rs->buf, get_remote_packet_size (), "QTBuffer:circular:%x", val);
11053   putpkt (rs->buf);
11054   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
11055   if (*reply == '\0')
11056     error (_("Target does not support this command."));
11057   if (strcmp (reply, "OK") != 0)
11058     error (_("Bogus reply from target: %s"), reply);
11059 }
11060
11061 static struct traceframe_info *
11062 remote_traceframe_info (struct target_ops *self)
11063 {
11064   char *text;
11065
11066   text = target_read_stralloc (&current_target,
11067                                TARGET_OBJECT_TRACEFRAME_INFO, NULL);
11068   if (text != NULL)
11069     {
11070       struct traceframe_info *info;
11071       struct cleanup *back_to = make_cleanup (xfree, text);
11072
11073       info = parse_traceframe_info (text);
11074       do_cleanups (back_to);
11075       return info;
11076     }
11077
11078   return NULL;
11079 }
11080
11081 /* Handle the qTMinFTPILen packet.  Returns the minimum length of
11082    instruction on which a fast tracepoint may be placed.  Returns -1
11083    if the packet is not supported, and 0 if the minimum instruction
11084    length is unknown.  */
11085
11086 static int
11087 remote_get_min_fast_tracepoint_insn_len (struct target_ops *self)
11088 {
11089   struct remote_state *rs = get_remote_state ();
11090   char *reply;
11091
11092   /* If we're not debugging a process yet, the IPA can't be
11093      loaded.  */
11094   if (!target_has_execution)
11095     return 0;
11096
11097   /* Make sure the remote is pointing at the right process.  */
11098   set_general_process ();
11099
11100   xsnprintf (rs->buf, get_remote_packet_size (), "qTMinFTPILen");
11101   putpkt (rs->buf);
11102   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
11103   if (*reply == '\0')
11104     return -1;
11105   else
11106     {
11107       ULONGEST min_insn_len;
11108
11109       unpack_varlen_hex (reply, &min_insn_len);
11110
11111       return (int) min_insn_len;
11112     }
11113 }
11114
11115 static void
11116 remote_set_trace_buffer_size (struct target_ops *self, LONGEST val)
11117 {
11118   if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
11119     {
11120       struct remote_state *rs = get_remote_state ();
11121       char *buf = rs->buf;
11122       char *endbuf = rs->buf + get_remote_packet_size ();
11123       enum packet_result result;
11124
11125       gdb_assert (val >= 0 || val == -1);
11126       buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
11127       /* Send -1 as literal "-1" to avoid host size dependency.  */
11128       if (val < 0)
11129         {
11130           *buf++ = '-';
11131           buf += hexnumstr (buf, (ULONGEST) -val);
11132         }
11133       else
11134         buf += hexnumstr (buf, (ULONGEST) val);
11135
11136       putpkt (rs->buf);
11137       remote_get_noisy_reply (&rs->buf, &rs->buf_size);
11138       result = packet_ok (rs->buf,
11139                   &remote_protocol_packets[PACKET_QTBuffer_size]);
11140
11141       if (result != PACKET_OK)
11142         warning (_("Bogus reply from target: %s"), rs->buf);
11143     }
11144 }
11145
11146 static int
11147 remote_set_trace_notes (struct target_ops *self,
11148                         const char *user, const char *notes,
11149                         const char *stop_notes)
11150 {
11151   struct remote_state *rs = get_remote_state ();
11152   char *reply;
11153   char *buf = rs->buf;
11154   char *endbuf = rs->buf + get_remote_packet_size ();
11155   int nbytes;
11156
11157   buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
11158   if (user)
11159     {
11160       buf += xsnprintf (buf, endbuf - buf, "user:");
11161       nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
11162       buf += 2 * nbytes;
11163       *buf++ = ';';
11164     }
11165   if (notes)
11166     {
11167       buf += xsnprintf (buf, endbuf - buf, "notes:");
11168       nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
11169       buf += 2 * nbytes;
11170       *buf++ = ';';
11171     }
11172   if (stop_notes)
11173     {
11174       buf += xsnprintf (buf, endbuf - buf, "tstop:");
11175       nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
11176       buf += 2 * nbytes;
11177       *buf++ = ';';
11178     }
11179   /* Ensure the buffer is terminated.  */
11180   *buf = '\0';
11181
11182   putpkt (rs->buf);
11183   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
11184   if (*reply == '\0')
11185     return 0;
11186
11187   if (strcmp (reply, "OK") != 0)
11188     error (_("Bogus reply from target: %s"), reply);
11189
11190   return 1;
11191 }
11192
11193 static int
11194 remote_use_agent (struct target_ops *self, int use)
11195 {
11196   if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
11197     {
11198       struct remote_state *rs = get_remote_state ();
11199
11200       /* If the stub supports QAgent.  */
11201       xsnprintf (rs->buf, get_remote_packet_size (), "QAgent:%d", use);
11202       putpkt (rs->buf);
11203       getpkt (&rs->buf, &rs->buf_size, 0);
11204
11205       if (strcmp (rs->buf, "OK") == 0)
11206         {
11207           use_agent = use;
11208           return 1;
11209         }
11210     }
11211
11212   return 0;
11213 }
11214
11215 static int
11216 remote_can_use_agent (struct target_ops *self)
11217 {
11218   return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
11219 }
11220
11221 struct btrace_target_info
11222 {
11223   /* The ptid of the traced thread.  */
11224   ptid_t ptid;
11225 };
11226
11227 /* Check whether the target supports branch tracing.  */
11228
11229 static int
11230 remote_supports_btrace (struct target_ops *self)
11231 {
11232   if (packet_support (PACKET_Qbtrace_off) != PACKET_ENABLE)
11233     return 0;
11234   if (packet_support (PACKET_Qbtrace_bts) != PACKET_ENABLE)
11235     return 0;
11236   if (packet_support (PACKET_qXfer_btrace) != PACKET_ENABLE)
11237     return 0;
11238
11239   return 1;
11240 }
11241
11242 /* Enable branch tracing.  */
11243
11244 static struct btrace_target_info *
11245 remote_enable_btrace (struct target_ops *self, ptid_t ptid)
11246 {
11247   struct btrace_target_info *tinfo = NULL;
11248   struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
11249   struct remote_state *rs = get_remote_state ();
11250   char *buf = rs->buf;
11251   char *endbuf = rs->buf + get_remote_packet_size ();
11252
11253   if (packet_config_support (packet) != PACKET_ENABLE)
11254     error (_("Target does not support branch tracing."));
11255
11256   set_general_thread (ptid);
11257
11258   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
11259   putpkt (rs->buf);
11260   getpkt (&rs->buf, &rs->buf_size, 0);
11261
11262   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
11263     {
11264       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
11265         error (_("Could not enable branch tracing for %s: %s"),
11266                target_pid_to_str (ptid), rs->buf + 2);
11267       else
11268         error (_("Could not enable branch tracing for %s."),
11269                target_pid_to_str (ptid));
11270     }
11271
11272   tinfo = xzalloc (sizeof (*tinfo));
11273   tinfo->ptid = ptid;
11274
11275   return tinfo;
11276 }
11277
11278 /* Disable branch tracing.  */
11279
11280 static void
11281 remote_disable_btrace (struct target_ops *self,
11282                        struct btrace_target_info *tinfo)
11283 {
11284   struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
11285   struct remote_state *rs = get_remote_state ();
11286   char *buf = rs->buf;
11287   char *endbuf = rs->buf + get_remote_packet_size ();
11288
11289   if (packet_config_support (packet) != PACKET_ENABLE)
11290     error (_("Target does not support branch tracing."));
11291
11292   set_general_thread (tinfo->ptid);
11293
11294   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
11295   putpkt (rs->buf);
11296   getpkt (&rs->buf, &rs->buf_size, 0);
11297
11298   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
11299     {
11300       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
11301         error (_("Could not disable branch tracing for %s: %s"),
11302                target_pid_to_str (tinfo->ptid), rs->buf + 2);
11303       else
11304         error (_("Could not disable branch tracing for %s."),
11305                target_pid_to_str (tinfo->ptid));
11306     }
11307
11308   xfree (tinfo);
11309 }
11310
11311 /* Teardown branch tracing.  */
11312
11313 static void
11314 remote_teardown_btrace (struct target_ops *self,
11315                         struct btrace_target_info *tinfo)
11316 {
11317   /* We must not talk to the target during teardown.  */
11318   xfree (tinfo);
11319 }
11320
11321 /* Read the branch trace.  */
11322
11323 static enum btrace_error
11324 remote_read_btrace (struct target_ops *self,
11325                     VEC (btrace_block_s) **btrace,
11326                     struct btrace_target_info *tinfo,
11327                     enum btrace_read_type type)
11328 {
11329   struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
11330   struct remote_state *rs = get_remote_state ();
11331   struct cleanup *cleanup;
11332   const char *annex;
11333   char *xml;
11334
11335   if (packet_config_support (packet) != PACKET_ENABLE)
11336     error (_("Target does not support branch tracing."));
11337
11338 #if !defined(HAVE_LIBEXPAT)
11339   error (_("Cannot process branch tracing result. XML parsing not supported."));
11340 #endif
11341
11342   switch (type)
11343     {
11344     case BTRACE_READ_ALL:
11345       annex = "all";
11346       break;
11347     case BTRACE_READ_NEW:
11348       annex = "new";
11349       break;
11350     case BTRACE_READ_DELTA:
11351       annex = "delta";
11352       break;
11353     default:
11354       internal_error (__FILE__, __LINE__,
11355                       _("Bad branch tracing read type: %u."),
11356                       (unsigned int) type);
11357     }
11358
11359   xml = target_read_stralloc (&current_target,
11360                               TARGET_OBJECT_BTRACE, annex);
11361   if (xml == NULL)
11362     return BTRACE_ERR_UNKNOWN;
11363
11364   cleanup = make_cleanup (xfree, xml);
11365   *btrace = parse_xml_btrace (xml);
11366   do_cleanups (cleanup);
11367
11368   return BTRACE_ERR_NONE;
11369 }
11370
11371 static int
11372 remote_augmented_libraries_svr4_read (struct target_ops *self)
11373 {
11374   return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
11375           == PACKET_ENABLE);
11376 }
11377
11378 /* Implementation of to_load.  */
11379
11380 static void
11381 remote_load (struct target_ops *self, char *name, int from_tty)
11382 {
11383   generic_load (name, from_tty);
11384 }
11385
11386 static void
11387 init_remote_ops (void)
11388 {
11389   remote_ops.to_shortname = "remote";
11390   remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
11391   remote_ops.to_doc =
11392     "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
11393 Specify the serial device it is connected to\n\
11394 (e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
11395   remote_ops.to_open = remote_open;
11396   remote_ops.to_close = remote_close;
11397   remote_ops.to_detach = remote_detach;
11398   remote_ops.to_disconnect = remote_disconnect;
11399   remote_ops.to_resume = remote_resume;
11400   remote_ops.to_wait = remote_wait;
11401   remote_ops.to_fetch_registers = remote_fetch_registers;
11402   remote_ops.to_store_registers = remote_store_registers;
11403   remote_ops.to_prepare_to_store = remote_prepare_to_store;
11404   remote_ops.to_files_info = remote_files_info;
11405   remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
11406   remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
11407   remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
11408   remote_ops.to_stopped_data_address = remote_stopped_data_address;
11409   remote_ops.to_watchpoint_addr_within_range =
11410     remote_watchpoint_addr_within_range;
11411   remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
11412   remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
11413   remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
11414   remote_ops.to_region_ok_for_hw_watchpoint
11415      = remote_region_ok_for_hw_watchpoint;
11416   remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
11417   remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
11418   remote_ops.to_kill = remote_kill;
11419   remote_ops.to_load = remote_load;
11420   remote_ops.to_mourn_inferior = remote_mourn;
11421   remote_ops.to_pass_signals = remote_pass_signals;
11422   remote_ops.to_program_signals = remote_program_signals;
11423   remote_ops.to_thread_alive = remote_thread_alive;
11424   remote_ops.to_find_new_threads = remote_threads_info;
11425   remote_ops.to_pid_to_str = remote_pid_to_str;
11426   remote_ops.to_extra_thread_info = remote_threads_extra_info;
11427   remote_ops.to_get_ada_task_ptid = remote_get_ada_task_ptid;
11428   remote_ops.to_stop = remote_stop;
11429   remote_ops.to_xfer_partial = remote_xfer_partial;
11430   remote_ops.to_rcmd = remote_rcmd;
11431   remote_ops.to_log_command = serial_log_command;
11432   remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
11433   remote_ops.to_stratum = process_stratum;
11434   remote_ops.to_has_all_memory = default_child_has_all_memory;
11435   remote_ops.to_has_memory = default_child_has_memory;
11436   remote_ops.to_has_stack = default_child_has_stack;
11437   remote_ops.to_has_registers = default_child_has_registers;
11438   remote_ops.to_has_execution = default_child_has_execution;
11439   remote_ops.to_has_thread_control = tc_schedlock;    /* can lock scheduler */
11440   remote_ops.to_can_execute_reverse = remote_can_execute_reverse;
11441   remote_ops.to_magic = OPS_MAGIC;
11442   remote_ops.to_memory_map = remote_memory_map;
11443   remote_ops.to_flash_erase = remote_flash_erase;
11444   remote_ops.to_flash_done = remote_flash_done;
11445   remote_ops.to_read_description = remote_read_description;
11446   remote_ops.to_search_memory = remote_search_memory;
11447   remote_ops.to_can_async_p = remote_can_async_p;
11448   remote_ops.to_is_async_p = remote_is_async_p;
11449   remote_ops.to_async = remote_async;
11450   remote_ops.to_terminal_inferior = remote_terminal_inferior;
11451   remote_ops.to_terminal_ours = remote_terminal_ours;
11452   remote_ops.to_supports_non_stop = remote_supports_non_stop;
11453   remote_ops.to_supports_multi_process = remote_supports_multi_process;
11454   remote_ops.to_supports_disable_randomization
11455     = remote_supports_disable_randomization;
11456   remote_ops.to_fileio_open = remote_hostio_open;
11457   remote_ops.to_fileio_pwrite = remote_hostio_pwrite;
11458   remote_ops.to_fileio_pread = remote_hostio_pread;
11459   remote_ops.to_fileio_close = remote_hostio_close;
11460   remote_ops.to_fileio_unlink = remote_hostio_unlink;
11461   remote_ops.to_fileio_readlink = remote_hostio_readlink;
11462   remote_ops.to_supports_enable_disable_tracepoint = remote_supports_enable_disable_tracepoint;
11463   remote_ops.to_supports_string_tracing = remote_supports_string_tracing;
11464   remote_ops.to_supports_evaluation_of_breakpoint_conditions = remote_supports_cond_breakpoints;
11465   remote_ops.to_can_run_breakpoint_commands = remote_can_run_breakpoint_commands;
11466   remote_ops.to_trace_init = remote_trace_init;
11467   remote_ops.to_download_tracepoint = remote_download_tracepoint;
11468   remote_ops.to_can_download_tracepoint = remote_can_download_tracepoint;
11469   remote_ops.to_download_trace_state_variable
11470     = remote_download_trace_state_variable;
11471   remote_ops.to_enable_tracepoint = remote_enable_tracepoint;
11472   remote_ops.to_disable_tracepoint = remote_disable_tracepoint;
11473   remote_ops.to_trace_set_readonly_regions = remote_trace_set_readonly_regions;
11474   remote_ops.to_trace_start = remote_trace_start;
11475   remote_ops.to_get_trace_status = remote_get_trace_status;
11476   remote_ops.to_get_tracepoint_status = remote_get_tracepoint_status;
11477   remote_ops.to_trace_stop = remote_trace_stop;
11478   remote_ops.to_trace_find = remote_trace_find;
11479   remote_ops.to_get_trace_state_variable_value
11480     = remote_get_trace_state_variable_value;
11481   remote_ops.to_save_trace_data = remote_save_trace_data;
11482   remote_ops.to_upload_tracepoints = remote_upload_tracepoints;
11483   remote_ops.to_upload_trace_state_variables
11484     = remote_upload_trace_state_variables;
11485   remote_ops.to_get_raw_trace_data = remote_get_raw_trace_data;
11486   remote_ops.to_get_min_fast_tracepoint_insn_len = remote_get_min_fast_tracepoint_insn_len;
11487   remote_ops.to_set_disconnected_tracing = remote_set_disconnected_tracing;
11488   remote_ops.to_set_circular_trace_buffer = remote_set_circular_trace_buffer;
11489   remote_ops.to_set_trace_buffer_size = remote_set_trace_buffer_size;
11490   remote_ops.to_set_trace_notes = remote_set_trace_notes;
11491   remote_ops.to_core_of_thread = remote_core_of_thread;
11492   remote_ops.to_verify_memory = remote_verify_memory;
11493   remote_ops.to_get_tib_address = remote_get_tib_address;
11494   remote_ops.to_set_permissions = remote_set_permissions;
11495   remote_ops.to_static_tracepoint_marker_at
11496     = remote_static_tracepoint_marker_at;
11497   remote_ops.to_static_tracepoint_markers_by_strid
11498     = remote_static_tracepoint_markers_by_strid;
11499   remote_ops.to_traceframe_info = remote_traceframe_info;
11500   remote_ops.to_use_agent = remote_use_agent;
11501   remote_ops.to_can_use_agent = remote_can_use_agent;
11502   remote_ops.to_supports_btrace = remote_supports_btrace;
11503   remote_ops.to_enable_btrace = remote_enable_btrace;
11504   remote_ops.to_disable_btrace = remote_disable_btrace;
11505   remote_ops.to_teardown_btrace = remote_teardown_btrace;
11506   remote_ops.to_read_btrace = remote_read_btrace;
11507   remote_ops.to_augmented_libraries_svr4_read =
11508     remote_augmented_libraries_svr4_read;
11509 }
11510
11511 /* Set up the extended remote vector by making a copy of the standard
11512    remote vector and adding to it.  */
11513
11514 static void
11515 init_extended_remote_ops (void)
11516 {
11517   extended_remote_ops = remote_ops;
11518
11519   extended_remote_ops.to_shortname = "extended-remote";
11520   extended_remote_ops.to_longname =
11521     "Extended remote serial target in gdb-specific protocol";
11522   extended_remote_ops.to_doc =
11523     "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
11524 Specify the serial device it is connected to (e.g. /dev/ttya).";
11525   extended_remote_ops.to_open = extended_remote_open;
11526   extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
11527   extended_remote_ops.to_mourn_inferior = extended_remote_mourn;
11528   extended_remote_ops.to_detach = extended_remote_detach;
11529   extended_remote_ops.to_attach = extended_remote_attach;
11530   extended_remote_ops.to_kill = extended_remote_kill;
11531   extended_remote_ops.to_supports_disable_randomization
11532     = extended_remote_supports_disable_randomization;
11533 }
11534
11535 static int
11536 remote_can_async_p (struct target_ops *ops)
11537 {
11538   struct remote_state *rs = get_remote_state ();
11539
11540   if (!target_async_permitted)
11541     /* We only enable async when the user specifically asks for it.  */
11542     return 0;
11543
11544   /* We're async whenever the serial device is.  */
11545   return serial_can_async_p (rs->remote_desc);
11546 }
11547
11548 static int
11549 remote_is_async_p (struct target_ops *ops)
11550 {
11551   struct remote_state *rs = get_remote_state ();
11552
11553   if (!target_async_permitted)
11554     /* We only enable async when the user specifically asks for it.  */
11555     return 0;
11556
11557   /* We're async whenever the serial device is.  */
11558   return serial_is_async_p (rs->remote_desc);
11559 }
11560
11561 /* Pass the SERIAL event on and up to the client.  One day this code
11562    will be able to delay notifying the client of an event until the
11563    point where an entire packet has been received.  */
11564
11565 static serial_event_ftype remote_async_serial_handler;
11566
11567 static void
11568 remote_async_serial_handler (struct serial *scb, void *context)
11569 {
11570   struct remote_state *rs = context;
11571
11572   /* Don't propogate error information up to the client.  Instead let
11573      the client find out about the error by querying the target.  */
11574   rs->async_client_callback (INF_REG_EVENT, rs->async_client_context);
11575 }
11576
11577 static void
11578 remote_async_inferior_event_handler (gdb_client_data data)
11579 {
11580   inferior_event_handler (INF_REG_EVENT, NULL);
11581 }
11582
11583 static void
11584 remote_async (struct target_ops *ops,
11585               void (*callback) (enum inferior_event_type event_type,
11586                                 void *context),
11587               void *context)
11588 {
11589   struct remote_state *rs = get_remote_state ();
11590
11591   if (callback != NULL)
11592     {
11593       serial_async (rs->remote_desc, remote_async_serial_handler, rs);
11594       rs->async_client_callback = callback;
11595       rs->async_client_context = context;
11596     }
11597   else
11598     serial_async (rs->remote_desc, NULL, NULL);
11599 }
11600
11601 static void
11602 set_remote_cmd (char *args, int from_tty)
11603 {
11604   help_list (remote_set_cmdlist, "set remote ", all_commands, gdb_stdout);
11605 }
11606
11607 static void
11608 show_remote_cmd (char *args, int from_tty)
11609 {
11610   /* We can't just use cmd_show_list here, because we want to skip
11611      the redundant "show remote Z-packet" and the legacy aliases.  */
11612   struct cleanup *showlist_chain;
11613   struct cmd_list_element *list = remote_show_cmdlist;
11614   struct ui_out *uiout = current_uiout;
11615
11616   showlist_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "showlist");
11617   for (; list != NULL; list = list->next)
11618     if (strcmp (list->name, "Z-packet") == 0)
11619       continue;
11620     else if (list->type == not_set_cmd)
11621       /* Alias commands are exactly like the original, except they
11622          don't have the normal type.  */
11623       continue;
11624     else
11625       {
11626         struct cleanup *option_chain
11627           = make_cleanup_ui_out_tuple_begin_end (uiout, "option");
11628
11629         ui_out_field_string (uiout, "name", list->name);
11630         ui_out_text (uiout, ":  ");
11631         if (list->type == show_cmd)
11632           do_show_command ((char *) NULL, from_tty, list);
11633         else
11634           cmd_func (list, NULL, from_tty);
11635         /* Close the tuple.  */
11636         do_cleanups (option_chain);
11637       }
11638
11639   /* Close the tuple.  */
11640   do_cleanups (showlist_chain);
11641 }
11642
11643
11644 /* Function to be called whenever a new objfile (shlib) is detected.  */
11645 static void
11646 remote_new_objfile (struct objfile *objfile)
11647 {
11648   struct remote_state *rs = get_remote_state ();
11649
11650   if (rs->remote_desc != 0)             /* Have a remote connection.  */
11651     remote_check_symbols ();
11652 }
11653
11654 /* Pull all the tracepoints defined on the target and create local
11655    data structures representing them.  We don't want to create real
11656    tracepoints yet, we don't want to mess up the user's existing
11657    collection.  */
11658   
11659 static int
11660 remote_upload_tracepoints (struct target_ops *self, struct uploaded_tp **utpp)
11661 {
11662   struct remote_state *rs = get_remote_state ();
11663   char *p;
11664
11665   /* Ask for a first packet of tracepoint definition.  */
11666   putpkt ("qTfP");
11667   getpkt (&rs->buf, &rs->buf_size, 0);
11668   p = rs->buf;
11669   while (*p && *p != 'l')
11670     {
11671       parse_tracepoint_definition (p, utpp);
11672       /* Ask for another packet of tracepoint definition.  */
11673       putpkt ("qTsP");
11674       getpkt (&rs->buf, &rs->buf_size, 0);
11675       p = rs->buf;
11676     }
11677   return 0;
11678 }
11679
11680 static int
11681 remote_upload_trace_state_variables (struct target_ops *self,
11682                                      struct uploaded_tsv **utsvp)
11683 {
11684   struct remote_state *rs = get_remote_state ();
11685   char *p;
11686
11687   /* Ask for a first packet of variable definition.  */
11688   putpkt ("qTfV");
11689   getpkt (&rs->buf, &rs->buf_size, 0);
11690   p = rs->buf;
11691   while (*p && *p != 'l')
11692     {
11693       parse_tsv_definition (p, utsvp);
11694       /* Ask for another packet of variable definition.  */
11695       putpkt ("qTsV");
11696       getpkt (&rs->buf, &rs->buf_size, 0);
11697       p = rs->buf;
11698     }
11699   return 0;
11700 }
11701
11702 /* The "set/show range-stepping" show hook.  */
11703
11704 static void
11705 show_range_stepping (struct ui_file *file, int from_tty,
11706                      struct cmd_list_element *c,
11707                      const char *value)
11708 {
11709   fprintf_filtered (file,
11710                     _("Debugger's willingness to use range stepping "
11711                       "is %s.\n"), value);
11712 }
11713
11714 /* The "set/show range-stepping" set hook.  */
11715
11716 static void
11717 set_range_stepping (char *ignore_args, int from_tty,
11718                     struct cmd_list_element *c)
11719 {
11720   struct remote_state *rs = get_remote_state ();
11721
11722   /* Whene enabling, check whether range stepping is actually
11723      supported by the target, and warn if not.  */
11724   if (use_range_stepping)
11725     {
11726       if (rs->remote_desc != NULL)
11727         {
11728           if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
11729             remote_vcont_probe (rs);
11730
11731           if (packet_support (PACKET_vCont) == PACKET_ENABLE
11732               && rs->supports_vCont.r)
11733             return;
11734         }
11735
11736       warning (_("Range stepping is not supported by the current target"));
11737     }
11738 }
11739
11740 void
11741 _initialize_remote (void)
11742 {
11743   struct remote_state *rs;
11744   struct cmd_list_element *cmd;
11745   const char *cmd_name;
11746
11747   /* architecture specific data */
11748   remote_gdbarch_data_handle =
11749     gdbarch_data_register_post_init (init_remote_state);
11750   remote_g_packet_data_handle =
11751     gdbarch_data_register_pre_init (remote_g_packet_data_init);
11752
11753   /* Initialize the per-target state.  At the moment there is only one
11754      of these, not one per target.  Only one target is active at a
11755      time.  */
11756   remote_state = new_remote_state ();
11757
11758   init_remote_ops ();
11759   add_target (&remote_ops);
11760
11761   init_extended_remote_ops ();
11762   add_target (&extended_remote_ops);
11763
11764   /* Hook into new objfile notification.  */
11765   observer_attach_new_objfile (remote_new_objfile);
11766   /* We're no longer interested in notification events of an inferior
11767      when it exits.  */
11768   observer_attach_inferior_exit (discard_pending_stop_replies);
11769
11770   /* Set up signal handlers.  */
11771   async_sigint_remote_token =
11772     create_async_signal_handler (async_remote_interrupt, NULL);
11773   async_sigint_remote_twice_token =
11774     create_async_signal_handler (async_remote_interrupt_twice, NULL);
11775
11776 #if 0
11777   init_remote_threadtests ();
11778 #endif
11779
11780   stop_reply_queue = QUEUE_alloc (stop_reply_p, stop_reply_xfree);
11781   /* set/show remote ...  */
11782
11783   add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
11784 Remote protocol specific variables\n\
11785 Configure various remote-protocol specific variables such as\n\
11786 the packets being used"),
11787                   &remote_set_cmdlist, "set remote ",
11788                   0 /* allow-unknown */, &setlist);
11789   add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
11790 Remote protocol specific variables\n\
11791 Configure various remote-protocol specific variables such as\n\
11792 the packets being used"),
11793                   &remote_show_cmdlist, "show remote ",
11794                   0 /* allow-unknown */, &showlist);
11795
11796   add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
11797 Compare section data on target to the exec file.\n\
11798 Argument is a single section name (default: all loaded sections).\n\
11799 To compare only read-only loaded sections, specify the -r option."),
11800            &cmdlist);
11801
11802   add_cmd ("packet", class_maintenance, packet_command, _("\
11803 Send an arbitrary packet to a remote target.\n\
11804    maintenance packet TEXT\n\
11805 If GDB is talking to an inferior via the GDB serial protocol, then\n\
11806 this command sends the string TEXT to the inferior, and displays the\n\
11807 response packet.  GDB supplies the initial `$' character, and the\n\
11808 terminating `#' character and checksum."),
11809            &maintenancelist);
11810
11811   add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
11812 Set whether to send break if interrupted."), _("\
11813 Show whether to send break if interrupted."), _("\
11814 If set, a break, instead of a cntrl-c, is sent to the remote target."),
11815                            set_remotebreak, show_remotebreak,
11816                            &setlist, &showlist);
11817   cmd_name = "remotebreak";
11818   cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
11819   deprecate_cmd (cmd, "set remote interrupt-sequence");
11820   cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
11821   cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
11822   deprecate_cmd (cmd, "show remote interrupt-sequence");
11823
11824   add_setshow_enum_cmd ("interrupt-sequence", class_support,
11825                         interrupt_sequence_modes, &interrupt_sequence_mode,
11826                         _("\
11827 Set interrupt sequence to remote target."), _("\
11828 Show interrupt sequence to remote target."), _("\
11829 Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
11830                         NULL, show_interrupt_sequence,
11831                         &remote_set_cmdlist,
11832                         &remote_show_cmdlist);
11833
11834   add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
11835                            &interrupt_on_connect, _("\
11836 Set whether interrupt-sequence is sent to remote target when gdb connects to."), _("            \
11837 Show whether interrupt-sequence is sent to remote target when gdb connects to."), _("           \
11838 If set, interrupt sequence is sent to remote target."),
11839                            NULL, NULL,
11840                            &remote_set_cmdlist, &remote_show_cmdlist);
11841
11842   /* Install commands for configuring memory read/write packets.  */
11843
11844   add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
11845 Set the maximum number of bytes per memory write packet (deprecated)."),
11846            &setlist);
11847   add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
11848 Show the maximum number of bytes per memory write packet (deprecated)."),
11849            &showlist);
11850   add_cmd ("memory-write-packet-size", no_class,
11851            set_memory_write_packet_size, _("\
11852 Set the maximum number of bytes per memory-write packet.\n\
11853 Specify the number of bytes in a packet or 0 (zero) for the\n\
11854 default packet size.  The actual limit is further reduced\n\
11855 dependent on the target.  Specify ``fixed'' to disable the\n\
11856 further restriction and ``limit'' to enable that restriction."),
11857            &remote_set_cmdlist);
11858   add_cmd ("memory-read-packet-size", no_class,
11859            set_memory_read_packet_size, _("\
11860 Set the maximum number of bytes per memory-read packet.\n\
11861 Specify the number of bytes in a packet or 0 (zero) for the\n\
11862 default packet size.  The actual limit is further reduced\n\
11863 dependent on the target.  Specify ``fixed'' to disable the\n\
11864 further restriction and ``limit'' to enable that restriction."),
11865            &remote_set_cmdlist);
11866   add_cmd ("memory-write-packet-size", no_class,
11867            show_memory_write_packet_size,
11868            _("Show the maximum number of bytes per memory-write packet."),
11869            &remote_show_cmdlist);
11870   add_cmd ("memory-read-packet-size", no_class,
11871            show_memory_read_packet_size,
11872            _("Show the maximum number of bytes per memory-read packet."),
11873            &remote_show_cmdlist);
11874
11875   add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
11876                             &remote_hw_watchpoint_limit, _("\
11877 Set the maximum number of target hardware watchpoints."), _("\
11878 Show the maximum number of target hardware watchpoints."), _("\
11879 Specify a negative limit for unlimited."),
11880                             NULL, NULL, /* FIXME: i18n: The maximum
11881                                            number of target hardware
11882                                            watchpoints is %s.  */
11883                             &remote_set_cmdlist, &remote_show_cmdlist);
11884   add_setshow_zinteger_cmd ("hardware-watchpoint-length-limit", no_class,
11885                             &remote_hw_watchpoint_length_limit, _("\
11886 Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
11887 Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
11888 Specify a negative limit for unlimited."),
11889                             NULL, NULL, /* FIXME: i18n: The maximum
11890                                            length (in bytes) of a target
11891                                            hardware watchpoint is %s.  */
11892                             &remote_set_cmdlist, &remote_show_cmdlist);
11893   add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
11894                             &remote_hw_breakpoint_limit, _("\
11895 Set the maximum number of target hardware breakpoints."), _("\
11896 Show the maximum number of target hardware breakpoints."), _("\
11897 Specify a negative limit for unlimited."),
11898                             NULL, NULL, /* FIXME: i18n: The maximum
11899                                            number of target hardware
11900                                            breakpoints is %s.  */
11901                             &remote_set_cmdlist, &remote_show_cmdlist);
11902
11903   add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
11904                              &remote_address_size, _("\
11905 Set the maximum size of the address (in bits) in a memory packet."), _("\
11906 Show the maximum size of the address (in bits) in a memory packet."), NULL,
11907                              NULL,
11908                              NULL, /* FIXME: i18n: */
11909                              &setlist, &showlist);
11910
11911   init_all_packet_configs ();
11912
11913   add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
11914                          "X", "binary-download", 1);
11915
11916   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
11917                          "vCont", "verbose-resume", 0);
11918
11919   add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
11920                          "QPassSignals", "pass-signals", 0);
11921
11922   add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
11923                          "QProgramSignals", "program-signals", 0);
11924
11925   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
11926                          "qSymbol", "symbol-lookup", 0);
11927
11928   add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
11929                          "P", "set-register", 1);
11930
11931   add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
11932                          "p", "fetch-register", 1);
11933
11934   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
11935                          "Z0", "software-breakpoint", 0);
11936
11937   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
11938                          "Z1", "hardware-breakpoint", 0);
11939
11940   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
11941                          "Z2", "write-watchpoint", 0);
11942
11943   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
11944                          "Z3", "read-watchpoint", 0);
11945
11946   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
11947                          "Z4", "access-watchpoint", 0);
11948
11949   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
11950                          "qXfer:auxv:read", "read-aux-vector", 0);
11951
11952   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
11953                          "qXfer:features:read", "target-features", 0);
11954
11955   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
11956                          "qXfer:libraries:read", "library-info", 0);
11957
11958   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
11959                          "qXfer:libraries-svr4:read", "library-info-svr4", 0);
11960
11961   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
11962                          "qXfer:memory-map:read", "memory-map", 0);
11963
11964   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
11965                          "qXfer:spu:read", "read-spu-object", 0);
11966
11967   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
11968                          "qXfer:spu:write", "write-spu-object", 0);
11969
11970   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
11971                         "qXfer:osdata:read", "osdata", 0);
11972
11973   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
11974                          "qXfer:threads:read", "threads", 0);
11975
11976   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
11977                          "qXfer:siginfo:read", "read-siginfo-object", 0);
11978
11979   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
11980                          "qXfer:siginfo:write", "write-siginfo-object", 0);
11981
11982   add_packet_config_cmd
11983     (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
11984      "qXfer:traceframe-info:read", "traceframe-info", 0);
11985
11986   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
11987                          "qXfer:uib:read", "unwind-info-block", 0);
11988
11989   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
11990                          "qGetTLSAddr", "get-thread-local-storage-address",
11991                          0);
11992
11993   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
11994                          "qGetTIBAddr", "get-thread-information-block-address",
11995                          0);
11996
11997   add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
11998                          "bc", "reverse-continue", 0);
11999
12000   add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
12001                          "bs", "reverse-step", 0);
12002
12003   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
12004                          "qSupported", "supported-packets", 0);
12005
12006   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
12007                          "qSearch:memory", "search-memory", 0);
12008
12009   add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
12010                          "qTStatus", "trace-status", 0);
12011
12012   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
12013                          "vFile:open", "hostio-open", 0);
12014
12015   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
12016                          "vFile:pread", "hostio-pread", 0);
12017
12018   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
12019                          "vFile:pwrite", "hostio-pwrite", 0);
12020
12021   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
12022                          "vFile:close", "hostio-close", 0);
12023
12024   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
12025                          "vFile:unlink", "hostio-unlink", 0);
12026
12027   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
12028                          "vFile:readlink", "hostio-readlink", 0);
12029
12030   add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
12031                          "vAttach", "attach", 0);
12032
12033   add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
12034                          "vRun", "run", 0);
12035
12036   add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
12037                          "QStartNoAckMode", "noack", 0);
12038
12039   add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
12040                          "vKill", "kill", 0);
12041
12042   add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
12043                          "qAttached", "query-attached", 0);
12044
12045   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
12046                          "ConditionalTracepoints",
12047                          "conditional-tracepoints", 0);
12048
12049   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
12050                          "ConditionalBreakpoints",
12051                          "conditional-breakpoints", 0);
12052
12053   add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
12054                          "BreakpointCommands",
12055                          "breakpoint-commands", 0);
12056
12057   add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
12058                          "FastTracepoints", "fast-tracepoints", 0);
12059
12060   add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
12061                          "TracepointSource", "TracepointSource", 0);
12062
12063   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
12064                          "QAllow", "allow", 0);
12065
12066   add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
12067                          "StaticTracepoints", "static-tracepoints", 0);
12068
12069   add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
12070                          "InstallInTrace", "install-in-trace", 0);
12071
12072   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
12073                          "qXfer:statictrace:read", "read-sdata-object", 0);
12074
12075   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
12076                          "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
12077
12078   add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
12079                          "QDisableRandomization", "disable-randomization", 0);
12080
12081   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
12082                          "QAgent", "agent", 0);
12083
12084   add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
12085                          "QTBuffer:size", "trace-buffer-size", 0);
12086
12087   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
12088        "Qbtrace:off", "disable-btrace", 0);
12089
12090   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
12091        "Qbtrace:bts", "enable-btrace", 0);
12092
12093   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
12094        "qXfer:btrace", "read-btrace", 0);
12095
12096   /* Assert that we've registered commands for all packet configs.  */
12097   {
12098     int i;
12099
12100     for (i = 0; i < PACKET_MAX; i++)
12101       {
12102         /* Ideally all configs would have a command associated.  Some
12103            still don't though.  */
12104         int excepted;
12105
12106         switch (i)
12107           {
12108           case PACKET_QNonStop:
12109           case PACKET_multiprocess_feature:
12110           case PACKET_EnableDisableTracepoints_feature:
12111           case PACKET_tracenz_feature:
12112           case PACKET_DisconnectedTracing_feature:
12113           case PACKET_augmented_libraries_svr4_read_feature:
12114           case PACKET_qCRC:
12115             /* Additions to this list need to be well justified:
12116                pre-existing packets are OK; new packets are not.  */
12117             excepted = 1;
12118             break;
12119           default:
12120             excepted = 0;
12121             break;
12122           }
12123
12124         /* This catches both forgetting to add a config command, and
12125            forgetting to remove a packet from the exception list.  */
12126         gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
12127       }
12128   }
12129
12130   /* Keep the old ``set remote Z-packet ...'' working.  Each individual
12131      Z sub-packet has its own set and show commands, but users may
12132      have sets to this variable in their .gdbinit files (or in their
12133      documentation).  */
12134   add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
12135                                 &remote_Z_packet_detect, _("\
12136 Set use of remote protocol `Z' packets"), _("\
12137 Show use of remote protocol `Z' packets "), _("\
12138 When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
12139 packets."),
12140                                 set_remote_protocol_Z_packet_cmd,
12141                                 show_remote_protocol_Z_packet_cmd,
12142                                 /* FIXME: i18n: Use of remote protocol
12143                                    `Z' packets is %s.  */
12144                                 &remote_set_cmdlist, &remote_show_cmdlist);
12145
12146   add_prefix_cmd ("remote", class_files, remote_command, _("\
12147 Manipulate files on the remote system\n\
12148 Transfer files to and from the remote target system."),
12149                   &remote_cmdlist, "remote ",
12150                   0 /* allow-unknown */, &cmdlist);
12151
12152   add_cmd ("put", class_files, remote_put_command,
12153            _("Copy a local file to the remote system."),
12154            &remote_cmdlist);
12155
12156   add_cmd ("get", class_files, remote_get_command,
12157            _("Copy a remote file to the local system."),
12158            &remote_cmdlist);
12159
12160   add_cmd ("delete", class_files, remote_delete_command,
12161            _("Delete a remote file."),
12162            &remote_cmdlist);
12163
12164   remote_exec_file = xstrdup ("");
12165   add_setshow_string_noescape_cmd ("exec-file", class_files,
12166                                    &remote_exec_file, _("\
12167 Set the remote pathname for \"run\""), _("\
12168 Show the remote pathname for \"run\""), NULL, NULL, NULL,
12169                                    &remote_set_cmdlist, &remote_show_cmdlist);
12170
12171   add_setshow_boolean_cmd ("range-stepping", class_run,
12172                            &use_range_stepping, _("\
12173 Enable or disable range stepping."), _("\
12174 Show whether target-assisted range stepping is enabled."), _("\
12175 If on, and the target supports it, when stepping a source line, GDB\n\
12176 tells the target to step the corresponding range of addresses itself instead\n\
12177 of issuing multiple single-steps.  This speeds up source level\n\
12178 stepping.  If off, GDB always issues single-steps, even if range\n\
12179 stepping is supported by the target.  The default is on."),
12180                            set_range_stepping,
12181                            show_range_stepping,
12182                            &setlist,
12183                            &showlist);
12184
12185   /* Eventually initialize fileio.  See fileio.c */
12186   initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
12187
12188   /* Take advantage of the fact that the TID field is not used, to tag
12189      special ptids with it set to != 0.  */
12190   magic_null_ptid = ptid_build (42000, -1, 1);
12191   not_sent_ptid = ptid_build (42000, -2, 1);
12192   any_thread_ptid = ptid_build (42000, 0, 1);
12193
12194   target_buf_size = 2048;
12195   target_buf = xmalloc (target_buf_size);
12196 }
12197