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