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