Implement proper "startup-with-shell" support on gdbserver
[external/binutils.git] / gdb / gdbserver / server.c
1 /* Main code for remote server for GDB.
2    Copyright (C) 1989-2017 Free Software Foundation, Inc.
3
4    This file is part of GDB.
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
18
19 #include "server.h"
20 #include "gdbthread.h"
21 #include "agent.h"
22 #include "notif.h"
23 #include "tdesc.h"
24 #include "rsp-low.h"
25 #include "signals-state-save-restore.h"
26 #include <ctype.h>
27 #include <unistd.h>
28 #if HAVE_SIGNAL_H
29 #include <signal.h>
30 #endif
31 #include "gdb_vecs.h"
32 #include "gdb_wait.h"
33 #include "btrace-common.h"
34 #include "filestuff.h"
35 #include "tracepoint.h"
36 #include "dll.h"
37 #include "hostio.h"
38 #include <vector>
39 #include "common-inferior.h"
40 #include "job-control.h"
41 #include "environ.h"
42
43 /* The environment to pass to the inferior when creating it.  */
44
45 struct gdb_environ *our_environ = NULL;
46
47 /* Start the inferior using a shell.  */
48
49 /* We always try to start the inferior using a shell.  */
50
51 int startup_with_shell = 1;
52
53 /* The thread set with an `Hc' packet.  `Hc' is deprecated in favor of
54    `vCont'.  Note the multi-process extensions made `vCont' a
55    requirement, so `Hc pPID.TID' is pretty much undefined.  So
56    CONT_THREAD can be null_ptid for no `Hc' thread, minus_one_ptid for
57    resuming all threads of the process (again, `Hc' isn't used for
58    multi-process), or a specific thread ptid_t.  */
59 ptid_t cont_thread;
60
61 /* The thread set with an `Hg' packet.  */
62 ptid_t general_thread;
63
64 int server_waiting;
65
66 static int extended_protocol;
67 static int response_needed;
68 static int exit_requested;
69
70 /* --once: Exit after the first connection has closed.  */
71 int run_once;
72
73 int multi_process;
74 int report_fork_events;
75 int report_vfork_events;
76 int report_exec_events;
77 int report_thread_events;
78
79 /* Whether to report TARGET_WAITKING_NO_RESUMED events.  */
80 static int report_no_resumed;
81
82 int non_stop;
83 int swbreak_feature;
84 int hwbreak_feature;
85
86 /* True if the "vContSupported" feature is active.  In that case, GDB
87    wants us to report whether single step is supported in the reply to
88    "vCont?" packet.  */
89 static int vCont_supported;
90
91 /* Whether we should attempt to disable the operating system's address
92    space randomization feature before starting an inferior.  */
93 int disable_randomization = 1;
94
95 static char *program_name = NULL;
96 static std::vector<char *> program_args;
97 static std::string wrapper_argv;
98
99 int pass_signals[GDB_SIGNAL_LAST];
100 int program_signals[GDB_SIGNAL_LAST];
101 int program_signals_p;
102
103 /* The PID of the originally created or attached inferior.  Used to
104    send signals to the process when GDB sends us an asynchronous interrupt
105    (user hitting Control-C in the client), and to wait for the child to exit
106    when no longer debugging it.  */
107
108 unsigned long signal_pid;
109
110 /* Set if you want to disable optional thread related packets support
111    in gdbserver, for the sake of testing GDB against stubs that don't
112    support them.  */
113 int disable_packet_vCont;
114 int disable_packet_Tthread;
115 int disable_packet_qC;
116 int disable_packet_qfThreadInfo;
117
118 /* Last status reported to GDB.  */
119 struct target_waitstatus last_status;
120 ptid_t last_ptid;
121
122 char *own_buf;
123 static unsigned char *mem_buf;
124
125 /* A sub-class of 'struct notif_event' for stop, holding information
126    relative to a single stop reply.  We keep a queue of these to
127    push to GDB in non-stop mode.  */
128
129 struct vstop_notif
130 {
131   struct notif_event base;
132
133   /* Thread or process that got the event.  */
134   ptid_t ptid;
135
136   /* Event info.  */
137   struct target_waitstatus status;
138 };
139
140 /* The current btrace configuration.  This is gdbserver's mirror of GDB's
141    btrace configuration.  */
142 static struct btrace_config current_btrace_conf;
143
144 DEFINE_QUEUE_P (notif_event_p);
145
146 /* Put a stop reply to the stop reply queue.  */
147
148 static void
149 queue_stop_reply (ptid_t ptid, struct target_waitstatus *status)
150 {
151   struct vstop_notif *new_notif = XNEW (struct vstop_notif);
152
153   new_notif->ptid = ptid;
154   new_notif->status = *status;
155
156   notif_event_enque (&notif_stop, (struct notif_event *) new_notif);
157 }
158
159 static int
160 remove_all_on_match_ptid (QUEUE (notif_event_p) *q,
161                           QUEUE_ITER (notif_event_p) *iter,
162                           struct notif_event *event,
163                           void *data)
164 {
165   ptid_t filter_ptid = *(ptid_t *) data;
166   struct vstop_notif *vstop_event = (struct vstop_notif *) event;
167
168   if (ptid_match (vstop_event->ptid, filter_ptid))
169     {
170       if (q->free_func != NULL)
171         q->free_func (event);
172
173       QUEUE_remove_elem (notif_event_p, q, iter);
174     }
175
176   return 1;
177 }
178
179 /* See server.h.  */
180
181 void
182 discard_queued_stop_replies (ptid_t ptid)
183 {
184   QUEUE_iterate (notif_event_p, notif_stop.queue,
185                  remove_all_on_match_ptid, &ptid);
186 }
187
188 static void
189 vstop_notif_reply (struct notif_event *event, char *own_buf)
190 {
191   struct vstop_notif *vstop = (struct vstop_notif *) event;
192
193   prepare_resume_reply (own_buf, vstop->ptid, &vstop->status);
194 }
195
196 /* QUEUE_iterate callback helper for in_queued_stop_replies.  */
197
198 static int
199 in_queued_stop_replies_ptid (QUEUE (notif_event_p) *q,
200                              QUEUE_ITER (notif_event_p) *iter,
201                              struct notif_event *event,
202                              void *data)
203 {
204   ptid_t filter_ptid = *(ptid_t *) data;
205   struct vstop_notif *vstop_event = (struct vstop_notif *) event;
206
207   if (ptid_match (vstop_event->ptid, filter_ptid))
208     return 0;
209
210   /* Don't resume fork children that GDB does not know about yet.  */
211   if ((vstop_event->status.kind == TARGET_WAITKIND_FORKED
212        || vstop_event->status.kind == TARGET_WAITKIND_VFORKED)
213       && ptid_match (vstop_event->status.value.related_pid, filter_ptid))
214     return 0;
215
216   return 1;
217 }
218
219 /* See server.h.  */
220
221 int
222 in_queued_stop_replies (ptid_t ptid)
223 {
224   return !QUEUE_iterate (notif_event_p, notif_stop.queue,
225                          in_queued_stop_replies_ptid, &ptid);
226 }
227
228 struct notif_server notif_stop =
229 {
230   "vStopped", "Stop", NULL, vstop_notif_reply,
231 };
232
233 static int
234 target_running (void)
235 {
236   return get_first_thread () != NULL;
237 }
238
239 /* See common/common-inferior.h.  */
240
241 const char *
242 get_exec_wrapper ()
243 {
244   return !wrapper_argv.empty () ? wrapper_argv.c_str () : NULL;
245 }
246
247 /* See common/common-inferior.h.  */
248
249 char *
250 get_exec_file (int err)
251 {
252   if (err && program_name == NULL)
253     error (_("No executable file specified."));
254
255   return program_name;
256 }
257
258 /* See server.h.  */
259
260 struct gdb_environ *
261 get_environ ()
262 {
263   return our_environ;
264 }
265
266 static int
267 attach_inferior (int pid)
268 {
269   /* myattach should return -1 if attaching is unsupported,
270      0 if it succeeded, and call error() otherwise.  */
271
272   if (myattach (pid) != 0)
273     return -1;
274
275   fprintf (stderr, "Attached; pid = %d\n", pid);
276   fflush (stderr);
277
278   /* FIXME - It may be that we should get the SIGNAL_PID from the
279      attach function, so that it can be the main thread instead of
280      whichever we were told to attach to.  */
281   signal_pid = pid;
282
283   if (!non_stop)
284     {
285       last_ptid = mywait (pid_to_ptid (pid), &last_status, 0, 0);
286
287       /* GDB knows to ignore the first SIGSTOP after attaching to a running
288          process using the "attach" command, but this is different; it's
289          just using "target remote".  Pretend it's just starting up.  */
290       if (last_status.kind == TARGET_WAITKIND_STOPPED
291           && last_status.value.sig == GDB_SIGNAL_STOP)
292         last_status.value.sig = GDB_SIGNAL_TRAP;
293
294       current_thread->last_resume_kind = resume_stop;
295       current_thread->last_status = last_status;
296     }
297
298   return 0;
299 }
300
301 extern int remote_debug;
302
303 /* Decode a qXfer read request.  Return 0 if everything looks OK,
304    or -1 otherwise.  */
305
306 static int
307 decode_xfer_read (char *buf, CORE_ADDR *ofs, unsigned int *len)
308 {
309   /* After the read marker and annex, qXfer looks like a
310      traditional 'm' packet.  */
311   decode_m_packet (buf, ofs, len);
312
313   return 0;
314 }
315
316 static int
317 decode_xfer (char *buf, char **object, char **rw, char **annex, char **offset)
318 {
319   /* Extract and NUL-terminate the object.  */
320   *object = buf;
321   while (*buf && *buf != ':')
322     buf++;
323   if (*buf == '\0')
324     return -1;
325   *buf++ = 0;
326
327   /* Extract and NUL-terminate the read/write action.  */
328   *rw = buf;
329   while (*buf && *buf != ':')
330     buf++;
331   if (*buf == '\0')
332     return -1;
333   *buf++ = 0;
334
335   /* Extract and NUL-terminate the annex.  */
336   *annex = buf;
337   while (*buf && *buf != ':')
338     buf++;
339   if (*buf == '\0')
340     return -1;
341   *buf++ = 0;
342
343   *offset = buf;
344   return 0;
345 }
346
347 /* Write the response to a successful qXfer read.  Returns the
348    length of the (binary) data stored in BUF, corresponding
349    to as much of DATA/LEN as we could fit.  IS_MORE controls
350    the first character of the response.  */
351 static int
352 write_qxfer_response (char *buf, const gdb_byte *data, int len, int is_more)
353 {
354   int out_len;
355
356   if (is_more)
357     buf[0] = 'm';
358   else
359     buf[0] = 'l';
360
361   return remote_escape_output (data, len, 1, (unsigned char *) buf + 1,
362                                &out_len, PBUFSIZ - 2) + 1;
363 }
364
365 /* Handle btrace enabling in BTS format.  */
366
367 static const char *
368 handle_btrace_enable_bts (struct thread_info *thread)
369 {
370   if (thread->btrace != NULL)
371     return "E.Btrace already enabled.";
372
373   current_btrace_conf.format = BTRACE_FORMAT_BTS;
374   thread->btrace = target_enable_btrace (thread->entry.id,
375                                          &current_btrace_conf);
376   if (thread->btrace == NULL)
377     return "E.Could not enable btrace.";
378
379   return NULL;
380 }
381
382 /* Handle btrace enabling in Intel Processor Trace format.  */
383
384 static const char *
385 handle_btrace_enable_pt (struct thread_info *thread)
386 {
387   if (thread->btrace != NULL)
388     return "E.Btrace already enabled.";
389
390   current_btrace_conf.format = BTRACE_FORMAT_PT;
391   thread->btrace = target_enable_btrace (thread->entry.id,
392                                          &current_btrace_conf);
393   if (thread->btrace == NULL)
394     return "E.Could not enable btrace.";
395
396   return NULL;
397 }
398
399 /* Handle btrace disabling.  */
400
401 static const char *
402 handle_btrace_disable (struct thread_info *thread)
403 {
404
405   if (thread->btrace == NULL)
406     return "E.Branch tracing not enabled.";
407
408   if (target_disable_btrace (thread->btrace) != 0)
409     return "E.Could not disable branch tracing.";
410
411   thread->btrace = NULL;
412   return NULL;
413 }
414
415 /* Handle the "Qbtrace" packet.  */
416
417 static int
418 handle_btrace_general_set (char *own_buf)
419 {
420   struct thread_info *thread;
421   const char *err;
422   char *op;
423
424   if (!startswith (own_buf, "Qbtrace:"))
425     return 0;
426
427   op = own_buf + strlen ("Qbtrace:");
428
429   if (ptid_equal (general_thread, null_ptid)
430       || ptid_equal (general_thread, minus_one_ptid))
431     {
432       strcpy (own_buf, "E.Must select a single thread.");
433       return -1;
434     }
435
436   thread = find_thread_ptid (general_thread);
437   if (thread == NULL)
438     {
439       strcpy (own_buf, "E.No such thread.");
440       return -1;
441     }
442
443   err = NULL;
444
445   if (strcmp (op, "bts") == 0)
446     err = handle_btrace_enable_bts (thread);
447   else if (strcmp (op, "pt") == 0)
448     err = handle_btrace_enable_pt (thread);
449   else if (strcmp (op, "off") == 0)
450     err = handle_btrace_disable (thread);
451   else
452     err = "E.Bad Qbtrace operation. Use bts, pt, or off.";
453
454   if (err != 0)
455     strcpy (own_buf, err);
456   else
457     write_ok (own_buf);
458
459   return 1;
460 }
461
462 /* Handle the "Qbtrace-conf" packet.  */
463
464 static int
465 handle_btrace_conf_general_set (char *own_buf)
466 {
467   struct thread_info *thread;
468   char *op;
469
470   if (!startswith (own_buf, "Qbtrace-conf:"))
471     return 0;
472
473   op = own_buf + strlen ("Qbtrace-conf:");
474
475   if (ptid_equal (general_thread, null_ptid)
476       || ptid_equal (general_thread, minus_one_ptid))
477     {
478       strcpy (own_buf, "E.Must select a single thread.");
479       return -1;
480     }
481
482   thread = find_thread_ptid (general_thread);
483   if (thread == NULL)
484     {
485       strcpy (own_buf, "E.No such thread.");
486       return -1;
487     }
488
489   if (startswith (op, "bts:size="))
490     {
491       unsigned long size;
492       char *endp = NULL;
493
494       errno = 0;
495       size = strtoul (op + strlen ("bts:size="), &endp, 16);
496       if (endp == NULL || *endp != 0 || errno != 0 || size > UINT_MAX)
497         {
498           strcpy (own_buf, "E.Bad size value.");
499           return -1;
500         }
501
502       current_btrace_conf.bts.size = (unsigned int) size;
503     }
504   else if (strncmp (op, "pt:size=", strlen ("pt:size=")) == 0)
505     {
506       unsigned long size;
507       char *endp = NULL;
508
509       errno = 0;
510       size = strtoul (op + strlen ("pt:size="), &endp, 16);
511       if (endp == NULL || *endp != 0 || errno != 0 || size > UINT_MAX)
512         {
513           strcpy (own_buf, "E.Bad size value.");
514           return -1;
515         }
516
517       current_btrace_conf.pt.size = (unsigned int) size;
518     }
519   else
520     {
521       strcpy (own_buf, "E.Bad Qbtrace configuration option.");
522       return -1;
523     }
524
525   write_ok (own_buf);
526   return 1;
527 }
528
529 /* Handle all of the extended 'Q' packets.  */
530
531 static void
532 handle_general_set (char *own_buf)
533 {
534   if (startswith (own_buf, "QPassSignals:"))
535     {
536       int numsigs = (int) GDB_SIGNAL_LAST, i;
537       const char *p = own_buf + strlen ("QPassSignals:");
538       CORE_ADDR cursig;
539
540       p = decode_address_to_semicolon (&cursig, p);
541       for (i = 0; i < numsigs; i++)
542         {
543           if (i == cursig)
544             {
545               pass_signals[i] = 1;
546               if (*p == '\0')
547                 /* Keep looping, to clear the remaining signals.  */
548                 cursig = -1;
549               else
550                 p = decode_address_to_semicolon (&cursig, p);
551             }
552           else
553             pass_signals[i] = 0;
554         }
555       strcpy (own_buf, "OK");
556       return;
557     }
558
559   if (startswith (own_buf, "QProgramSignals:"))
560     {
561       int numsigs = (int) GDB_SIGNAL_LAST, i;
562       const char *p = own_buf + strlen ("QProgramSignals:");
563       CORE_ADDR cursig;
564
565       program_signals_p = 1;
566
567       p = decode_address_to_semicolon (&cursig, p);
568       for (i = 0; i < numsigs; i++)
569         {
570           if (i == cursig)
571             {
572               program_signals[i] = 1;
573               if (*p == '\0')
574                 /* Keep looping, to clear the remaining signals.  */
575                 cursig = -1;
576               else
577                 p = decode_address_to_semicolon (&cursig, p);
578             }
579           else
580             program_signals[i] = 0;
581         }
582       strcpy (own_buf, "OK");
583       return;
584     }
585
586   if (startswith (own_buf, "QCatchSyscalls:"))
587     {
588       const char *p = own_buf + sizeof ("QCatchSyscalls:") - 1;
589       int enabled = -1;
590       CORE_ADDR sysno;
591       struct process_info *process;
592
593       if (!target_running () || !target_supports_catch_syscall ())
594         {
595           write_enn (own_buf);
596           return;
597         }
598
599       if (strcmp (p, "0") == 0)
600         enabled = 0;
601       else if (p[0] == '1' && (p[1] == ';' || p[1] == '\0'))
602         enabled = 1;
603       else
604         {
605           fprintf (stderr, "Unknown catch-syscalls mode requested: %s\n",
606                    own_buf);
607           write_enn (own_buf);
608           return;
609         }
610
611       process = current_process ();
612       VEC_truncate (int, process->syscalls_to_catch, 0);
613
614       if (enabled)
615         {
616           p += 1;
617           if (*p == ';')
618             {
619               p += 1;
620               while (*p != '\0')
621                 {
622                   p = decode_address_to_semicolon (&sysno, p);
623                   VEC_safe_push (int, process->syscalls_to_catch, (int) sysno);
624                 }
625             }
626           else
627             VEC_safe_push (int, process->syscalls_to_catch, ANY_SYSCALL);
628         }
629
630       write_ok (own_buf);
631       return;
632     }
633
634   if (strcmp (own_buf, "QStartNoAckMode") == 0)
635     {
636       if (remote_debug)
637         {
638           debug_printf ("[noack mode enabled]\n");
639           debug_flush ();
640         }
641
642       noack_mode = 1;
643       write_ok (own_buf);
644       return;
645     }
646
647   if (startswith (own_buf, "QNonStop:"))
648     {
649       char *mode = own_buf + 9;
650       int req = -1;
651       const char *req_str;
652
653       if (strcmp (mode, "0") == 0)
654         req = 0;
655       else if (strcmp (mode, "1") == 0)
656         req = 1;
657       else
658         {
659           /* We don't know what this mode is, so complain to
660              GDB.  */
661           fprintf (stderr, "Unknown non-stop mode requested: %s\n",
662                    own_buf);
663           write_enn (own_buf);
664           return;
665         }
666
667       req_str = req ? "non-stop" : "all-stop";
668       if (start_non_stop (req) != 0)
669         {
670           fprintf (stderr, "Setting %s mode failed\n", req_str);
671           write_enn (own_buf);
672           return;
673         }
674
675       non_stop = req;
676
677       if (remote_debug)
678         debug_printf ("[%s mode enabled]\n", req_str);
679
680       write_ok (own_buf);
681       return;
682     }
683
684   if (startswith (own_buf, "QDisableRandomization:"))
685     {
686       char *packet = own_buf + strlen ("QDisableRandomization:");
687       ULONGEST setting;
688
689       unpack_varlen_hex (packet, &setting);
690       disable_randomization = setting;
691
692       if (remote_debug)
693         {
694           debug_printf (disable_randomization
695                         ? "[address space randomization disabled]\n"
696                         : "[address space randomization enabled]\n");
697         }
698
699       write_ok (own_buf);
700       return;
701     }
702
703   if (target_supports_tracepoints ()
704       && handle_tracepoint_general_set (own_buf))
705     return;
706
707   if (startswith (own_buf, "QAgent:"))
708     {
709       char *mode = own_buf + strlen ("QAgent:");
710       int req = 0;
711
712       if (strcmp (mode, "0") == 0)
713         req = 0;
714       else if (strcmp (mode, "1") == 0)
715         req = 1;
716       else
717         {
718           /* We don't know what this value is, so complain to GDB.  */
719           sprintf (own_buf, "E.Unknown QAgent value");
720           return;
721         }
722
723       /* Update the flag.  */
724       use_agent = req;
725       if (remote_debug)
726         debug_printf ("[%s agent]\n", req ? "Enable" : "Disable");
727       write_ok (own_buf);
728       return;
729     }
730
731   if (handle_btrace_general_set (own_buf))
732     return;
733
734   if (handle_btrace_conf_general_set (own_buf))
735     return;
736
737   if (startswith (own_buf, "QThreadEvents:"))
738     {
739       char *mode = own_buf + strlen ("QThreadEvents:");
740       enum tribool req = TRIBOOL_UNKNOWN;
741
742       if (strcmp (mode, "0") == 0)
743         req = TRIBOOL_FALSE;
744       else if (strcmp (mode, "1") == 0)
745         req = TRIBOOL_TRUE;
746       else
747         {
748           char *mode_copy = xstrdup (mode);
749
750           /* We don't know what this mode is, so complain to GDB.  */
751           sprintf (own_buf, "E.Unknown thread-events mode requested: %s\n",
752                    mode_copy);
753           xfree (mode_copy);
754           return;
755         }
756
757       report_thread_events = (req == TRIBOOL_TRUE);
758
759       if (remote_debug)
760         {
761           const char *req_str = report_thread_events ? "enabled" : "disabled";
762
763           debug_printf ("[thread events are now %s]\n", req_str);
764         }
765
766       write_ok (own_buf);
767       return;
768     }
769
770   if (startswith (own_buf, "QStartupWithShell:"))
771     {
772       const char *value = own_buf + strlen ("QStartupWithShell:");
773
774       if (strcmp (value, "1") == 0)
775         startup_with_shell = true;
776       else if (strcmp (value, "0") == 0)
777         startup_with_shell = false;
778       else
779         {
780           /* Unknown value.  */
781           fprintf (stderr, "Unknown value to startup-with-shell: %s\n",
782                    own_buf);
783           write_enn (own_buf);
784           return;
785         }
786
787       if (remote_debug)
788         debug_printf (_("[Inferior will %s started with shell]"),
789                       startup_with_shell ? "be" : "not be");
790
791       write_ok (own_buf);
792       return;
793     }
794
795   /* Otherwise we didn't know what packet it was.  Say we didn't
796      understand it.  */
797   own_buf[0] = 0;
798 }
799
800 static const char *
801 get_features_xml (const char *annex)
802 {
803   const struct target_desc *desc = current_target_desc ();
804
805   /* `desc->xmltarget' defines what to return when looking for the
806      "target.xml" file.  Its contents can either be verbatim XML code
807      (prefixed with a '@') or else the name of the actual XML file to
808      be used in place of "target.xml".
809
810      This variable is set up from the auto-generated
811      init_registers_... routine for the current target.  */
812
813   if (desc->xmltarget != NULL && strcmp (annex, "target.xml") == 0)
814     {
815       if (*desc->xmltarget == '@')
816         return desc->xmltarget + 1;
817       else
818         annex = desc->xmltarget;
819     }
820
821 #ifdef USE_XML
822   {
823     extern const char *const xml_builtin[][2];
824     int i;
825
826     /* Look for the annex.  */
827     for (i = 0; xml_builtin[i][0] != NULL; i++)
828       if (strcmp (annex, xml_builtin[i][0]) == 0)
829         break;
830
831     if (xml_builtin[i][0] != NULL)
832       return xml_builtin[i][1];
833   }
834 #endif
835
836   return NULL;
837 }
838
839 static void
840 monitor_show_help (void)
841 {
842   monitor_output ("The following monitor commands are supported:\n");
843   monitor_output ("  set debug <0|1>\n");
844   monitor_output ("    Enable general debugging messages\n");
845   monitor_output ("  set debug-hw-points <0|1>\n");
846   monitor_output ("    Enable h/w breakpoint/watchpoint debugging messages\n");
847   monitor_output ("  set remote-debug <0|1>\n");
848   monitor_output ("    Enable remote protocol debugging messages\n");
849   monitor_output ("  set debug-format option1[,option2,...]\n");
850   monitor_output ("    Add additional information to debugging messages\n");
851   monitor_output ("    Options: all, none");
852   monitor_output (", timestamp");
853   monitor_output ("\n");
854   monitor_output ("  exit\n");
855   monitor_output ("    Quit GDBserver\n");
856 }
857
858 /* Read trace frame or inferior memory.  Returns the number of bytes
859    actually read, zero when no further transfer is possible, and -1 on
860    error.  Return of a positive value smaller than LEN does not
861    indicate there's no more to be read, only the end of the transfer.
862    E.g., when GDB reads memory from a traceframe, a first request may
863    be served from a memory block that does not cover the whole request
864    length.  A following request gets the rest served from either
865    another block (of the same traceframe) or from the read-only
866    regions.  */
867
868 static int
869 gdb_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
870 {
871   int res;
872
873   if (current_traceframe >= 0)
874     {
875       ULONGEST nbytes;
876       ULONGEST length = len;
877
878       if (traceframe_read_mem (current_traceframe,
879                                memaddr, myaddr, len, &nbytes))
880         return -1;
881       /* Data read from trace buffer, we're done.  */
882       if (nbytes > 0)
883         return nbytes;
884       if (!in_readonly_region (memaddr, length))
885         return -1;
886       /* Otherwise we have a valid readonly case, fall through.  */
887       /* (assume no half-trace half-real blocks for now) */
888     }
889
890   res = prepare_to_access_memory ();
891   if (res == 0)
892     {
893       if (set_desired_thread (1))
894         res = read_inferior_memory (memaddr, myaddr, len);
895       else
896         res = 1;
897       done_accessing_memory ();
898
899       return res == 0 ? len : -1;
900     }
901   else
902     return -1;
903 }
904
905 /* Write trace frame or inferior memory.  Actually, writing to trace
906    frames is forbidden.  */
907
908 static int
909 gdb_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len)
910 {
911   if (current_traceframe >= 0)
912     return EIO;
913   else
914     {
915       int ret;
916
917       ret = prepare_to_access_memory ();
918       if (ret == 0)
919         {
920           if (set_desired_thread (1))
921             ret = write_inferior_memory (memaddr, myaddr, len);
922           else
923             ret = EIO;
924           done_accessing_memory ();
925         }
926       return ret;
927     }
928 }
929
930 /* Subroutine of handle_search_memory to simplify it.  */
931
932 static int
933 handle_search_memory_1 (CORE_ADDR start_addr, CORE_ADDR search_space_len,
934                         gdb_byte *pattern, unsigned pattern_len,
935                         gdb_byte *search_buf,
936                         unsigned chunk_size, unsigned search_buf_size,
937                         CORE_ADDR *found_addrp)
938 {
939   /* Prime the search buffer.  */
940
941   if (gdb_read_memory (start_addr, search_buf, search_buf_size)
942       != search_buf_size)
943     {
944       warning ("Unable to access %ld bytes of target "
945                "memory at 0x%lx, halting search.",
946                (long) search_buf_size, (long) start_addr);
947       return -1;
948     }
949
950   /* Perform the search.
951
952      The loop is kept simple by allocating [N + pattern-length - 1] bytes.
953      When we've scanned N bytes we copy the trailing bytes to the start and
954      read in another N bytes.  */
955
956   while (search_space_len >= pattern_len)
957     {
958       gdb_byte *found_ptr;
959       unsigned nr_search_bytes = (search_space_len < search_buf_size
960                                   ? search_space_len
961                                   : search_buf_size);
962
963       found_ptr = (gdb_byte *) memmem (search_buf, nr_search_bytes, pattern,
964                                        pattern_len);
965
966       if (found_ptr != NULL)
967         {
968           CORE_ADDR found_addr = start_addr + (found_ptr - search_buf);
969           *found_addrp = found_addr;
970           return 1;
971         }
972
973       /* Not found in this chunk, skip to next chunk.  */
974
975       /* Don't let search_space_len wrap here, it's unsigned.  */
976       if (search_space_len >= chunk_size)
977         search_space_len -= chunk_size;
978       else
979         search_space_len = 0;
980
981       if (search_space_len >= pattern_len)
982         {
983           unsigned keep_len = search_buf_size - chunk_size;
984           CORE_ADDR read_addr = start_addr + chunk_size + keep_len;
985           int nr_to_read;
986
987           /* Copy the trailing part of the previous iteration to the front
988              of the buffer for the next iteration.  */
989           memcpy (search_buf, search_buf + chunk_size, keep_len);
990
991           nr_to_read = (search_space_len - keep_len < chunk_size
992                         ? search_space_len - keep_len
993                         : chunk_size);
994
995           if (gdb_read_memory (read_addr, search_buf + keep_len,
996                                nr_to_read) != search_buf_size)
997             {
998               warning ("Unable to access %ld bytes of target memory "
999                        "at 0x%lx, halting search.",
1000                        (long) nr_to_read, (long) read_addr);
1001               return -1;
1002             }
1003
1004           start_addr += chunk_size;
1005         }
1006     }
1007
1008   /* Not found.  */
1009
1010   return 0;
1011 }
1012
1013 /* Handle qSearch:memory packets.  */
1014
1015 static void
1016 handle_search_memory (char *own_buf, int packet_len)
1017 {
1018   CORE_ADDR start_addr;
1019   CORE_ADDR search_space_len;
1020   gdb_byte *pattern;
1021   unsigned int pattern_len;
1022   /* NOTE: also defined in find.c testcase.  */
1023 #define SEARCH_CHUNK_SIZE 16000
1024   const unsigned chunk_size = SEARCH_CHUNK_SIZE;
1025   /* Buffer to hold memory contents for searching.  */
1026   gdb_byte *search_buf;
1027   unsigned search_buf_size;
1028   int found;
1029   CORE_ADDR found_addr;
1030   int cmd_name_len = sizeof ("qSearch:memory:") - 1;
1031
1032   pattern = (gdb_byte *) malloc (packet_len);
1033   if (pattern == NULL)
1034     {
1035       error ("Unable to allocate memory to perform the search");
1036       strcpy (own_buf, "E00");
1037       return;
1038     }
1039   if (decode_search_memory_packet (own_buf + cmd_name_len,
1040                                    packet_len - cmd_name_len,
1041                                    &start_addr, &search_space_len,
1042                                    pattern, &pattern_len) < 0)
1043     {
1044       free (pattern);
1045       error ("Error in parsing qSearch:memory packet");
1046       strcpy (own_buf, "E00");
1047       return;
1048     }
1049
1050   search_buf_size = chunk_size + pattern_len - 1;
1051
1052   /* No point in trying to allocate a buffer larger than the search space.  */
1053   if (search_space_len < search_buf_size)
1054     search_buf_size = search_space_len;
1055
1056   search_buf = (gdb_byte *) malloc (search_buf_size);
1057   if (search_buf == NULL)
1058     {
1059       free (pattern);
1060       error ("Unable to allocate memory to perform the search");
1061       strcpy (own_buf, "E00");
1062       return;
1063     }
1064
1065   found = handle_search_memory_1 (start_addr, search_space_len,
1066                                   pattern, pattern_len,
1067                                   search_buf, chunk_size, search_buf_size,
1068                                   &found_addr);
1069
1070   if (found > 0)
1071     sprintf (own_buf, "1,%lx", (long) found_addr);
1072   else if (found == 0)
1073     strcpy (own_buf, "0");
1074   else
1075     strcpy (own_buf, "E00");
1076
1077   free (search_buf);
1078   free (pattern);
1079 }
1080
1081 #define require_running(BUF)                    \
1082   if (!target_running ())                       \
1083     {                                           \
1084       write_enn (BUF);                          \
1085       return;                                   \
1086     }
1087
1088 /* Parse options to --debug-format= and "monitor set debug-format".
1089    ARG is the text after "--debug-format=" or "monitor set debug-format".
1090    IS_MONITOR is non-zero if we're invoked via "monitor set debug-format".
1091    This triggers calls to monitor_output.
1092    The result is NULL if all options were parsed ok, otherwise an error
1093    message which the caller must free.
1094
1095    N.B. These commands affect all debug format settings, they are not
1096    cumulative.  If a format is not specified, it is turned off.
1097    However, we don't go to extra trouble with things like
1098    "monitor set debug-format all,none,timestamp".
1099    Instead we just parse them one at a time, in order.
1100
1101    The syntax for "monitor set debug" we support here is not identical
1102    to gdb's "set debug foo on|off" because we also use this function to
1103    parse "--debug-format=foo,bar".  */
1104
1105 static char *
1106 parse_debug_format_options (const char *arg, int is_monitor)
1107 {
1108   VEC (char_ptr) *options;
1109   int ix;
1110   char *option;
1111
1112   /* First turn all debug format options off.  */
1113   debug_timestamp = 0;
1114
1115   /* First remove leading spaces, for "monitor set debug-format".  */
1116   while (isspace (*arg))
1117     ++arg;
1118
1119   options = delim_string_to_char_ptr_vec (arg, ',');
1120
1121   for (ix = 0; VEC_iterate (char_ptr, options, ix, option); ++ix)
1122     {
1123       if (strcmp (option, "all") == 0)
1124         {
1125           debug_timestamp = 1;
1126           if (is_monitor)
1127             monitor_output ("All extra debug format options enabled.\n");
1128         }
1129       else if (strcmp (option, "none") == 0)
1130         {
1131           debug_timestamp = 0;
1132           if (is_monitor)
1133             monitor_output ("All extra debug format options disabled.\n");
1134         }
1135       else if (strcmp (option, "timestamp") == 0)
1136         {
1137           debug_timestamp = 1;
1138           if (is_monitor)
1139             monitor_output ("Timestamps will be added to debug output.\n");
1140         }
1141       else if (*option == '\0')
1142         {
1143           /* An empty option, e.g., "--debug-format=foo,,bar", is ignored.  */
1144           continue;
1145         }
1146       else
1147         {
1148           char *msg = xstrprintf ("Unknown debug-format argument: \"%s\"\n",
1149                                   option);
1150
1151           free_char_ptr_vec (options);
1152           return msg;
1153         }
1154     }
1155
1156   free_char_ptr_vec (options);
1157   return NULL;
1158 }
1159
1160 /* Handle monitor commands not handled by target-specific handlers.  */
1161
1162 static void
1163 handle_monitor_command (char *mon, char *own_buf)
1164 {
1165   if (strcmp (mon, "set debug 1") == 0)
1166     {
1167       debug_threads = 1;
1168       monitor_output ("Debug output enabled.\n");
1169     }
1170   else if (strcmp (mon, "set debug 0") == 0)
1171     {
1172       debug_threads = 0;
1173       monitor_output ("Debug output disabled.\n");
1174     }
1175   else if (strcmp (mon, "set debug-hw-points 1") == 0)
1176     {
1177       show_debug_regs = 1;
1178       monitor_output ("H/W point debugging output enabled.\n");
1179     }
1180   else if (strcmp (mon, "set debug-hw-points 0") == 0)
1181     {
1182       show_debug_regs = 0;
1183       monitor_output ("H/W point debugging output disabled.\n");
1184     }
1185   else if (strcmp (mon, "set remote-debug 1") == 0)
1186     {
1187       remote_debug = 1;
1188       monitor_output ("Protocol debug output enabled.\n");
1189     }
1190   else if (strcmp (mon, "set remote-debug 0") == 0)
1191     {
1192       remote_debug = 0;
1193       monitor_output ("Protocol debug output disabled.\n");
1194     }
1195   else if (startswith (mon, "set debug-format "))
1196     {
1197       char *error_msg
1198         = parse_debug_format_options (mon + sizeof ("set debug-format ") - 1,
1199                                       1);
1200
1201       if (error_msg != NULL)
1202         {
1203           monitor_output (error_msg);
1204           monitor_show_help ();
1205           write_enn (own_buf);
1206           xfree (error_msg);
1207         }
1208     }
1209   else if (strcmp (mon, "help") == 0)
1210     monitor_show_help ();
1211   else if (strcmp (mon, "exit") == 0)
1212     exit_requested = 1;
1213   else
1214     {
1215       monitor_output ("Unknown monitor command.\n\n");
1216       monitor_show_help ();
1217       write_enn (own_buf);
1218     }
1219 }
1220
1221 /* Associates a callback with each supported qXfer'able object.  */
1222
1223 struct qxfer
1224 {
1225   /* The object this handler handles.  */
1226   const char *object;
1227
1228   /* Request that the target transfer up to LEN 8-bit bytes of the
1229      target's OBJECT.  The OFFSET, for a seekable object, specifies
1230      the starting point.  The ANNEX can be used to provide additional
1231      data-specific information to the target.
1232
1233      Return the number of bytes actually transfered, zero when no
1234      further transfer is possible, -1 on error, -2 when the transfer
1235      is not supported, and -3 on a verbose error message that should
1236      be preserved.  Return of a positive value smaller than LEN does
1237      not indicate the end of the object, only the end of the transfer.
1238
1239      One, and only one, of readbuf or writebuf must be non-NULL.  */
1240   int (*xfer) (const char *annex,
1241                gdb_byte *readbuf, const gdb_byte *writebuf,
1242                ULONGEST offset, LONGEST len);
1243 };
1244
1245 /* Handle qXfer:auxv:read.  */
1246
1247 static int
1248 handle_qxfer_auxv (const char *annex,
1249                    gdb_byte *readbuf, const gdb_byte *writebuf,
1250                    ULONGEST offset, LONGEST len)
1251 {
1252   if (the_target->read_auxv == NULL || writebuf != NULL)
1253     return -2;
1254
1255   if (annex[0] != '\0' || current_thread == NULL)
1256     return -1;
1257
1258   return (*the_target->read_auxv) (offset, readbuf, len);
1259 }
1260
1261 /* Handle qXfer:exec-file:read.  */
1262
1263 static int
1264 handle_qxfer_exec_file (const char *const_annex,
1265                         gdb_byte *readbuf, const gdb_byte *writebuf,
1266                         ULONGEST offset, LONGEST len)
1267 {
1268   char *file;
1269   ULONGEST pid;
1270   int total_len;
1271
1272   if (the_target->pid_to_exec_file == NULL || writebuf != NULL)
1273     return -2;
1274
1275   if (const_annex[0] == '\0')
1276     {
1277       if (current_thread == NULL)
1278         return -1;
1279
1280       pid = pid_of (current_thread);
1281     }
1282   else
1283     {
1284       char *annex = (char *) alloca (strlen (const_annex) + 1);
1285
1286       strcpy (annex, const_annex);
1287       annex = unpack_varlen_hex (annex, &pid);
1288
1289       if (annex[0] != '\0')
1290         return -1;
1291     }
1292
1293   if (pid <= 0)
1294     return -1;
1295
1296   file = (*the_target->pid_to_exec_file) (pid);
1297   if (file == NULL)
1298     return -1;
1299
1300   total_len = strlen (file);
1301
1302   if (offset > total_len)
1303     return -1;
1304
1305   if (offset + len > total_len)
1306     len = total_len - offset;
1307
1308   memcpy (readbuf, file + offset, len);
1309   return len;
1310 }
1311
1312 /* Handle qXfer:features:read.  */
1313
1314 static int
1315 handle_qxfer_features (const char *annex,
1316                        gdb_byte *readbuf, const gdb_byte *writebuf,
1317                        ULONGEST offset, LONGEST len)
1318 {
1319   const char *document;
1320   size_t total_len;
1321
1322   if (writebuf != NULL)
1323     return -2;
1324
1325   if (!target_running ())
1326     return -1;
1327
1328   /* Grab the correct annex.  */
1329   document = get_features_xml (annex);
1330   if (document == NULL)
1331     return -1;
1332
1333   total_len = strlen (document);
1334
1335   if (offset > total_len)
1336     return -1;
1337
1338   if (offset + len > total_len)
1339     len = total_len - offset;
1340
1341   memcpy (readbuf, document + offset, len);
1342   return len;
1343 }
1344
1345 /* Worker routine for handle_qxfer_libraries.
1346    Add to the length pointed to by ARG a conservative estimate of the
1347    length needed to transmit the file name of INF.  */
1348
1349 static void
1350 accumulate_file_name_length (struct inferior_list_entry *inf, void *arg)
1351 {
1352   struct dll_info *dll = (struct dll_info *) inf;
1353   unsigned int *total_len = (unsigned int *) arg;
1354
1355   /* Over-estimate the necessary memory.  Assume that every character
1356      in the library name must be escaped.  */
1357   *total_len += 128 + 6 * strlen (dll->name);
1358 }
1359
1360 /* Worker routine for handle_qxfer_libraries.
1361    Emit the XML to describe the library in INF.  */
1362
1363 static void
1364 emit_dll_description (struct inferior_list_entry *inf, void *arg)
1365 {
1366   struct dll_info *dll = (struct dll_info *) inf;
1367   char **p_ptr = (char **) arg;
1368   char *p = *p_ptr;
1369   char *name;
1370
1371   strcpy (p, "  <library name=\"");
1372   p = p + strlen (p);
1373   name = xml_escape_text (dll->name);
1374   strcpy (p, name);
1375   free (name);
1376   p = p + strlen (p);
1377   strcpy (p, "\"><segment address=\"");
1378   p = p + strlen (p);
1379   sprintf (p, "0x%lx", (long) dll->base_addr);
1380   p = p + strlen (p);
1381   strcpy (p, "\"/></library>\n");
1382   p = p + strlen (p);
1383
1384   *p_ptr = p;
1385 }
1386
1387 /* Handle qXfer:libraries:read.  */
1388
1389 static int
1390 handle_qxfer_libraries (const char *annex,
1391                         gdb_byte *readbuf, const gdb_byte *writebuf,
1392                         ULONGEST offset, LONGEST len)
1393 {
1394   unsigned int total_len;
1395   char *document, *p;
1396
1397   if (writebuf != NULL)
1398     return -2;
1399
1400   if (annex[0] != '\0' || current_thread == NULL)
1401     return -1;
1402
1403   total_len = 64;
1404   for_each_inferior_with_data (&all_dlls, accumulate_file_name_length,
1405                                &total_len);
1406
1407   document = (char *) malloc (total_len);
1408   if (document == NULL)
1409     return -1;
1410
1411   strcpy (document, "<library-list version=\"1.0\">\n");
1412   p = document + strlen (document);
1413
1414   for_each_inferior_with_data (&all_dlls, emit_dll_description, &p);
1415
1416   strcpy (p, "</library-list>\n");
1417
1418   total_len = strlen (document);
1419
1420   if (offset > total_len)
1421     {
1422       free (document);
1423       return -1;
1424     }
1425
1426   if (offset + len > total_len)
1427     len = total_len - offset;
1428
1429   memcpy (readbuf, document + offset, len);
1430   free (document);
1431   return len;
1432 }
1433
1434 /* Handle qXfer:libraries-svr4:read.  */
1435
1436 static int
1437 handle_qxfer_libraries_svr4 (const char *annex,
1438                              gdb_byte *readbuf, const gdb_byte *writebuf,
1439                              ULONGEST offset, LONGEST len)
1440 {
1441   if (writebuf != NULL)
1442     return -2;
1443
1444   if (current_thread == NULL || the_target->qxfer_libraries_svr4 == NULL)
1445     return -1;
1446
1447   return the_target->qxfer_libraries_svr4 (annex, readbuf, writebuf, offset, len);
1448 }
1449
1450 /* Handle qXfer:osadata:read.  */
1451
1452 static int
1453 handle_qxfer_osdata (const char *annex,
1454                      gdb_byte *readbuf, const gdb_byte *writebuf,
1455                      ULONGEST offset, LONGEST len)
1456 {
1457   if (the_target->qxfer_osdata == NULL || writebuf != NULL)
1458     return -2;
1459
1460   return (*the_target->qxfer_osdata) (annex, readbuf, NULL, offset, len);
1461 }
1462
1463 /* Handle qXfer:siginfo:read and qXfer:siginfo:write.  */
1464
1465 static int
1466 handle_qxfer_siginfo (const char *annex,
1467                       gdb_byte *readbuf, const gdb_byte *writebuf,
1468                       ULONGEST offset, LONGEST len)
1469 {
1470   if (the_target->qxfer_siginfo == NULL)
1471     return -2;
1472
1473   if (annex[0] != '\0' || current_thread == NULL)
1474     return -1;
1475
1476   return (*the_target->qxfer_siginfo) (annex, readbuf, writebuf, offset, len);
1477 }
1478
1479 /* Handle qXfer:spu:read and qXfer:spu:write.  */
1480
1481 static int
1482 handle_qxfer_spu (const char *annex,
1483                   gdb_byte *readbuf, const gdb_byte *writebuf,
1484                   ULONGEST offset, LONGEST len)
1485 {
1486   if (the_target->qxfer_spu == NULL)
1487     return -2;
1488
1489   if (current_thread == NULL)
1490     return -1;
1491
1492   return (*the_target->qxfer_spu) (annex, readbuf, writebuf, offset, len);
1493 }
1494
1495 /* Handle qXfer:statictrace:read.  */
1496
1497 static int
1498 handle_qxfer_statictrace (const char *annex,
1499                           gdb_byte *readbuf, const gdb_byte *writebuf,
1500                           ULONGEST offset, LONGEST len)
1501 {
1502   ULONGEST nbytes;
1503
1504   if (writebuf != NULL)
1505     return -2;
1506
1507   if (annex[0] != '\0' || current_thread == NULL || current_traceframe == -1)
1508     return -1;
1509
1510   if (traceframe_read_sdata (current_traceframe, offset,
1511                              readbuf, len, &nbytes))
1512     return -1;
1513   return nbytes;
1514 }
1515
1516 /* Helper for handle_qxfer_threads_proper.
1517    Emit the XML to describe the thread of INF.  */
1518
1519 static void
1520 handle_qxfer_threads_worker (struct inferior_list_entry *inf, void *arg)
1521 {
1522   struct thread_info *thread = (struct thread_info *) inf;
1523   struct buffer *buffer = (struct buffer *) arg;
1524   ptid_t ptid = thread_to_gdb_id (thread);
1525   char ptid_s[100];
1526   int core = target_core_of_thread (ptid);
1527   char core_s[21];
1528   const char *name = target_thread_name (ptid);
1529
1530   write_ptid (ptid_s, ptid);
1531
1532   buffer_xml_printf (buffer, "<thread id=\"%s\"", ptid_s);
1533
1534   if (core != -1)
1535     {
1536       sprintf (core_s, "%d", core);
1537       buffer_xml_printf (buffer, " core=\"%s\"", core_s);
1538     }
1539
1540   if (name != NULL)
1541     buffer_xml_printf (buffer, " name=\"%s\"", name);
1542
1543   buffer_xml_printf (buffer, "/>\n");
1544 }
1545
1546 /* Helper for handle_qxfer_threads.  */
1547
1548 static void
1549 handle_qxfer_threads_proper (struct buffer *buffer)
1550 {
1551   buffer_grow_str (buffer, "<threads>\n");
1552
1553   for_each_inferior_with_data (&all_threads, handle_qxfer_threads_worker,
1554                                buffer);
1555
1556   buffer_grow_str0 (buffer, "</threads>\n");
1557 }
1558
1559 /* Handle qXfer:threads:read.  */
1560
1561 static int
1562 handle_qxfer_threads (const char *annex,
1563                       gdb_byte *readbuf, const gdb_byte *writebuf,
1564                       ULONGEST offset, LONGEST len)
1565 {
1566   static char *result = 0;
1567   static unsigned int result_length = 0;
1568
1569   if (writebuf != NULL)
1570     return -2;
1571
1572   if (annex[0] != '\0')
1573     return -1;
1574
1575   if (offset == 0)
1576     {
1577       struct buffer buffer;
1578       /* When asked for data at offset 0, generate everything and store into
1579          'result'.  Successive reads will be served off 'result'.  */
1580       if (result)
1581         free (result);
1582
1583       buffer_init (&buffer);
1584
1585       handle_qxfer_threads_proper (&buffer);
1586
1587       result = buffer_finish (&buffer);
1588       result_length = strlen (result);
1589       buffer_free (&buffer);
1590     }
1591
1592   if (offset >= result_length)
1593     {
1594       /* We're out of data.  */
1595       free (result);
1596       result = NULL;
1597       result_length = 0;
1598       return 0;
1599     }
1600
1601   if (len > result_length - offset)
1602     len = result_length - offset;
1603
1604   memcpy (readbuf, result + offset, len);
1605
1606   return len;
1607 }
1608
1609 /* Handle qXfer:traceframe-info:read.  */
1610
1611 static int
1612 handle_qxfer_traceframe_info (const char *annex,
1613                               gdb_byte *readbuf, const gdb_byte *writebuf,
1614                               ULONGEST offset, LONGEST len)
1615 {
1616   static char *result = 0;
1617   static unsigned int result_length = 0;
1618
1619   if (writebuf != NULL)
1620     return -2;
1621
1622   if (!target_running () || annex[0] != '\0' || current_traceframe == -1)
1623     return -1;
1624
1625   if (offset == 0)
1626     {
1627       struct buffer buffer;
1628
1629       /* When asked for data at offset 0, generate everything and
1630          store into 'result'.  Successive reads will be served off
1631          'result'.  */
1632       free (result);
1633
1634       buffer_init (&buffer);
1635
1636       traceframe_read_info (current_traceframe, &buffer);
1637
1638       result = buffer_finish (&buffer);
1639       result_length = strlen (result);
1640       buffer_free (&buffer);
1641     }
1642
1643   if (offset >= result_length)
1644     {
1645       /* We're out of data.  */
1646       free (result);
1647       result = NULL;
1648       result_length = 0;
1649       return 0;
1650     }
1651
1652   if (len > result_length - offset)
1653     len = result_length - offset;
1654
1655   memcpy (readbuf, result + offset, len);
1656   return len;
1657 }
1658
1659 /* Handle qXfer:fdpic:read.  */
1660
1661 static int
1662 handle_qxfer_fdpic (const char *annex, gdb_byte *readbuf,
1663                     const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
1664 {
1665   if (the_target->read_loadmap == NULL)
1666     return -2;
1667
1668   if (current_thread == NULL)
1669     return -1;
1670
1671   return (*the_target->read_loadmap) (annex, offset, readbuf, len);
1672 }
1673
1674 /* Handle qXfer:btrace:read.  */
1675
1676 static int
1677 handle_qxfer_btrace (const char *annex,
1678                      gdb_byte *readbuf, const gdb_byte *writebuf,
1679                      ULONGEST offset, LONGEST len)
1680 {
1681   static struct buffer cache;
1682   struct thread_info *thread;
1683   enum btrace_read_type type;
1684   int result;
1685
1686   if (the_target->read_btrace == NULL || writebuf != NULL)
1687     return -2;
1688
1689   if (ptid_equal (general_thread, null_ptid)
1690       || ptid_equal (general_thread, minus_one_ptid))
1691     {
1692       strcpy (own_buf, "E.Must select a single thread.");
1693       return -3;
1694     }
1695
1696   thread = find_thread_ptid (general_thread);
1697   if (thread == NULL)
1698     {
1699       strcpy (own_buf, "E.No such thread.");
1700       return -3;
1701     }
1702
1703   if (thread->btrace == NULL)
1704     {
1705       strcpy (own_buf, "E.Btrace not enabled.");
1706       return -3;
1707     }
1708
1709   if (strcmp (annex, "all") == 0)
1710     type = BTRACE_READ_ALL;
1711   else if (strcmp (annex, "new") == 0)
1712     type = BTRACE_READ_NEW;
1713   else if (strcmp (annex, "delta") == 0)
1714     type = BTRACE_READ_DELTA;
1715   else
1716     {
1717       strcpy (own_buf, "E.Bad annex.");
1718       return -3;
1719     }
1720
1721   if (offset == 0)
1722     {
1723       buffer_free (&cache);
1724
1725       result = target_read_btrace (thread->btrace, &cache, type);
1726       if (result != 0)
1727         {
1728           memcpy (own_buf, cache.buffer, cache.used_size);
1729           return -3;
1730         }
1731     }
1732   else if (offset > cache.used_size)
1733     {
1734       buffer_free (&cache);
1735       return -3;
1736     }
1737
1738   if (len > cache.used_size - offset)
1739     len = cache.used_size - offset;
1740
1741   memcpy (readbuf, cache.buffer + offset, len);
1742
1743   return len;
1744 }
1745
1746 /* Handle qXfer:btrace-conf:read.  */
1747
1748 static int
1749 handle_qxfer_btrace_conf (const char *annex,
1750                           gdb_byte *readbuf, const gdb_byte *writebuf,
1751                           ULONGEST offset, LONGEST len)
1752 {
1753   static struct buffer cache;
1754   struct thread_info *thread;
1755   int result;
1756
1757   if (the_target->read_btrace_conf == NULL || writebuf != NULL)
1758     return -2;
1759
1760   if (annex[0] != '\0')
1761     return -1;
1762
1763   if (ptid_equal (general_thread, null_ptid)
1764       || ptid_equal (general_thread, minus_one_ptid))
1765     {
1766       strcpy (own_buf, "E.Must select a single thread.");
1767       return -3;
1768     }
1769
1770   thread = find_thread_ptid (general_thread);
1771   if (thread == NULL)
1772     {
1773       strcpy (own_buf, "E.No such thread.");
1774       return -3;
1775     }
1776
1777   if (thread->btrace == NULL)
1778     {
1779       strcpy (own_buf, "E.Btrace not enabled.");
1780       return -3;
1781     }
1782
1783   if (offset == 0)
1784     {
1785       buffer_free (&cache);
1786
1787       result = target_read_btrace_conf (thread->btrace, &cache);
1788       if (result != 0)
1789         {
1790           memcpy (own_buf, cache.buffer, cache.used_size);
1791           return -3;
1792         }
1793     }
1794   else if (offset > cache.used_size)
1795     {
1796       buffer_free (&cache);
1797       return -3;
1798     }
1799
1800   if (len > cache.used_size - offset)
1801     len = cache.used_size - offset;
1802
1803   memcpy (readbuf, cache.buffer + offset, len);
1804
1805   return len;
1806 }
1807
1808 static const struct qxfer qxfer_packets[] =
1809   {
1810     { "auxv", handle_qxfer_auxv },
1811     { "btrace", handle_qxfer_btrace },
1812     { "btrace-conf", handle_qxfer_btrace_conf },
1813     { "exec-file", handle_qxfer_exec_file},
1814     { "fdpic", handle_qxfer_fdpic},
1815     { "features", handle_qxfer_features },
1816     { "libraries", handle_qxfer_libraries },
1817     { "libraries-svr4", handle_qxfer_libraries_svr4 },
1818     { "osdata", handle_qxfer_osdata },
1819     { "siginfo", handle_qxfer_siginfo },
1820     { "spu", handle_qxfer_spu },
1821     { "statictrace", handle_qxfer_statictrace },
1822     { "threads", handle_qxfer_threads },
1823     { "traceframe-info", handle_qxfer_traceframe_info },
1824   };
1825
1826 static int
1827 handle_qxfer (char *own_buf, int packet_len, int *new_packet_len_p)
1828 {
1829   int i;
1830   char *object;
1831   char *rw;
1832   char *annex;
1833   char *offset;
1834
1835   if (!startswith (own_buf, "qXfer:"))
1836     return 0;
1837
1838   /* Grab the object, r/w and annex.  */
1839   if (decode_xfer (own_buf + 6, &object, &rw, &annex, &offset) < 0)
1840     {
1841       write_enn (own_buf);
1842       return 1;
1843     }
1844
1845   for (i = 0;
1846        i < sizeof (qxfer_packets) / sizeof (qxfer_packets[0]);
1847        i++)
1848     {
1849       const struct qxfer *q = &qxfer_packets[i];
1850
1851       if (strcmp (object, q->object) == 0)
1852         {
1853           if (strcmp (rw, "read") == 0)
1854             {
1855               unsigned char *data;
1856               int n;
1857               CORE_ADDR ofs;
1858               unsigned int len;
1859
1860               /* Grab the offset and length.  */
1861               if (decode_xfer_read (offset, &ofs, &len) < 0)
1862                 {
1863                   write_enn (own_buf);
1864                   return 1;
1865                 }
1866
1867               /* Read one extra byte, as an indicator of whether there is
1868                  more.  */
1869               if (len > PBUFSIZ - 2)
1870                 len = PBUFSIZ - 2;
1871               data = (unsigned char *) malloc (len + 1);
1872               if (data == NULL)
1873                 {
1874                   write_enn (own_buf);
1875                   return 1;
1876                 }
1877               n = (*q->xfer) (annex, data, NULL, ofs, len + 1);
1878               if (n == -2)
1879                 {
1880                   free (data);
1881                   return 0;
1882                 }
1883               else if (n == -3)
1884                 {
1885                   /* Preserve error message.  */
1886                 }
1887               else if (n < 0)
1888                 write_enn (own_buf);
1889               else if (n > len)
1890                 *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
1891               else
1892                 *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
1893
1894               free (data);
1895               return 1;
1896             }
1897           else if (strcmp (rw, "write") == 0)
1898             {
1899               int n;
1900               unsigned int len;
1901               CORE_ADDR ofs;
1902               unsigned char *data;
1903
1904               strcpy (own_buf, "E00");
1905               data = (unsigned char *) malloc (packet_len - (offset - own_buf));
1906               if (data == NULL)
1907                 {
1908                   write_enn (own_buf);
1909                   return 1;
1910                 }
1911               if (decode_xfer_write (offset, packet_len - (offset - own_buf),
1912                                      &ofs, &len, data) < 0)
1913                 {
1914                   free (data);
1915                   write_enn (own_buf);
1916                   return 1;
1917                 }
1918
1919               n = (*q->xfer) (annex, NULL, data, ofs, len);
1920               if (n == -2)
1921                 {
1922                   free (data);
1923                   return 0;
1924                 }
1925               else if (n == -3)
1926                 {
1927                   /* Preserve error message.  */
1928                 }
1929               else if (n < 0)
1930                 write_enn (own_buf);
1931               else
1932                 sprintf (own_buf, "%x", n);
1933
1934               free (data);
1935               return 1;
1936             }
1937
1938           return 0;
1939         }
1940     }
1941
1942   return 0;
1943 }
1944
1945 /* Compute 32 bit CRC from inferior memory.
1946
1947    On success, return 32 bit CRC.
1948    On failure, return (unsigned long long) -1.  */
1949
1950 static unsigned long long
1951 crc32 (CORE_ADDR base, int len, unsigned int crc)
1952 {
1953   while (len--)
1954     {
1955       unsigned char byte = 0;
1956
1957       /* Return failure if memory read fails.  */
1958       if (read_inferior_memory (base, &byte, 1) != 0)
1959         return (unsigned long long) -1;
1960
1961       crc = xcrc32 (&byte, 1, crc);
1962       base++;
1963     }
1964   return (unsigned long long) crc;
1965 }
1966
1967 /* Add supported btrace packets to BUF.  */
1968
1969 static void
1970 supported_btrace_packets (char *buf)
1971 {
1972   int btrace_supported = 0;
1973
1974   if (target_supports_btrace (BTRACE_FORMAT_BTS))
1975     {
1976       strcat (buf, ";Qbtrace:bts+");
1977       strcat (buf, ";Qbtrace-conf:bts:size+");
1978
1979       btrace_supported = 1;
1980     }
1981
1982   if (target_supports_btrace (BTRACE_FORMAT_PT))
1983     {
1984       strcat (buf, ";Qbtrace:pt+");
1985       strcat (buf, ";Qbtrace-conf:pt:size+");
1986
1987       btrace_supported = 1;
1988     }
1989
1990   if (!btrace_supported)
1991     return;
1992
1993   strcat (buf, ";Qbtrace:off+");
1994   strcat (buf, ";qXfer:btrace:read+");
1995   strcat (buf, ";qXfer:btrace-conf:read+");
1996 }
1997
1998 /* Handle all of the extended 'q' packets.  */
1999
2000 static void
2001 handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
2002 {
2003   static struct inferior_list_entry *thread_ptr;
2004
2005   /* Reply the current thread id.  */
2006   if (strcmp ("qC", own_buf) == 0 && !disable_packet_qC)
2007     {
2008       ptid_t gdb_id;
2009       require_running (own_buf);
2010
2011       if (!ptid_equal (general_thread, null_ptid)
2012           && !ptid_equal (general_thread, minus_one_ptid))
2013         gdb_id = general_thread;
2014       else
2015         {
2016           thread_ptr = get_first_inferior (&all_threads);
2017           gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
2018         }
2019
2020       sprintf (own_buf, "QC");
2021       own_buf += 2;
2022       write_ptid (own_buf, gdb_id);
2023       return;
2024     }
2025
2026   if (strcmp ("qSymbol::", own_buf) == 0)
2027     {
2028       struct thread_info *save_thread = current_thread;
2029
2030       /* For qSymbol, GDB only changes the current thread if the
2031          previous current thread was of a different process.  So if
2032          the previous thread is gone, we need to pick another one of
2033          the same process.  This can happen e.g., if we followed an
2034          exec in a non-leader thread.  */
2035       if (current_thread == NULL)
2036         {
2037           current_thread
2038             = find_any_thread_of_pid (ptid_get_pid (general_thread));
2039
2040           /* Just in case, if we didn't find a thread, then bail out
2041              instead of crashing.  */
2042           if (current_thread == NULL)
2043             {
2044               write_enn (own_buf);
2045               current_thread = save_thread;
2046               return;
2047             }
2048         }
2049
2050       /* GDB is suggesting new symbols have been loaded.  This may
2051          mean a new shared library has been detected as loaded, so
2052          take the opportunity to check if breakpoints we think are
2053          inserted, still are.  Note that it isn't guaranteed that
2054          we'll see this when a shared library is loaded, and nor will
2055          we see this for unloads (although breakpoints in unloaded
2056          libraries shouldn't trigger), as GDB may not find symbols for
2057          the library at all.  We also re-validate breakpoints when we
2058          see a second GDB breakpoint for the same address, and or when
2059          we access breakpoint shadows.  */
2060       validate_breakpoints ();
2061
2062       if (target_supports_tracepoints ())
2063         tracepoint_look_up_symbols ();
2064
2065       if (current_thread != NULL && the_target->look_up_symbols != NULL)
2066         (*the_target->look_up_symbols) ();
2067
2068       current_thread = save_thread;
2069
2070       strcpy (own_buf, "OK");
2071       return;
2072     }
2073
2074   if (!disable_packet_qfThreadInfo)
2075     {
2076       if (strcmp ("qfThreadInfo", own_buf) == 0)
2077         {
2078           ptid_t gdb_id;
2079
2080           require_running (own_buf);
2081           thread_ptr = get_first_inferior (&all_threads);
2082
2083           *own_buf++ = 'm';
2084           gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
2085           write_ptid (own_buf, gdb_id);
2086           thread_ptr = thread_ptr->next;
2087           return;
2088         }
2089
2090       if (strcmp ("qsThreadInfo", own_buf) == 0)
2091         {
2092           ptid_t gdb_id;
2093
2094           require_running (own_buf);
2095           if (thread_ptr != NULL)
2096             {
2097               *own_buf++ = 'm';
2098               gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
2099               write_ptid (own_buf, gdb_id);
2100               thread_ptr = thread_ptr->next;
2101               return;
2102             }
2103           else
2104             {
2105               sprintf (own_buf, "l");
2106               return;
2107             }
2108         }
2109     }
2110
2111   if (the_target->read_offsets != NULL
2112       && strcmp ("qOffsets", own_buf) == 0)
2113     {
2114       CORE_ADDR text, data;
2115
2116       require_running (own_buf);
2117       if (the_target->read_offsets (&text, &data))
2118         sprintf (own_buf, "Text=%lX;Data=%lX;Bss=%lX",
2119                  (long)text, (long)data, (long)data);
2120       else
2121         write_enn (own_buf);
2122
2123       return;
2124     }
2125
2126   /* Protocol features query.  */
2127   if (startswith (own_buf, "qSupported")
2128       && (own_buf[10] == ':' || own_buf[10] == '\0'))
2129     {
2130       char *p = &own_buf[10];
2131       int gdb_supports_qRelocInsn = 0;
2132
2133       /* Process each feature being provided by GDB.  The first
2134          feature will follow a ':', and latter features will follow
2135          ';'.  */
2136       if (*p == ':')
2137         {
2138           char **qsupported = NULL;
2139           int count = 0;
2140           int unknown = 0;
2141           int i;
2142
2143           /* Two passes, to avoid nested strtok calls in
2144              target_process_qsupported.  */
2145           for (p = strtok (p + 1, ";");
2146                p != NULL;
2147                p = strtok (NULL, ";"))
2148             {
2149               count++;
2150               qsupported = XRESIZEVEC (char *, qsupported, count);
2151               qsupported[count - 1] = xstrdup (p);
2152             }
2153
2154           for (i = 0; i < count; i++)
2155             {
2156               p = qsupported[i];
2157               if (strcmp (p, "multiprocess+") == 0)
2158                 {
2159                   /* GDB supports and wants multi-process support if
2160                      possible.  */
2161                   if (target_supports_multi_process ())
2162                     multi_process = 1;
2163                 }
2164               else if (strcmp (p, "qRelocInsn+") == 0)
2165                 {
2166                   /* GDB supports relocate instruction requests.  */
2167                   gdb_supports_qRelocInsn = 1;
2168                 }
2169               else if (strcmp (p, "swbreak+") == 0)
2170                 {
2171                   /* GDB wants us to report whether a trap is caused
2172                      by a software breakpoint and for us to handle PC
2173                      adjustment if necessary on this target.  */
2174                   if (target_supports_stopped_by_sw_breakpoint ())
2175                     swbreak_feature = 1;
2176                 }
2177               else if (strcmp (p, "hwbreak+") == 0)
2178                 {
2179                   /* GDB wants us to report whether a trap is caused
2180                      by a hardware breakpoint.  */
2181                   if (target_supports_stopped_by_hw_breakpoint ())
2182                     hwbreak_feature = 1;
2183                 }
2184               else if (strcmp (p, "fork-events+") == 0)
2185                 {
2186                   /* GDB supports and wants fork events if possible.  */
2187                   if (target_supports_fork_events ())
2188                     report_fork_events = 1;
2189                 }
2190               else if (strcmp (p, "vfork-events+") == 0)
2191                 {
2192                   /* GDB supports and wants vfork events if possible.  */
2193                   if (target_supports_vfork_events ())
2194                     report_vfork_events = 1;
2195                 }
2196               else if (strcmp (p, "exec-events+") == 0)
2197                 {
2198                   /* GDB supports and wants exec events if possible.  */
2199                   if (target_supports_exec_events ())
2200                     report_exec_events = 1;
2201                 }
2202               else if (strcmp (p, "vContSupported+") == 0)
2203                 vCont_supported = 1;
2204               else if (strcmp (p, "QThreadEvents+") == 0)
2205                 ;
2206               else if (strcmp (p, "no-resumed+") == 0)
2207                 {
2208                   /* GDB supports and wants TARGET_WAITKIND_NO_RESUMED
2209                      events.  */
2210                   report_no_resumed = 1;
2211                 }
2212               else
2213                 {
2214                   /* Move the unknown features all together.  */
2215                   qsupported[i] = NULL;
2216                   qsupported[unknown] = p;
2217                   unknown++;
2218                 }
2219             }
2220
2221           /* Give the target backend a chance to process the unknown
2222              features.  */
2223           target_process_qsupported (qsupported, unknown);
2224
2225           for (i = 0; i < count; i++)
2226             free (qsupported[i]);
2227           free (qsupported);
2228         }
2229
2230       sprintf (own_buf,
2231                "PacketSize=%x;QPassSignals+;QProgramSignals+;QStartupWithShell+",
2232                PBUFSIZ - 1);
2233
2234       if (target_supports_catch_syscall ())
2235         strcat (own_buf, ";QCatchSyscalls+");
2236
2237       if (the_target->qxfer_libraries_svr4 != NULL)
2238         strcat (own_buf, ";qXfer:libraries-svr4:read+"
2239                 ";augmented-libraries-svr4-read+");
2240       else
2241         {
2242           /* We do not have any hook to indicate whether the non-SVR4 target
2243              backend supports qXfer:libraries:read, so always report it.  */
2244           strcat (own_buf, ";qXfer:libraries:read+");
2245         }
2246
2247       if (the_target->read_auxv != NULL)
2248         strcat (own_buf, ";qXfer:auxv:read+");
2249
2250       if (the_target->qxfer_spu != NULL)
2251         strcat (own_buf, ";qXfer:spu:read+;qXfer:spu:write+");
2252
2253       if (the_target->qxfer_siginfo != NULL)
2254         strcat (own_buf, ";qXfer:siginfo:read+;qXfer:siginfo:write+");
2255
2256       if (the_target->read_loadmap != NULL)
2257         strcat (own_buf, ";qXfer:fdpic:read+");
2258
2259       /* We always report qXfer:features:read, as targets may
2260          install XML files on a subsequent call to arch_setup.
2261          If we reported to GDB on startup that we don't support
2262          qXfer:feature:read at all, we will never be re-queried.  */
2263       strcat (own_buf, ";qXfer:features:read+");
2264
2265       if (transport_is_reliable)
2266         strcat (own_buf, ";QStartNoAckMode+");
2267
2268       if (the_target->qxfer_osdata != NULL)
2269         strcat (own_buf, ";qXfer:osdata:read+");
2270
2271       if (target_supports_multi_process ())
2272         strcat (own_buf, ";multiprocess+");
2273
2274       if (target_supports_fork_events ())
2275         strcat (own_buf, ";fork-events+");
2276
2277       if (target_supports_vfork_events ())
2278         strcat (own_buf, ";vfork-events+");
2279
2280       if (target_supports_exec_events ())
2281         strcat (own_buf, ";exec-events+");
2282
2283       if (target_supports_non_stop ())
2284         strcat (own_buf, ";QNonStop+");
2285
2286       if (target_supports_disable_randomization ())
2287         strcat (own_buf, ";QDisableRandomization+");
2288
2289       strcat (own_buf, ";qXfer:threads:read+");
2290
2291       if (target_supports_tracepoints ())
2292         {
2293           strcat (own_buf, ";ConditionalTracepoints+");
2294           strcat (own_buf, ";TraceStateVariables+");
2295           strcat (own_buf, ";TracepointSource+");
2296           strcat (own_buf, ";DisconnectedTracing+");
2297           if (gdb_supports_qRelocInsn && target_supports_fast_tracepoints ())
2298             strcat (own_buf, ";FastTracepoints+");
2299           strcat (own_buf, ";StaticTracepoints+");
2300           strcat (own_buf, ";InstallInTrace+");
2301           strcat (own_buf, ";qXfer:statictrace:read+");
2302           strcat (own_buf, ";qXfer:traceframe-info:read+");
2303           strcat (own_buf, ";EnableDisableTracepoints+");
2304           strcat (own_buf, ";QTBuffer:size+");
2305           strcat (own_buf, ";tracenz+");
2306         }
2307
2308       if (target_supports_hardware_single_step ()
2309           || target_supports_software_single_step () )
2310         {
2311           strcat (own_buf, ";ConditionalBreakpoints+");
2312         }
2313       strcat (own_buf, ";BreakpointCommands+");
2314
2315       if (target_supports_agent ())
2316         strcat (own_buf, ";QAgent+");
2317
2318       supported_btrace_packets (own_buf);
2319
2320       if (target_supports_stopped_by_sw_breakpoint ())
2321         strcat (own_buf, ";swbreak+");
2322
2323       if (target_supports_stopped_by_hw_breakpoint ())
2324         strcat (own_buf, ";hwbreak+");
2325
2326       if (the_target->pid_to_exec_file != NULL)
2327         strcat (own_buf, ";qXfer:exec-file:read+");
2328
2329       strcat (own_buf, ";vContSupported+");
2330
2331       strcat (own_buf, ";QThreadEvents+");
2332
2333       strcat (own_buf, ";no-resumed+");
2334
2335       /* Reinitialize components as needed for the new connection.  */
2336       hostio_handle_new_gdb_connection ();
2337       target_handle_new_gdb_connection ();
2338
2339       return;
2340     }
2341
2342   /* Thread-local storage support.  */
2343   if (the_target->get_tls_address != NULL
2344       && startswith (own_buf, "qGetTLSAddr:"))
2345     {
2346       char *p = own_buf + 12;
2347       CORE_ADDR parts[2], address = 0;
2348       int i, err;
2349       ptid_t ptid = null_ptid;
2350
2351       require_running (own_buf);
2352
2353       for (i = 0; i < 3; i++)
2354         {
2355           char *p2;
2356           int len;
2357
2358           if (p == NULL)
2359             break;
2360
2361           p2 = strchr (p, ',');
2362           if (p2)
2363             {
2364               len = p2 - p;
2365               p2++;
2366             }
2367           else
2368             {
2369               len = strlen (p);
2370               p2 = NULL;
2371             }
2372
2373           if (i == 0)
2374             ptid = read_ptid (p, NULL);
2375           else
2376             decode_address (&parts[i - 1], p, len);
2377           p = p2;
2378         }
2379
2380       if (p != NULL || i < 3)
2381         err = 1;
2382       else
2383         {
2384           struct thread_info *thread = find_thread_ptid (ptid);
2385
2386           if (thread == NULL)
2387             err = 2;
2388           else
2389             err = the_target->get_tls_address (thread, parts[0], parts[1],
2390                                                &address);
2391         }
2392
2393       if (err == 0)
2394         {
2395           strcpy (own_buf, paddress(address));
2396           return;
2397         }
2398       else if (err > 0)
2399         {
2400           write_enn (own_buf);
2401           return;
2402         }
2403
2404       /* Otherwise, pretend we do not understand this packet.  */
2405     }
2406
2407   /* Windows OS Thread Information Block address support.  */
2408   if (the_target->get_tib_address != NULL
2409       && startswith (own_buf, "qGetTIBAddr:"))
2410     {
2411       char *annex;
2412       int n;
2413       CORE_ADDR tlb;
2414       ptid_t ptid = read_ptid (own_buf + 12, &annex);
2415
2416       n = (*the_target->get_tib_address) (ptid, &tlb);
2417       if (n == 1)
2418         {
2419           strcpy (own_buf, paddress(tlb));
2420           return;
2421         }
2422       else if (n == 0)
2423         {
2424           write_enn (own_buf);
2425           return;
2426         }
2427       return;
2428     }
2429
2430   /* Handle "monitor" commands.  */
2431   if (startswith (own_buf, "qRcmd,"))
2432     {
2433       char *mon = (char *) malloc (PBUFSIZ);
2434       int len = strlen (own_buf + 6);
2435
2436       if (mon == NULL)
2437         {
2438           write_enn (own_buf);
2439           return;
2440         }
2441
2442       if ((len % 2) != 0
2443           || hex2bin (own_buf + 6, (gdb_byte *) mon, len / 2) != len / 2)
2444         {
2445           write_enn (own_buf);
2446           free (mon);
2447           return;
2448         }
2449       mon[len / 2] = '\0';
2450
2451       write_ok (own_buf);
2452
2453       if (the_target->handle_monitor_command == NULL
2454           || (*the_target->handle_monitor_command) (mon) == 0)
2455         /* Default processing.  */
2456         handle_monitor_command (mon, own_buf);
2457
2458       free (mon);
2459       return;
2460     }
2461
2462   if (startswith (own_buf, "qSearch:memory:"))
2463     {
2464       require_running (own_buf);
2465       handle_search_memory (own_buf, packet_len);
2466       return;
2467     }
2468
2469   if (strcmp (own_buf, "qAttached") == 0
2470       || startswith (own_buf, "qAttached:"))
2471     {
2472       struct process_info *process;
2473
2474       if (own_buf[sizeof ("qAttached") - 1])
2475         {
2476           int pid = strtoul (own_buf + sizeof ("qAttached:") - 1, NULL, 16);
2477           process = (struct process_info *)
2478             find_inferior_id (&all_processes, pid_to_ptid (pid));
2479         }
2480       else
2481         {
2482           require_running (own_buf);
2483           process = current_process ();
2484         }
2485
2486       if (process == NULL)
2487         {
2488           write_enn (own_buf);
2489           return;
2490         }
2491
2492       strcpy (own_buf, process->attached ? "1" : "0");
2493       return;
2494     }
2495
2496   if (startswith (own_buf, "qCRC:"))
2497     {
2498       /* CRC check (compare-section).  */
2499       char *comma;
2500       ULONGEST base;
2501       int len;
2502       unsigned long long crc;
2503
2504       require_running (own_buf);
2505       comma = unpack_varlen_hex (own_buf + 5, &base);
2506       if (*comma++ != ',')
2507         {
2508           write_enn (own_buf);
2509           return;
2510         }
2511       len = strtoul (comma, NULL, 16);
2512       crc = crc32 (base, len, 0xffffffff);
2513       /* Check for memory failure.  */
2514       if (crc == (unsigned long long) -1)
2515         {
2516           write_enn (own_buf);
2517           return;
2518         }
2519       sprintf (own_buf, "C%lx", (unsigned long) crc);
2520       return;
2521     }
2522
2523   if (handle_qxfer (own_buf, packet_len, new_packet_len_p))
2524     return;
2525
2526   if (target_supports_tracepoints () && handle_tracepoint_query (own_buf))
2527     return;
2528
2529   /* Otherwise we didn't know what packet it was.  Say we didn't
2530      understand it.  */
2531   own_buf[0] = 0;
2532 }
2533
2534 static void gdb_wants_all_threads_stopped (void);
2535 static void resume (struct thread_resume *actions, size_t n);
2536
2537 /* The callback that is passed to visit_actioned_threads.  */
2538 typedef int (visit_actioned_threads_callback_ftype)
2539   (const struct thread_resume *, struct thread_info *);
2540
2541 /* Struct to pass data to visit_actioned_threads.  */
2542
2543 struct visit_actioned_threads_data
2544 {
2545   const struct thread_resume *actions;
2546   size_t num_actions;
2547   visit_actioned_threads_callback_ftype *callback;
2548 };
2549
2550 /* Call CALLBACK for any thread to which ACTIONS applies to.  Returns
2551    true if CALLBACK returns true.  Returns false if no matching thread
2552    is found or CALLBACK results false.
2553    Note: This function is itself a callback for find_inferior.  */
2554
2555 static int
2556 visit_actioned_threads (struct inferior_list_entry *entry, void *datap)
2557 {
2558   struct visit_actioned_threads_data *data
2559     = (struct visit_actioned_threads_data *) datap;
2560   const struct thread_resume *actions = data->actions;
2561   size_t num_actions = data->num_actions;
2562   visit_actioned_threads_callback_ftype *callback = data->callback;
2563   size_t i;
2564
2565   for (i = 0; i < num_actions; i++)
2566     {
2567       const struct thread_resume *action = &actions[i];
2568
2569       if (ptid_equal (action->thread, minus_one_ptid)
2570           || ptid_equal (action->thread, entry->id)
2571           || ((ptid_get_pid (action->thread)
2572                == ptid_get_pid (entry->id))
2573               && ptid_get_lwp (action->thread) == -1))
2574         {
2575           struct thread_info *thread = (struct thread_info *) entry;
2576
2577           if ((*callback) (action, thread))
2578             return 1;
2579         }
2580     }
2581
2582   return 0;
2583 }
2584
2585 /* Callback for visit_actioned_threads.  If the thread has a pending
2586    status to report, report it now.  */
2587
2588 static int
2589 handle_pending_status (const struct thread_resume *resumption,
2590                        struct thread_info *thread)
2591 {
2592   if (thread->status_pending_p)
2593     {
2594       thread->status_pending_p = 0;
2595
2596       last_status = thread->last_status;
2597       last_ptid = thread->entry.id;
2598       prepare_resume_reply (own_buf, last_ptid, &last_status);
2599       return 1;
2600     }
2601   return 0;
2602 }
2603
2604 /* Parse vCont packets.  */
2605 static void
2606 handle_v_cont (char *own_buf)
2607 {
2608   char *p, *q;
2609   int n = 0, i = 0;
2610   struct thread_resume *resume_info;
2611   struct thread_resume default_action { null_ptid };
2612
2613   /* Count the number of semicolons in the packet.  There should be one
2614      for every action.  */
2615   p = &own_buf[5];
2616   while (p)
2617     {
2618       n++;
2619       p++;
2620       p = strchr (p, ';');
2621     }
2622
2623   resume_info = (struct thread_resume *) malloc (n * sizeof (resume_info[0]));
2624   if (resume_info == NULL)
2625     goto err;
2626
2627   p = &own_buf[5];
2628   while (*p)
2629     {
2630       p++;
2631
2632       memset (&resume_info[i], 0, sizeof resume_info[i]);
2633
2634       if (p[0] == 's' || p[0] == 'S')
2635         resume_info[i].kind = resume_step;
2636       else if (p[0] == 'r')
2637         resume_info[i].kind = resume_step;
2638       else if (p[0] == 'c' || p[0] == 'C')
2639         resume_info[i].kind = resume_continue;
2640       else if (p[0] == 't')
2641         resume_info[i].kind = resume_stop;
2642       else
2643         goto err;
2644
2645       if (p[0] == 'S' || p[0] == 'C')
2646         {
2647           int sig;
2648           sig = strtol (p + 1, &q, 16);
2649           if (p == q)
2650             goto err;
2651           p = q;
2652
2653           if (!gdb_signal_to_host_p ((enum gdb_signal) sig))
2654             goto err;
2655           resume_info[i].sig = gdb_signal_to_host ((enum gdb_signal) sig);
2656         }
2657       else if (p[0] == 'r')
2658         {
2659           ULONGEST addr;
2660
2661           p = unpack_varlen_hex (p + 1, &addr);
2662           resume_info[i].step_range_start = addr;
2663
2664           if (*p != ',')
2665             goto err;
2666
2667           p = unpack_varlen_hex (p + 1, &addr);
2668           resume_info[i].step_range_end = addr;
2669         }
2670       else
2671         {
2672           p = p + 1;
2673         }
2674
2675       if (p[0] == 0)
2676         {
2677           resume_info[i].thread = minus_one_ptid;
2678           default_action = resume_info[i];
2679
2680           /* Note: we don't increment i here, we'll overwrite this entry
2681              the next time through.  */
2682         }
2683       else if (p[0] == ':')
2684         {
2685           ptid_t ptid = read_ptid (p + 1, &q);
2686
2687           if (p == q)
2688             goto err;
2689           p = q;
2690           if (p[0] != ';' && p[0] != 0)
2691             goto err;
2692
2693           resume_info[i].thread = ptid;
2694
2695           i++;
2696         }
2697     }
2698
2699   if (i < n)
2700     resume_info[i] = default_action;
2701
2702   resume (resume_info, n);
2703   free (resume_info);
2704   return;
2705
2706 err:
2707   write_enn (own_buf);
2708   free (resume_info);
2709   return;
2710 }
2711
2712 /* Resume target with ACTIONS, an array of NUM_ACTIONS elements.  */
2713
2714 static void
2715 resume (struct thread_resume *actions, size_t num_actions)
2716 {
2717   if (!non_stop)
2718     {
2719       /* Check if among the threads that GDB wants actioned, there's
2720          one with a pending status to report.  If so, skip actually
2721          resuming/stopping and report the pending event
2722          immediately.  */
2723       struct visit_actioned_threads_data data;
2724
2725       data.actions = actions;
2726       data.num_actions = num_actions;
2727       data.callback = handle_pending_status;
2728       if (find_inferior (&all_threads, visit_actioned_threads, &data) != NULL)
2729         return;
2730
2731       enable_async_io ();
2732     }
2733
2734   (*the_target->resume) (actions, num_actions);
2735
2736   if (non_stop)
2737     write_ok (own_buf);
2738   else
2739     {
2740       last_ptid = mywait (minus_one_ptid, &last_status, 0, 1);
2741
2742       if (last_status.kind == TARGET_WAITKIND_NO_RESUMED
2743           && !report_no_resumed)
2744         {
2745           /* The client does not support this stop reply.  At least
2746              return error.  */
2747           sprintf (own_buf, "E.No unwaited-for children left.");
2748           disable_async_io ();
2749           return;
2750         }
2751
2752       if (last_status.kind != TARGET_WAITKIND_EXITED
2753           && last_status.kind != TARGET_WAITKIND_SIGNALLED
2754           && last_status.kind != TARGET_WAITKIND_NO_RESUMED)
2755         current_thread->last_status = last_status;
2756
2757       /* From the client's perspective, all-stop mode always stops all
2758          threads implicitly (and the target backend has already done
2759          so by now).  Tag all threads as "want-stopped", so we don't
2760          resume them implicitly without the client telling us to.  */
2761       gdb_wants_all_threads_stopped ();
2762       prepare_resume_reply (own_buf, last_ptid, &last_status);
2763       disable_async_io ();
2764
2765       if (last_status.kind == TARGET_WAITKIND_EXITED
2766           || last_status.kind == TARGET_WAITKIND_SIGNALLED)
2767         target_mourn_inferior (last_ptid);
2768     }
2769 }
2770
2771 /* Attach to a new program.  Return 1 if successful, 0 if failure.  */
2772 static int
2773 handle_v_attach (char *own_buf)
2774 {
2775   int pid;
2776
2777   pid = strtol (own_buf + 8, NULL, 16);
2778   if (pid != 0 && attach_inferior (pid) == 0)
2779     {
2780       /* Don't report shared library events after attaching, even if
2781          some libraries are preloaded.  GDB will always poll the
2782          library list.  Avoids the "stopped by shared library event"
2783          notice on the GDB side.  */
2784       dlls_changed = 0;
2785
2786       if (non_stop)
2787         {
2788           /* In non-stop, we don't send a resume reply.  Stop events
2789              will follow up using the normal notification
2790              mechanism.  */
2791           write_ok (own_buf);
2792         }
2793       else
2794         prepare_resume_reply (own_buf, last_ptid, &last_status);
2795
2796       return 1;
2797     }
2798   else
2799     {
2800       write_enn (own_buf);
2801       return 0;
2802     }
2803 }
2804
2805 /* Run a new program.  Return 1 if successful, 0 if failure.  */
2806 static int
2807 handle_v_run (char *own_buf)
2808 {
2809   char *p, *next_p;
2810   std::vector<char *> new_argv;
2811   char *new_program_name = NULL;
2812   int i, new_argc;
2813
2814   new_argc = 0;
2815   for (p = own_buf + strlen ("vRun;"); p && *p; p = strchr (p, ';'))
2816     {
2817       p++;
2818       new_argc++;
2819     }
2820
2821   for (i = 0, p = own_buf + strlen ("vRun;"); *p; p = next_p, ++i)
2822     {
2823       next_p = strchr (p, ';');
2824       if (next_p == NULL)
2825         next_p = p + strlen (p);
2826
2827       if (i == 0 && p == next_p)
2828         {
2829           /* No program specified.  */
2830           new_program_name = NULL;
2831         }
2832       else if (p == next_p)
2833         {
2834           /* Empty argument.  */
2835           new_argv.push_back (xstrdup ("''"));
2836         }
2837       else
2838         {
2839           size_t len = (next_p - p) / 2;
2840           /* ARG is the unquoted argument received via the RSP.  */
2841           char *arg = (char *) xmalloc (len + 1);
2842           /* FULL_ARGS will contain the quoted version of ARG.  */
2843           char *full_arg = (char *) xmalloc ((len + 1) * 2);
2844           /* These are pointers used to navigate the strings above.  */
2845           char *tmp_arg = arg;
2846           char *tmp_full_arg = full_arg;
2847           int need_quote = 0;
2848
2849           hex2bin (p, (gdb_byte *) arg, len);
2850           arg[len] = '\0';
2851
2852           while (*tmp_arg != '\0')
2853             {
2854               switch (*tmp_arg)
2855                 {
2856                 case '\n':
2857                   /* Quote \n.  */
2858                   *tmp_full_arg = '\'';
2859                   ++tmp_full_arg;
2860                   need_quote = 1;
2861                   break;
2862
2863                 case '\'':
2864                   /* Quote single quote.  */
2865                   *tmp_full_arg = '\\';
2866                   ++tmp_full_arg;
2867                   break;
2868
2869                 default:
2870                   break;
2871                 }
2872
2873               *tmp_full_arg = *tmp_arg;
2874               ++tmp_full_arg;
2875               ++tmp_arg;
2876             }
2877
2878           if (need_quote)
2879             *tmp_full_arg++ = '\'';
2880
2881           /* Finish FULL_ARG and push it into the vector containing
2882              the argv.  */
2883           *tmp_full_arg = '\0';
2884           if (i == 0)
2885             new_program_name = full_arg;
2886           else
2887             new_argv.push_back (full_arg);
2888           xfree (arg);
2889         }
2890       if (*next_p)
2891         next_p++;
2892     }
2893   new_argv.push_back (NULL);
2894
2895   if (new_program_name == NULL)
2896     {
2897       /* GDB didn't specify a program to run.  Use the program from the
2898          last run with the new argument list.  */
2899       if (program_name == NULL)
2900         {
2901           write_enn (own_buf);
2902           free_vector_argv (new_argv);
2903           return 0;
2904         }
2905     }
2906   else
2907     {
2908       xfree (program_name);
2909       program_name = new_program_name;
2910     }
2911
2912   /* Free the old argv and install the new one.  */
2913   free_vector_argv (program_args);
2914   program_args = new_argv;
2915
2916   create_inferior (program_name, program_args);
2917
2918   if (last_status.kind == TARGET_WAITKIND_STOPPED)
2919     {
2920       prepare_resume_reply (own_buf, last_ptid, &last_status);
2921
2922       /* In non-stop, sending a resume reply doesn't set the general
2923          thread, but GDB assumes a vRun sets it (this is so GDB can
2924          query which is the main thread of the new inferior.  */
2925       if (non_stop)
2926         general_thread = last_ptid;
2927
2928       return 1;
2929     }
2930   else
2931     {
2932       write_enn (own_buf);
2933       return 0;
2934     }
2935 }
2936
2937 /* Kill process.  Return 1 if successful, 0 if failure.  */
2938 static int
2939 handle_v_kill (char *own_buf)
2940 {
2941   int pid;
2942   char *p = &own_buf[6];
2943   if (multi_process)
2944     pid = strtol (p, NULL, 16);
2945   else
2946     pid = signal_pid;
2947   if (pid != 0 && kill_inferior (pid) == 0)
2948     {
2949       last_status.kind = TARGET_WAITKIND_SIGNALLED;
2950       last_status.value.sig = GDB_SIGNAL_KILL;
2951       last_ptid = pid_to_ptid (pid);
2952       discard_queued_stop_replies (last_ptid);
2953       write_ok (own_buf);
2954       return 1;
2955     }
2956   else
2957     {
2958       write_enn (own_buf);
2959       return 0;
2960     }
2961 }
2962
2963 /* Handle all of the extended 'v' packets.  */
2964 void
2965 handle_v_requests (char *own_buf, int packet_len, int *new_packet_len)
2966 {
2967   if (!disable_packet_vCont)
2968     {
2969       if (strcmp (own_buf, "vCtrlC") == 0)
2970         {
2971           (*the_target->request_interrupt) ();
2972           write_ok (own_buf);
2973           return;
2974         }
2975
2976       if (startswith (own_buf, "vCont;"))
2977         {
2978           handle_v_cont (own_buf);
2979           return;
2980         }
2981
2982       if (startswith (own_buf, "vCont?"))
2983         {
2984           strcpy (own_buf, "vCont;c;C;t");
2985
2986           if (target_supports_hardware_single_step ()
2987               || target_supports_software_single_step ()
2988               || !vCont_supported)
2989             {
2990               /* If target supports single step either by hardware or by
2991                  software, add actions s and S to the list of supported
2992                  actions.  On the other hand, if GDB doesn't request the
2993                  supported vCont actions in qSupported packet, add s and
2994                  S to the list too.  */
2995               own_buf = own_buf + strlen (own_buf);
2996               strcpy (own_buf, ";s;S");
2997             }
2998
2999           if (target_supports_range_stepping ())
3000             {
3001               own_buf = own_buf + strlen (own_buf);
3002               strcpy (own_buf, ";r");
3003             }
3004           return;
3005         }
3006     }
3007
3008   if (startswith (own_buf, "vFile:")
3009       && handle_vFile (own_buf, packet_len, new_packet_len))
3010     return;
3011
3012   if (startswith (own_buf, "vAttach;"))
3013     {
3014       if ((!extended_protocol || !multi_process) && target_running ())
3015         {
3016           fprintf (stderr, "Already debugging a process\n");
3017           write_enn (own_buf);
3018           return;
3019         }
3020       handle_v_attach (own_buf);
3021       return;
3022     }
3023
3024   if (startswith (own_buf, "vRun;"))
3025     {
3026       if ((!extended_protocol || !multi_process) && target_running ())
3027         {
3028           fprintf (stderr, "Already debugging a process\n");
3029           write_enn (own_buf);
3030           return;
3031         }
3032       handle_v_run (own_buf);
3033       return;
3034     }
3035
3036   if (startswith (own_buf, "vKill;"))
3037     {
3038       if (!target_running ())
3039         {
3040           fprintf (stderr, "No process to kill\n");
3041           write_enn (own_buf);
3042           return;
3043         }
3044       handle_v_kill (own_buf);
3045       return;
3046     }
3047
3048   if (handle_notif_ack (own_buf, packet_len))
3049     return;
3050
3051   /* Otherwise we didn't know what packet it was.  Say we didn't
3052      understand it.  */
3053   own_buf[0] = 0;
3054   return;
3055 }
3056
3057 /* Resume thread and wait for another event.  In non-stop mode,
3058    don't really wait here, but return immediatelly to the event
3059    loop.  */
3060 static void
3061 myresume (char *own_buf, int step, int sig)
3062 {
3063   struct thread_resume resume_info[2];
3064   int n = 0;
3065   int valid_cont_thread;
3066
3067   valid_cont_thread = (!ptid_equal (cont_thread, null_ptid)
3068                          && !ptid_equal (cont_thread, minus_one_ptid));
3069
3070   if (step || sig || valid_cont_thread)
3071     {
3072       resume_info[0].thread = current_ptid;
3073       if (step)
3074         resume_info[0].kind = resume_step;
3075       else
3076         resume_info[0].kind = resume_continue;
3077       resume_info[0].sig = sig;
3078       n++;
3079     }
3080
3081   if (!valid_cont_thread)
3082     {
3083       resume_info[n].thread = minus_one_ptid;
3084       resume_info[n].kind = resume_continue;
3085       resume_info[n].sig = 0;
3086       n++;
3087     }
3088
3089   resume (resume_info, n);
3090 }
3091
3092 /* Callback for for_each_inferior.  Make a new stop reply for each
3093    stopped thread.  */
3094
3095 static int
3096 queue_stop_reply_callback (struct inferior_list_entry *entry, void *arg)
3097 {
3098   struct thread_info *thread = (struct thread_info *) entry;
3099
3100   /* For now, assume targets that don't have this callback also don't
3101      manage the thread's last_status field.  */
3102   if (the_target->thread_stopped == NULL)
3103     {
3104       struct vstop_notif *new_notif = XNEW (struct vstop_notif);
3105
3106       new_notif->ptid = entry->id;
3107       new_notif->status = thread->last_status;
3108       /* Pass the last stop reply back to GDB, but don't notify
3109          yet.  */
3110       notif_event_enque (&notif_stop,
3111                          (struct notif_event *) new_notif);
3112     }
3113   else
3114     {
3115       if (thread_stopped (thread))
3116         {
3117           if (debug_threads)
3118             {
3119               char *status_string
3120                 = target_waitstatus_to_string (&thread->last_status);
3121
3122               debug_printf ("Reporting thread %s as already stopped with %s\n",
3123                             target_pid_to_str (entry->id),
3124                             status_string);
3125
3126               xfree (status_string);
3127             }
3128
3129           gdb_assert (thread->last_status.kind != TARGET_WAITKIND_IGNORE);
3130
3131           /* Pass the last stop reply back to GDB, but don't notify
3132              yet.  */
3133           queue_stop_reply (entry->id, &thread->last_status);
3134         }
3135     }
3136
3137   return 0;
3138 }
3139
3140 /* Set this inferior threads's state as "want-stopped".  We won't
3141    resume this thread until the client gives us another action for
3142    it.  */
3143
3144 static void
3145 gdb_wants_thread_stopped (struct inferior_list_entry *entry)
3146 {
3147   struct thread_info *thread = (struct thread_info *) entry;
3148
3149   thread->last_resume_kind = resume_stop;
3150
3151   if (thread->last_status.kind == TARGET_WAITKIND_IGNORE)
3152     {
3153       /* Most threads are stopped implicitly (all-stop); tag that with
3154          signal 0.  */
3155       thread->last_status.kind = TARGET_WAITKIND_STOPPED;
3156       thread->last_status.value.sig = GDB_SIGNAL_0;
3157     }
3158 }
3159
3160 /* Set all threads' states as "want-stopped".  */
3161
3162 static void
3163 gdb_wants_all_threads_stopped (void)
3164 {
3165   for_each_inferior (&all_threads, gdb_wants_thread_stopped);
3166 }
3167
3168 /* Clear the gdb_detached flag of every process.  */
3169
3170 static void
3171 gdb_reattached_process (struct inferior_list_entry *entry)
3172 {
3173   struct process_info *process = (struct process_info *) entry;
3174
3175   process->gdb_detached = 0;
3176 }
3177
3178 /* Callback for for_each_inferior.  Clear the thread's pending status
3179    flag.  */
3180
3181 static void
3182 clear_pending_status_callback (struct inferior_list_entry *entry)
3183 {
3184   struct thread_info *thread = (struct thread_info *) entry;
3185
3186   thread->status_pending_p = 0;
3187 }
3188
3189 /* Callback for for_each_inferior.  If the thread is stopped with an
3190    interesting event, mark it as having a pending event.  */
3191
3192 static void
3193 set_pending_status_callback (struct inferior_list_entry *entry)
3194 {
3195   struct thread_info *thread = (struct thread_info *) entry;
3196
3197   if (thread->last_status.kind != TARGET_WAITKIND_STOPPED
3198       || (thread->last_status.value.sig != GDB_SIGNAL_0
3199           /* A breakpoint, watchpoint or finished step from a previous
3200              GDB run isn't considered interesting for a new GDB run.
3201              If we left those pending, the new GDB could consider them
3202              random SIGTRAPs.  This leaves out real async traps.  We'd
3203              have to peek into the (target-specific) siginfo to
3204              distinguish those.  */
3205           && thread->last_status.value.sig != GDB_SIGNAL_TRAP))
3206     thread->status_pending_p = 1;
3207 }
3208
3209 /* Callback for find_inferior.  Return true if ENTRY (a thread) has a
3210    pending status to report to GDB.  */
3211
3212 static int
3213 find_status_pending_thread_callback (struct inferior_list_entry *entry, void *data)
3214 {
3215   struct thread_info *thread = (struct thread_info *) entry;
3216
3217   return thread->status_pending_p;
3218 }
3219
3220 /* Status handler for the '?' packet.  */
3221
3222 static void
3223 handle_status (char *own_buf)
3224 {
3225   /* GDB is connected, don't forward events to the target anymore.  */
3226   for_each_inferior (&all_processes, gdb_reattached_process);
3227
3228   /* In non-stop mode, we must send a stop reply for each stopped
3229      thread.  In all-stop mode, just send one for the first stopped
3230      thread we find.  */
3231
3232   if (non_stop)
3233     {
3234       find_inferior (&all_threads, queue_stop_reply_callback, NULL);
3235
3236       /* The first is sent immediatly.  OK is sent if there is no
3237          stopped thread, which is the same handling of the vStopped
3238          packet (by design).  */
3239       notif_write_event (&notif_stop, own_buf);
3240     }
3241   else
3242     {
3243       struct inferior_list_entry *thread = NULL;
3244
3245       pause_all (0);
3246       stabilize_threads ();
3247       gdb_wants_all_threads_stopped ();
3248
3249       /* We can only report one status, but we might be coming out of
3250          non-stop -- if more than one thread is stopped with
3251          interesting events, leave events for the threads we're not
3252          reporting now pending.  They'll be reported the next time the
3253          threads are resumed.  Start by marking all interesting events
3254          as pending.  */
3255       for_each_inferior (&all_threads, set_pending_status_callback);
3256
3257       /* Prefer the last thread that reported an event to GDB (even if
3258          that was a GDB_SIGNAL_TRAP).  */
3259       if (last_status.kind != TARGET_WAITKIND_IGNORE
3260           && last_status.kind != TARGET_WAITKIND_EXITED
3261           && last_status.kind != TARGET_WAITKIND_SIGNALLED)
3262         thread = find_inferior_id (&all_threads, last_ptid);
3263
3264       /* If the last event thread is not found for some reason, look
3265          for some other thread that might have an event to report.  */
3266       if (thread == NULL)
3267         thread = find_inferior (&all_threads,
3268                                 find_status_pending_thread_callback, NULL);
3269
3270       /* If we're still out of luck, simply pick the first thread in
3271          the thread list.  */
3272       if (thread == NULL)
3273         thread = get_first_inferior (&all_threads);
3274
3275       if (thread != NULL)
3276         {
3277           struct thread_info *tp = (struct thread_info *) thread;
3278
3279           /* We're reporting this event, so it's no longer
3280              pending.  */
3281           tp->status_pending_p = 0;
3282
3283           /* GDB assumes the current thread is the thread we're
3284              reporting the status for.  */
3285           general_thread = thread->id;
3286           set_desired_thread (1);
3287
3288           gdb_assert (tp->last_status.kind != TARGET_WAITKIND_IGNORE);
3289           prepare_resume_reply (own_buf, tp->entry.id, &tp->last_status);
3290         }
3291       else
3292         strcpy (own_buf, "W00");
3293     }
3294 }
3295
3296 static void
3297 gdbserver_version (void)
3298 {
3299   printf ("GNU gdbserver %s%s\n"
3300           "Copyright (C) 2017 Free Software Foundation, Inc.\n"
3301           "gdbserver is free software, covered by the "
3302           "GNU General Public License.\n"
3303           "This gdbserver was configured as \"%s\"\n",
3304           PKGVERSION, version, host_name);
3305 }
3306
3307 static void
3308 gdbserver_usage (FILE *stream)
3309 {
3310   fprintf (stream, "Usage:\tgdbserver [OPTIONS] COMM PROG [ARGS ...]\n"
3311            "\tgdbserver [OPTIONS] --attach COMM PID\n"
3312            "\tgdbserver [OPTIONS] --multi COMM\n"
3313            "\n"
3314            "COMM may either be a tty device (for serial debugging),\n"
3315            "HOST:PORT to listen for a TCP connection, or '-' or 'stdio' to use \n"
3316            "stdin/stdout of gdbserver.\n"
3317            "PROG is the executable program.  ARGS are arguments passed to inferior.\n"
3318            "PID is the process ID to attach to, when --attach is specified.\n"
3319            "\n"
3320            "Operating modes:\n"
3321            "\n"
3322            "  --attach              Attach to running process PID.\n"
3323            "  --multi               Start server without a specific program, and\n"
3324            "                        only quit when explicitly commanded.\n"
3325            "  --once                Exit after the first connection has closed.\n"
3326            "  --help                Print this message and then exit.\n"
3327            "  --version             Display version information and exit.\n"
3328            "\n"
3329            "Other options:\n"
3330            "\n"
3331            "  --wrapper WRAPPER --  Run WRAPPER to start new programs.\n"
3332            "  --disable-randomization\n"
3333            "                        Run PROG with address space randomization disabled.\n"
3334            "  --no-disable-randomization\n"
3335            "                        Don't disable address space randomization when\n"
3336            "                        starting PROG.\n"
3337            "  --startup-with-shell\n"
3338            "                        Start PROG using a shell.  I.e., execs a shell that\n"
3339            "                        then execs PROG.  (default)\n"
3340            "  --no-startup-with-shell\n"
3341            "                        Exec PROG directly instead of using a shell.\n"
3342            "                        Disables argument globbing and variable substitution\n"
3343            "                        on UNIX-like systems.\n"
3344            "\n"
3345            "Debug options:\n"
3346            "\n"
3347            "  --debug               Enable general debugging output.\n"
3348            "  --debug-format=opt1[,opt2,...]\n"
3349            "                        Specify extra content in debugging output.\n"
3350            "                          Options:\n"
3351            "                            all\n"
3352            "                            none\n"
3353            "                            timestamp\n"
3354            "  --remote-debug        Enable remote protocol debugging output.\n"
3355            "  --disable-packet=opt1[,opt2,...]\n"
3356            "                        Disable support for RSP packets or features.\n"
3357            "                          Options:\n"
3358            "                            vCont, Tthread, qC, qfThreadInfo and \n"
3359            "                            threads (disable all threading packets).\n"
3360            "\n"
3361            "For more information, consult the GDB manual (available as on-line \n"
3362            "info or a printed manual).\n");
3363   if (REPORT_BUGS_TO[0] && stream == stdout)
3364     fprintf (stream, "Report bugs to \"%s\".\n", REPORT_BUGS_TO);
3365 }
3366
3367 static void
3368 gdbserver_show_disableable (FILE *stream)
3369 {
3370   fprintf (stream, "Disableable packets:\n"
3371            "  vCont       \tAll vCont packets\n"
3372            "  qC          \tQuerying the current thread\n"
3373            "  qfThreadInfo\tThread listing\n"
3374            "  Tthread     \tPassing the thread specifier in the "
3375            "T stop reply packet\n"
3376            "  threads     \tAll of the above\n");
3377 }
3378
3379
3380 #undef require_running
3381 #define require_running(BUF)                    \
3382   if (!target_running ())                       \
3383     {                                           \
3384       write_enn (BUF);                          \
3385       break;                                    \
3386     }
3387
3388 static int
3389 first_thread_of (struct inferior_list_entry *entry, void *args)
3390 {
3391   int pid = * (int *) args;
3392
3393   if (ptid_get_pid (entry->id) == pid)
3394     return 1;
3395
3396   return 0;
3397 }
3398
3399 static void
3400 kill_inferior_callback (struct inferior_list_entry *entry)
3401 {
3402   struct process_info *process = (struct process_info *) entry;
3403   int pid = ptid_get_pid (process->entry.id);
3404
3405   kill_inferior (pid);
3406   discard_queued_stop_replies (pid_to_ptid (pid));
3407 }
3408
3409 /* Callback for for_each_inferior to detach or kill the inferior,
3410    depending on whether we attached to it or not.
3411    We inform the user whether we're detaching or killing the process
3412    as this is only called when gdbserver is about to exit.  */
3413
3414 static void
3415 detach_or_kill_inferior_callback (struct inferior_list_entry *entry)
3416 {
3417   struct process_info *process = (struct process_info *) entry;
3418   int pid = ptid_get_pid (process->entry.id);
3419
3420   if (process->attached)
3421     detach_inferior (pid);
3422   else
3423     kill_inferior (pid);
3424
3425   discard_queued_stop_replies (pid_to_ptid (pid));
3426 }
3427
3428 /* for_each_inferior callback for detach_or_kill_for_exit to print
3429    the pids of started inferiors.  */
3430
3431 static void
3432 print_started_pid (struct inferior_list_entry *entry)
3433 {
3434   struct process_info *process = (struct process_info *) entry;
3435
3436   if (! process->attached)
3437     {
3438       int pid = ptid_get_pid (process->entry.id);
3439       fprintf (stderr, " %d", pid);
3440     }
3441 }
3442
3443 /* for_each_inferior callback for detach_or_kill_for_exit to print
3444    the pids of attached inferiors.  */
3445
3446 static void
3447 print_attached_pid (struct inferior_list_entry *entry)
3448 {
3449   struct process_info *process = (struct process_info *) entry;
3450
3451   if (process->attached)
3452     {
3453       int pid = ptid_get_pid (process->entry.id);
3454       fprintf (stderr, " %d", pid);
3455     }
3456 }
3457
3458 /* Call this when exiting gdbserver with possible inferiors that need
3459    to be killed or detached from.  */
3460
3461 static void
3462 detach_or_kill_for_exit (void)
3463 {
3464   /* First print a list of the inferiors we will be killing/detaching.
3465      This is to assist the user, for example, in case the inferior unexpectedly
3466      dies after we exit: did we screw up or did the inferior exit on its own?
3467      Having this info will save some head-scratching.  */
3468
3469   if (have_started_inferiors_p ())
3470     {
3471       fprintf (stderr, "Killing process(es):");
3472       for_each_inferior (&all_processes, print_started_pid);
3473       fprintf (stderr, "\n");
3474     }
3475   if (have_attached_inferiors_p ())
3476     {
3477       fprintf (stderr, "Detaching process(es):");
3478       for_each_inferior (&all_processes, print_attached_pid);
3479       fprintf (stderr, "\n");
3480     }
3481
3482   /* Now we can kill or detach the inferiors.  */
3483
3484   for_each_inferior (&all_processes, detach_or_kill_inferior_callback);
3485 }
3486
3487 /* Value that will be passed to exit(3) when gdbserver exits.  */
3488 static int exit_code;
3489
3490 /* Cleanup version of detach_or_kill_for_exit.  */
3491
3492 static void
3493 detach_or_kill_for_exit_cleanup (void *ignore)
3494 {
3495
3496   TRY
3497     {
3498       detach_or_kill_for_exit ();
3499     }
3500
3501   CATCH (exception, RETURN_MASK_ALL)
3502     {
3503       fflush (stdout);
3504       fprintf (stderr, "Detach or kill failed: %s\n", exception.message);
3505       exit_code = 1;
3506     }
3507   END_CATCH
3508 }
3509
3510 /* Main function.  This is called by the real "main" function,
3511    wrapped in a TRY_CATCH that handles any uncaught exceptions.  */
3512
3513 static void ATTRIBUTE_NORETURN
3514 captured_main (int argc, char *argv[])
3515 {
3516   int bad_attach;
3517   int pid;
3518   char *arg_end;
3519   const char *port = NULL;
3520   char **next_arg = &argv[1];
3521   volatile int multi_mode = 0;
3522   volatile int attach = 0;
3523   int was_running;
3524
3525   while (*next_arg != NULL && **next_arg == '-')
3526     {
3527       if (strcmp (*next_arg, "--version") == 0)
3528         {
3529           gdbserver_version ();
3530           exit (0);
3531         }
3532       else if (strcmp (*next_arg, "--help") == 0)
3533         {
3534           gdbserver_usage (stdout);
3535           exit (0);
3536         }
3537       else if (strcmp (*next_arg, "--attach") == 0)
3538         attach = 1;
3539       else if (strcmp (*next_arg, "--multi") == 0)
3540         multi_mode = 1;
3541       else if (strcmp (*next_arg, "--wrapper") == 0)
3542         {
3543           char **tmp;
3544
3545           next_arg++;
3546
3547           tmp = next_arg;
3548           while (*next_arg != NULL && strcmp (*next_arg, "--") != 0)
3549             {
3550               wrapper_argv += *next_arg;
3551               wrapper_argv += ' ';
3552               next_arg++;
3553             }
3554
3555           if (!wrapper_argv.empty ())
3556             {
3557               /* Erase the last whitespace.  */
3558               wrapper_argv.erase (wrapper_argv.end () - 1);
3559             }
3560
3561           if (next_arg == tmp || *next_arg == NULL)
3562             {
3563               gdbserver_usage (stderr);
3564               exit (1);
3565             }
3566
3567           /* Consume the "--".  */
3568           *next_arg = NULL;
3569         }
3570       else if (strcmp (*next_arg, "--debug") == 0)
3571         debug_threads = 1;
3572       else if (startswith (*next_arg, "--debug-format="))
3573         {
3574           char *error_msg
3575             = parse_debug_format_options ((*next_arg)
3576                                           + sizeof ("--debug-format=") - 1, 0);
3577
3578           if (error_msg != NULL)
3579             {
3580               fprintf (stderr, "%s", error_msg);
3581               exit (1);
3582             }
3583         }
3584       else if (strcmp (*next_arg, "--remote-debug") == 0)
3585         remote_debug = 1;
3586       else if (strcmp (*next_arg, "--disable-packet") == 0)
3587         {
3588           gdbserver_show_disableable (stdout);
3589           exit (0);
3590         }
3591       else if (startswith (*next_arg, "--disable-packet="))
3592         {
3593           char *packets, *tok;
3594
3595           packets = *next_arg += sizeof ("--disable-packet=") - 1;
3596           for (tok = strtok (packets, ",");
3597                tok != NULL;
3598                tok = strtok (NULL, ","))
3599             {
3600               if (strcmp ("vCont", tok) == 0)
3601                 disable_packet_vCont = 1;
3602               else if (strcmp ("Tthread", tok) == 0)
3603                 disable_packet_Tthread = 1;
3604               else if (strcmp ("qC", tok) == 0)
3605                 disable_packet_qC = 1;
3606               else if (strcmp ("qfThreadInfo", tok) == 0)
3607                 disable_packet_qfThreadInfo = 1;
3608               else if (strcmp ("threads", tok) == 0)
3609                 {
3610                   disable_packet_vCont = 1;
3611                   disable_packet_Tthread = 1;
3612                   disable_packet_qC = 1;
3613                   disable_packet_qfThreadInfo = 1;
3614                 }
3615               else
3616                 {
3617                   fprintf (stderr, "Don't know how to disable \"%s\".\n\n",
3618                            tok);
3619                   gdbserver_show_disableable (stderr);
3620                   exit (1);
3621                 }
3622             }
3623         }
3624       else if (strcmp (*next_arg, "-") == 0)
3625         {
3626           /* "-" specifies a stdio connection and is a form of port
3627              specification.  */
3628           port = STDIO_CONNECTION_NAME;
3629           next_arg++;
3630           break;
3631         }
3632       else if (strcmp (*next_arg, "--disable-randomization") == 0)
3633         disable_randomization = 1;
3634       else if (strcmp (*next_arg, "--no-disable-randomization") == 0)
3635         disable_randomization = 0;
3636       else if (strcmp (*next_arg, "--startup-with-shell") == 0)
3637         startup_with_shell = true;
3638       else if (strcmp (*next_arg, "--no-startup-with-shell") == 0)
3639         startup_with_shell = false;
3640       else if (strcmp (*next_arg, "--once") == 0)
3641         run_once = 1;
3642       else
3643         {
3644           fprintf (stderr, "Unknown argument: %s\n", *next_arg);
3645           exit (1);
3646         }
3647
3648       next_arg++;
3649       continue;
3650     }
3651
3652   if (port == NULL)
3653     {
3654       port = *next_arg;
3655       next_arg++;
3656     }
3657   if (port == NULL || (!attach && !multi_mode && *next_arg == NULL))
3658     {
3659       gdbserver_usage (stderr);
3660       exit (1);
3661     }
3662
3663   /* Remember stdio descriptors.  LISTEN_DESC must not be listed, it will be
3664      opened by remote_prepare.  */
3665   notice_open_fds ();
3666
3667   save_original_signals_state ();
3668
3669   /* We need to know whether the remote connection is stdio before
3670      starting the inferior.  Inferiors created in this scenario have
3671      stdin,stdout redirected.  So do this here before we call
3672      start_inferior.  */
3673   remote_prepare (port);
3674
3675   bad_attach = 0;
3676   pid = 0;
3677
3678   /* --attach used to come after PORT, so allow it there for
3679        compatibility.  */
3680   if (*next_arg != NULL && strcmp (*next_arg, "--attach") == 0)
3681     {
3682       attach = 1;
3683       next_arg++;
3684     }
3685
3686   if (attach
3687       && (*next_arg == NULL
3688           || (*next_arg)[0] == '\0'
3689           || (pid = strtoul (*next_arg, &arg_end, 0)) == 0
3690           || *arg_end != '\0'
3691           || next_arg[1] != NULL))
3692     bad_attach = 1;
3693
3694   if (bad_attach)
3695     {
3696       gdbserver_usage (stderr);
3697       exit (1);
3698     }
3699
3700   /* Gather information about the environment.  */
3701   our_environ = make_environ ();
3702   init_environ (our_environ);
3703
3704   initialize_async_io ();
3705   initialize_low ();
3706   have_job_control ();
3707   initialize_event_loop ();
3708   if (target_supports_tracepoints ())
3709     initialize_tracepoint ();
3710   initialize_notif ();
3711
3712   own_buf = (char *) xmalloc (PBUFSIZ + 1);
3713   mem_buf = (unsigned char *) xmalloc (PBUFSIZ);
3714
3715   if (pid == 0 && *next_arg != NULL)
3716     {
3717       int i, n;
3718
3719       n = argc - (next_arg - argv);
3720       program_name = xstrdup (next_arg[0]);
3721       for (i = 1; i < n; i++)
3722         program_args.push_back (xstrdup (next_arg[i]));
3723       program_args.push_back (NULL);
3724
3725       /* Wait till we are at first instruction in program.  */
3726       create_inferior (program_name, program_args);
3727
3728       /* We are now (hopefully) stopped at the first instruction of
3729          the target process.  This assumes that the target process was
3730          successfully created.  */
3731     }
3732   else if (pid != 0)
3733     {
3734       if (attach_inferior (pid) == -1)
3735         error ("Attaching not supported on this target");
3736
3737       /* Otherwise succeeded.  */
3738     }
3739   else
3740     {
3741       last_status.kind = TARGET_WAITKIND_EXITED;
3742       last_status.value.integer = 0;
3743       last_ptid = minus_one_ptid;
3744     }
3745   make_cleanup (detach_or_kill_for_exit_cleanup, NULL);
3746
3747   /* Don't report shared library events on the initial connection,
3748      even if some libraries are preloaded.  Avoids the "stopped by
3749      shared library event" notice on gdb side.  */
3750   dlls_changed = 0;
3751
3752   if (last_status.kind == TARGET_WAITKIND_EXITED
3753       || last_status.kind == TARGET_WAITKIND_SIGNALLED)
3754     was_running = 0;
3755   else
3756     was_running = 1;
3757
3758   if (!was_running && !multi_mode)
3759     error ("No program to debug");
3760
3761   while (1)
3762     {
3763
3764       noack_mode = 0;
3765       multi_process = 0;
3766       report_fork_events = 0;
3767       report_vfork_events = 0;
3768       report_exec_events = 0;
3769       /* Be sure we're out of tfind mode.  */
3770       current_traceframe = -1;
3771       cont_thread = null_ptid;
3772       swbreak_feature = 0;
3773       hwbreak_feature = 0;
3774       vCont_supported = 0;
3775
3776       remote_open (port);
3777
3778       TRY
3779         {
3780           /* Wait for events.  This will return when all event sources
3781              are removed from the event loop.  */
3782           start_event_loop ();
3783
3784           /* If an exit was requested (using the "monitor exit"
3785              command), terminate now.  */
3786           if (exit_requested)
3787             throw_quit ("Quit");
3788
3789           /* The only other way to get here is for getpkt to fail:
3790
3791               - If --once was specified, we're done.
3792
3793               - If not in extended-remote mode, and we're no longer
3794                 debugging anything, simply exit: GDB has disconnected
3795                 after processing the last process exit.
3796
3797               - Otherwise, close the connection and reopen it at the
3798                 top of the loop.  */
3799           if (run_once || (!extended_protocol && !target_running ()))
3800             throw_quit ("Quit");
3801
3802           fprintf (stderr,
3803                    "Remote side has terminated connection.  "
3804                    "GDBserver will reopen the connection.\n");
3805
3806           /* Get rid of any pending statuses.  An eventual reconnection
3807              (by the same GDB instance or another) will refresh all its
3808              state from scratch.  */
3809           discard_queued_stop_replies (minus_one_ptid);
3810           for_each_inferior (&all_threads,
3811                              clear_pending_status_callback);
3812
3813           if (tracing)
3814             {
3815               if (disconnected_tracing)
3816                 {
3817                   /* Try to enable non-stop/async mode, so we we can
3818                      both wait for an async socket accept, and handle
3819                      async target events simultaneously.  There's also
3820                      no point either in having the target always stop
3821                      all threads, when we're going to pass signals
3822                      down without informing GDB.  */
3823                   if (!non_stop)
3824                     {
3825                       if (start_non_stop (1))
3826                         non_stop = 1;
3827
3828                       /* Detaching implicitly resumes all threads;
3829                          simply disconnecting does not.  */
3830                     }
3831                 }
3832               else
3833                 {
3834                   fprintf (stderr,
3835                            "Disconnected tracing disabled; "
3836                            "stopping trace run.\n");
3837                   stop_tracing ();
3838                 }
3839             }
3840         }
3841       CATCH (exception, RETURN_MASK_ERROR)
3842         {
3843           fflush (stdout);
3844           fprintf (stderr, "gdbserver: %s\n", exception.message);
3845
3846           if (response_needed)
3847             {
3848               write_enn (own_buf);
3849               putpkt (own_buf);
3850             }
3851
3852           if (run_once)
3853             throw_quit ("Quit");
3854         }
3855       END_CATCH
3856     }
3857 }
3858
3859 /* Main function.  */
3860
3861 int
3862 main (int argc, char *argv[])
3863 {
3864
3865   TRY
3866     {
3867       captured_main (argc, argv);
3868     }
3869   CATCH (exception, RETURN_MASK_ALL)
3870     {
3871       if (exception.reason == RETURN_ERROR)
3872         {
3873           fflush (stdout);
3874           fprintf (stderr, "%s\n", exception.message);
3875           fprintf (stderr, "Exiting\n");
3876           exit_code = 1;
3877         }
3878
3879       exit (exit_code);
3880     }
3881   END_CATCH
3882
3883   gdb_assert_not_reached ("captured_main should never return");
3884 }
3885
3886 /* Process options coming from Z packets for a breakpoint.  PACKET is
3887    the packet buffer.  *PACKET is updated to point to the first char
3888    after the last processed option.  */
3889
3890 static void
3891 process_point_options (struct gdb_breakpoint *bp, char **packet)
3892 {
3893   char *dataptr = *packet;
3894   int persist;
3895
3896   /* Check if data has the correct format.  */
3897   if (*dataptr != ';')
3898     return;
3899
3900   dataptr++;
3901
3902   while (*dataptr)
3903     {
3904       if (*dataptr == ';')
3905         ++dataptr;
3906
3907       if (*dataptr == 'X')
3908         {
3909           /* Conditional expression.  */
3910           if (debug_threads)
3911             debug_printf ("Found breakpoint condition.\n");
3912           if (!add_breakpoint_condition (bp, &dataptr))
3913             dataptr = strchrnul (dataptr, ';');
3914         }
3915       else if (startswith (dataptr, "cmds:"))
3916         {
3917           dataptr += strlen ("cmds:");
3918           if (debug_threads)
3919             debug_printf ("Found breakpoint commands %s.\n", dataptr);
3920           persist = (*dataptr == '1');
3921           dataptr += 2;
3922           if (add_breakpoint_commands (bp, &dataptr, persist))
3923             dataptr = strchrnul (dataptr, ';');
3924         }
3925       else
3926         {
3927           fprintf (stderr, "Unknown token %c, ignoring.\n",
3928                    *dataptr);
3929           /* Skip tokens until we find one that we recognize.  */
3930           dataptr = strchrnul (dataptr, ';');
3931         }
3932     }
3933   *packet = dataptr;
3934 }
3935
3936 /* Event loop callback that handles a serial event.  The first byte in
3937    the serial buffer gets us here.  We expect characters to arrive at
3938    a brisk pace, so we read the rest of the packet with a blocking
3939    getpkt call.  */
3940
3941 static int
3942 process_serial_event (void)
3943 {
3944   char ch;
3945   int i = 0;
3946   int signal;
3947   unsigned int len;
3948   int res;
3949   CORE_ADDR mem_addr;
3950   int pid;
3951   unsigned char sig;
3952   int packet_len;
3953   int new_packet_len = -1;
3954
3955   disable_async_io ();
3956
3957   response_needed = 0;
3958   packet_len = getpkt (own_buf);
3959   if (packet_len <= 0)
3960     {
3961       remote_close ();
3962       /* Force an event loop break.  */
3963       return -1;
3964     }
3965   response_needed = 1;
3966
3967   i = 0;
3968   ch = own_buf[i++];
3969   switch (ch)
3970     {
3971     case 'q':
3972       handle_query (own_buf, packet_len, &new_packet_len);
3973       break;
3974     case 'Q':
3975       handle_general_set (own_buf);
3976       break;
3977     case 'D':
3978       require_running (own_buf);
3979
3980       if (multi_process)
3981         {
3982           i++; /* skip ';' */
3983           pid = strtol (&own_buf[i], NULL, 16);
3984         }
3985       else
3986         pid = ptid_get_pid (current_ptid);
3987
3988       if ((tracing && disconnected_tracing) || any_persistent_commands ())
3989         {
3990           struct process_info *process = find_process_pid (pid);
3991
3992           if (process == NULL)
3993             {
3994               write_enn (own_buf);
3995               break;
3996             }
3997
3998           if (tracing && disconnected_tracing)
3999             fprintf (stderr,
4000                      "Disconnected tracing in effect, "
4001                      "leaving gdbserver attached to the process\n");
4002
4003           if (any_persistent_commands ())
4004             fprintf (stderr,
4005                      "Persistent commands are present, "
4006                      "leaving gdbserver attached to the process\n");
4007
4008           /* Make sure we're in non-stop/async mode, so we we can both
4009              wait for an async socket accept, and handle async target
4010              events simultaneously.  There's also no point either in
4011              having the target stop all threads, when we're going to
4012              pass signals down without informing GDB.  */
4013           if (!non_stop)
4014             {
4015               if (debug_threads)
4016                 debug_printf ("Forcing non-stop mode\n");
4017
4018               non_stop = 1;
4019               start_non_stop (1);
4020             }
4021
4022           process->gdb_detached = 1;
4023
4024           /* Detaching implicitly resumes all threads.  */
4025           target_continue_no_signal (minus_one_ptid);
4026
4027           write_ok (own_buf);
4028           break; /* from switch/case */
4029         }
4030
4031       fprintf (stderr, "Detaching from process %d\n", pid);
4032       stop_tracing ();
4033       if (detach_inferior (pid) != 0)
4034         write_enn (own_buf);
4035       else
4036         {
4037           discard_queued_stop_replies (pid_to_ptid (pid));
4038           write_ok (own_buf);
4039
4040           if (extended_protocol || target_running ())
4041             {
4042               /* There is still at least one inferior remaining or
4043                  we are in extended mode, so don't terminate gdbserver,
4044                  and instead treat this like a normal program exit.  */
4045               last_status.kind = TARGET_WAITKIND_EXITED;
4046               last_status.value.integer = 0;
4047               last_ptid = pid_to_ptid (pid);
4048
4049               current_thread = NULL;
4050             }
4051           else
4052             {
4053               putpkt (own_buf);
4054               remote_close ();
4055
4056               /* If we are attached, then we can exit.  Otherwise, we
4057                  need to hang around doing nothing, until the child is
4058                  gone.  */
4059               join_inferior (pid);
4060               exit (0);
4061             }
4062         }
4063       break;
4064     case '!':
4065       extended_protocol = 1;
4066       write_ok (own_buf);
4067       break;
4068     case '?':
4069       handle_status (own_buf);
4070       break;
4071     case 'H':
4072       if (own_buf[1] == 'c' || own_buf[1] == 'g' || own_buf[1] == 's')
4073         {
4074           ptid_t gdb_id, thread_id;
4075           int pid;
4076
4077           require_running (own_buf);
4078
4079           gdb_id = read_ptid (&own_buf[2], NULL);
4080
4081           pid = ptid_get_pid (gdb_id);
4082
4083           if (ptid_equal (gdb_id, null_ptid)
4084               || ptid_equal (gdb_id, minus_one_ptid))
4085             thread_id = null_ptid;
4086           else if (pid != 0
4087                    && ptid_equal (pid_to_ptid (pid),
4088                                   gdb_id))
4089             {
4090               struct thread_info *thread =
4091                 (struct thread_info *) find_inferior (&all_threads,
4092                                                       first_thread_of,
4093                                                       &pid);
4094               if (!thread)
4095                 {
4096                   write_enn (own_buf);
4097                   break;
4098                 }
4099
4100               thread_id = thread->entry.id;
4101             }
4102           else
4103             {
4104               thread_id = gdb_id_to_thread_id (gdb_id);
4105               if (ptid_equal (thread_id, null_ptid))
4106                 {
4107                   write_enn (own_buf);
4108                   break;
4109                 }
4110             }
4111
4112           if (own_buf[1] == 'g')
4113             {
4114               if (ptid_equal (thread_id, null_ptid))
4115                 {
4116                   /* GDB is telling us to choose any thread.  Check if
4117                      the currently selected thread is still valid. If
4118                      it is not, select the first available.  */
4119                   struct thread_info *thread =
4120                     (struct thread_info *) find_inferior_id (&all_threads,
4121                                                              general_thread);
4122                   if (thread == NULL)
4123                     thread = get_first_thread ();
4124                   thread_id = thread->entry.id;
4125                 }
4126
4127               general_thread = thread_id;
4128               set_desired_thread (1);
4129               gdb_assert (current_thread != NULL);
4130             }
4131           else if (own_buf[1] == 'c')
4132             cont_thread = thread_id;
4133
4134           write_ok (own_buf);
4135         }
4136       else
4137         {
4138           /* Silently ignore it so that gdb can extend the protocol
4139              without compatibility headaches.  */
4140           own_buf[0] = '\0';
4141         }
4142       break;
4143     case 'g':
4144       require_running (own_buf);
4145       if (current_traceframe >= 0)
4146         {
4147           struct regcache *regcache
4148             = new_register_cache (current_target_desc ());
4149
4150           if (fetch_traceframe_registers (current_traceframe,
4151                                           regcache, -1) == 0)
4152             registers_to_string (regcache, own_buf);
4153           else
4154             write_enn (own_buf);
4155           free_register_cache (regcache);
4156         }
4157       else
4158         {
4159           struct regcache *regcache;
4160
4161           if (!set_desired_thread (1))
4162             write_enn (own_buf);
4163           else
4164             {
4165               regcache = get_thread_regcache (current_thread, 1);
4166               registers_to_string (regcache, own_buf);
4167             }
4168         }
4169       break;
4170     case 'G':
4171       require_running (own_buf);
4172       if (current_traceframe >= 0)
4173         write_enn (own_buf);
4174       else
4175         {
4176           struct regcache *regcache;
4177
4178           if (!set_desired_thread (1))
4179             write_enn (own_buf);
4180           else
4181             {
4182               regcache = get_thread_regcache (current_thread, 1);
4183               registers_from_string (regcache, &own_buf[1]);
4184               write_ok (own_buf);
4185             }
4186         }
4187       break;
4188     case 'm':
4189       require_running (own_buf);
4190       decode_m_packet (&own_buf[1], &mem_addr, &len);
4191       res = gdb_read_memory (mem_addr, mem_buf, len);
4192       if (res < 0)
4193         write_enn (own_buf);
4194       else
4195         bin2hex (mem_buf, own_buf, res);
4196       break;
4197     case 'M':
4198       require_running (own_buf);
4199       decode_M_packet (&own_buf[1], &mem_addr, &len, &mem_buf);
4200       if (gdb_write_memory (mem_addr, mem_buf, len) == 0)
4201         write_ok (own_buf);
4202       else
4203         write_enn (own_buf);
4204       break;
4205     case 'X':
4206       require_running (own_buf);
4207       if (decode_X_packet (&own_buf[1], packet_len - 1,
4208                            &mem_addr, &len, &mem_buf) < 0
4209           || gdb_write_memory (mem_addr, mem_buf, len) != 0)
4210         write_enn (own_buf);
4211       else
4212         write_ok (own_buf);
4213       break;
4214     case 'C':
4215       require_running (own_buf);
4216       hex2bin (own_buf + 1, &sig, 1);
4217       if (gdb_signal_to_host_p ((enum gdb_signal) sig))
4218         signal = gdb_signal_to_host ((enum gdb_signal) sig);
4219       else
4220         signal = 0;
4221       myresume (own_buf, 0, signal);
4222       break;
4223     case 'S':
4224       require_running (own_buf);
4225       hex2bin (own_buf + 1, &sig, 1);
4226       if (gdb_signal_to_host_p ((enum gdb_signal) sig))
4227         signal = gdb_signal_to_host ((enum gdb_signal) sig);
4228       else
4229         signal = 0;
4230       myresume (own_buf, 1, signal);
4231       break;
4232     case 'c':
4233       require_running (own_buf);
4234       signal = 0;
4235       myresume (own_buf, 0, signal);
4236       break;
4237     case 's':
4238       require_running (own_buf);
4239       signal = 0;
4240       myresume (own_buf, 1, signal);
4241       break;
4242     case 'Z':  /* insert_ ... */
4243       /* Fallthrough.  */
4244     case 'z':  /* remove_ ... */
4245       {
4246         char *dataptr;
4247         ULONGEST addr;
4248         int kind;
4249         char type = own_buf[1];
4250         int res;
4251         const int insert = ch == 'Z';
4252         char *p = &own_buf[3];
4253
4254         p = unpack_varlen_hex (p, &addr);
4255         kind = strtol (p + 1, &dataptr, 16);
4256
4257         if (insert)
4258           {
4259             struct gdb_breakpoint *bp;
4260
4261             bp = set_gdb_breakpoint (type, addr, kind, &res);
4262             if (bp != NULL)
4263               {
4264                 res = 0;
4265
4266                 /* GDB may have sent us a list of *point parameters to
4267                    be evaluated on the target's side.  Read such list
4268                    here.  If we already have a list of parameters, GDB
4269                    is telling us to drop that list and use this one
4270                    instead.  */
4271                 clear_breakpoint_conditions_and_commands (bp);
4272                 process_point_options (bp, &dataptr);
4273               }
4274           }
4275         else
4276           res = delete_gdb_breakpoint (type, addr, kind);
4277
4278         if (res == 0)
4279           write_ok (own_buf);
4280         else if (res == 1)
4281           /* Unsupported.  */
4282           own_buf[0] = '\0';
4283         else
4284           write_enn (own_buf);
4285         break;
4286       }
4287     case 'k':
4288       response_needed = 0;
4289       if (!target_running ())
4290         /* The packet we received doesn't make sense - but we can't
4291            reply to it, either.  */
4292         return 0;
4293
4294       fprintf (stderr, "Killing all inferiors\n");
4295       for_each_inferior (&all_processes, kill_inferior_callback);
4296
4297       /* When using the extended protocol, we wait with no program
4298          running.  The traditional protocol will exit instead.  */
4299       if (extended_protocol)
4300         {
4301           last_status.kind = TARGET_WAITKIND_EXITED;
4302           last_status.value.sig = GDB_SIGNAL_KILL;
4303           return 0;
4304         }
4305       else
4306         exit (0);
4307
4308     case 'T':
4309       {
4310         ptid_t gdb_id, thread_id;
4311
4312         require_running (own_buf);
4313
4314         gdb_id = read_ptid (&own_buf[1], NULL);
4315         thread_id = gdb_id_to_thread_id (gdb_id);
4316         if (ptid_equal (thread_id, null_ptid))
4317           {
4318             write_enn (own_buf);
4319             break;
4320           }
4321
4322         if (mythread_alive (thread_id))
4323           write_ok (own_buf);
4324         else
4325           write_enn (own_buf);
4326       }
4327       break;
4328     case 'R':
4329       response_needed = 0;
4330
4331       /* Restarting the inferior is only supported in the extended
4332          protocol.  */
4333       if (extended_protocol)
4334         {
4335           if (target_running ())
4336             for_each_inferior (&all_processes,
4337                                kill_inferior_callback);
4338           fprintf (stderr, "GDBserver restarting\n");
4339
4340           /* Wait till we are at 1st instruction in prog.  */
4341           if (program_name != NULL)
4342             {
4343               create_inferior (program_name, program_args);
4344
4345               if (last_status.kind == TARGET_WAITKIND_STOPPED)
4346                 {
4347                   /* Stopped at the first instruction of the target
4348                      process.  */
4349                   general_thread = last_ptid;
4350                 }
4351               else
4352                 {
4353                   /* Something went wrong.  */
4354                   general_thread = null_ptid;
4355                 }
4356             }
4357           else
4358             {
4359               last_status.kind = TARGET_WAITKIND_EXITED;
4360               last_status.value.sig = GDB_SIGNAL_KILL;
4361             }
4362           return 0;
4363         }
4364       else
4365         {
4366           /* It is a request we don't understand.  Respond with an
4367              empty packet so that gdb knows that we don't support this
4368              request.  */
4369           own_buf[0] = '\0';
4370           break;
4371         }
4372     case 'v':
4373       /* Extended (long) request.  */
4374       handle_v_requests (own_buf, packet_len, &new_packet_len);
4375       break;
4376
4377     default:
4378       /* It is a request we don't understand.  Respond with an empty
4379          packet so that gdb knows that we don't support this
4380          request.  */
4381       own_buf[0] = '\0';
4382       break;
4383     }
4384
4385   if (new_packet_len != -1)
4386     putpkt_binary (own_buf, new_packet_len);
4387   else
4388     putpkt (own_buf);
4389
4390   response_needed = 0;
4391
4392   if (exit_requested)
4393     return -1;
4394
4395   return 0;
4396 }
4397
4398 /* Event-loop callback for serial events.  */
4399
4400 int
4401 handle_serial_event (int err, gdb_client_data client_data)
4402 {
4403   if (debug_threads)
4404     debug_printf ("handling possible serial event\n");
4405
4406   /* Really handle it.  */
4407   if (process_serial_event () < 0)
4408     return -1;
4409
4410   /* Be sure to not change the selected thread behind GDB's back.
4411      Important in the non-stop mode asynchronous protocol.  */
4412   set_desired_thread (1);
4413
4414   return 0;
4415 }
4416
4417 /* Push a stop notification on the notification queue.  */
4418
4419 static void
4420 push_stop_notification (ptid_t ptid, struct target_waitstatus *status)
4421 {
4422   struct vstop_notif *vstop_notif = XNEW (struct vstop_notif);
4423
4424   vstop_notif->status = *status;
4425   vstop_notif->ptid = ptid;
4426   /* Push Stop notification.  */
4427   notif_push (&notif_stop, (struct notif_event *) vstop_notif);
4428 }
4429
4430 /* Event-loop callback for target events.  */
4431
4432 int
4433 handle_target_event (int err, gdb_client_data client_data)
4434 {
4435   if (debug_threads)
4436     debug_printf ("handling possible target event\n");
4437
4438   last_ptid = mywait (minus_one_ptid, &last_status,
4439                       TARGET_WNOHANG, 1);
4440
4441   if (last_status.kind == TARGET_WAITKIND_NO_RESUMED)
4442     {
4443       if (gdb_connected () && report_no_resumed)
4444         push_stop_notification (null_ptid, &last_status);
4445     }
4446   else if (last_status.kind != TARGET_WAITKIND_IGNORE)
4447     {
4448       int pid = ptid_get_pid (last_ptid);
4449       struct process_info *process = find_process_pid (pid);
4450       int forward_event = !gdb_connected () || process->gdb_detached;
4451
4452       if (last_status.kind == TARGET_WAITKIND_EXITED
4453           || last_status.kind == TARGET_WAITKIND_SIGNALLED)
4454         {
4455           mark_breakpoints_out (process);
4456           target_mourn_inferior (last_ptid);
4457         }
4458       else if (last_status.kind == TARGET_WAITKIND_THREAD_EXITED)
4459         ;
4460       else
4461         {
4462           /* We're reporting this thread as stopped.  Update its
4463              "want-stopped" state to what the client wants, until it
4464              gets a new resume action.  */
4465           current_thread->last_resume_kind = resume_stop;
4466           current_thread->last_status = last_status;
4467         }
4468
4469       if (forward_event)
4470         {
4471           if (!target_running ())
4472             {
4473               /* The last process exited.  We're done.  */
4474               exit (0);
4475             }
4476
4477           if (last_status.kind == TARGET_WAITKIND_EXITED
4478               || last_status.kind == TARGET_WAITKIND_SIGNALLED
4479               || last_status.kind == TARGET_WAITKIND_THREAD_EXITED)
4480             ;
4481           else
4482             {
4483               /* A thread stopped with a signal, but gdb isn't
4484                  connected to handle it.  Pass it down to the
4485                  inferior, as if it wasn't being traced.  */
4486               enum gdb_signal signal;
4487
4488               if (debug_threads)
4489                 debug_printf ("GDB not connected; forwarding event %d for"
4490                               " [%s]\n",
4491                               (int) last_status.kind,
4492                               target_pid_to_str (last_ptid));
4493
4494               if (last_status.kind == TARGET_WAITKIND_STOPPED)
4495                 signal = last_status.value.sig;
4496               else
4497                 signal = GDB_SIGNAL_0;
4498               target_continue (last_ptid, signal);
4499             }
4500         }
4501       else
4502         push_stop_notification (last_ptid, &last_status);
4503     }
4504
4505   /* Be sure to not change the selected thread behind GDB's back.
4506      Important in the non-stop mode asynchronous protocol.  */
4507   set_desired_thread (1);
4508
4509   return 0;
4510 }