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