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