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