* server.c (process_serial_event): Re-return unsupported, not
[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 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "server.h"
21
22 #if HAVE_UNISTD_H
23 #include <unistd.h>
24 #endif
25 #if HAVE_SIGNAL_H
26 #include <signal.h>
27 #endif
28 #if HAVE_SYS_WAIT_H
29 #include <sys/wait.h>
30 #endif
31 #if HAVE_MALLOC_H
32 #include <malloc.h>
33 #endif
34
35 ptid_t cont_thread;
36 ptid_t general_thread;
37 ptid_t step_thread;
38
39 int server_waiting;
40
41 static int extended_protocol;
42 static int response_needed;
43 static int exit_requested;
44
45 int multi_process;
46 int non_stop;
47
48 static char **program_argv, **wrapper_argv;
49
50 /* Enable miscellaneous debugging output.  The name is historical - it
51    was originally used to debug LinuxThreads support.  */
52 int debug_threads;
53
54 int pass_signals[TARGET_SIGNAL_LAST];
55
56 jmp_buf toplevel;
57
58 const char *gdbserver_xmltarget;
59
60 /* The PID of the originally created or attached inferior.  Used to
61    send signals to the process when GDB sends us an asynchronous interrupt
62    (user hitting Control-C in the client), and to wait for the child to exit
63    when no longer debugging it.  */
64
65 unsigned long signal_pid;
66
67 #ifdef SIGTTOU
68 /* A file descriptor for the controlling terminal.  */
69 int terminal_fd;
70
71 /* TERMINAL_FD's original foreground group.  */
72 pid_t old_foreground_pgrp;
73
74 /* Hand back terminal ownership to the original foreground group.  */
75
76 static void
77 restore_old_foreground_pgrp (void)
78 {
79   tcsetpgrp (terminal_fd, old_foreground_pgrp);
80 }
81 #endif
82
83 /* Set if you want to disable optional thread related packets support
84    in gdbserver, for the sake of testing GDB against stubs that don't
85    support them.  */
86 int disable_packet_vCont;
87 int disable_packet_Tthread;
88 int disable_packet_qC;
89 int disable_packet_qfThreadInfo;
90
91 /* Last status reported to GDB.  */
92 static struct target_waitstatus last_status;
93 static ptid_t last_ptid;
94
95 static char *own_buf;
96 static unsigned char *mem_buf;
97
98 /* Structure holding information relative to a single stop reply.  We
99    keep a queue of these (really a singly-linked list) to push to GDB
100    in non-stop mode.  */
101 struct vstop_notif
102 {
103   /* Pointer to next in list.  */
104   struct vstop_notif *next;
105
106   /* Thread or process that got the event.  */
107   ptid_t ptid;
108
109   /* Event info.  */
110   struct target_waitstatus status;
111 };
112
113 /* The pending stop replies list head.  */
114 static struct vstop_notif *notif_queue = NULL;
115
116 /* Put a stop reply to the stop reply queue.  */
117
118 static void
119 queue_stop_reply (ptid_t ptid, struct target_waitstatus *status)
120 {
121   struct vstop_notif *new_notif;
122
123   new_notif = malloc (sizeof (*new_notif));
124   new_notif->next = NULL;
125   new_notif->ptid = ptid;
126   new_notif->status = *status;
127
128   if (notif_queue)
129     {
130       struct vstop_notif *tail;
131       for (tail = notif_queue;
132            tail && tail->next;
133            tail = tail->next)
134         ;
135       tail->next = new_notif;
136     }
137   else
138     notif_queue = new_notif;
139
140   if (remote_debug)
141     {
142       int i = 0;
143       struct vstop_notif *n;
144
145       for (n = notif_queue; n; n = n->next)
146         i++;
147
148       fprintf (stderr, "pending stop replies: %d\n", i);
149     }
150 }
151
152 /* Place an event in the stop reply queue, and push a notification if
153    we aren't sending one yet.  */
154
155 void
156 push_event (ptid_t ptid, struct target_waitstatus *status)
157 {
158   queue_stop_reply (ptid, status);
159
160   /* If this is the first stop reply in the queue, then inform GDB
161      about it, by sending a Stop notification.  */
162   if (notif_queue->next == NULL)
163     {
164       char *p = own_buf;
165       strcpy (p, "Stop:");
166       p += strlen (p);
167       prepare_resume_reply (p,
168                             notif_queue->ptid, &notif_queue->status);
169       putpkt_notif (own_buf);
170     }
171 }
172
173 /* Get rid of the currently pending stop replies for PID.  If PID is
174    -1, then apply to all processes.  */
175
176 static void
177 discard_queued_stop_replies (int pid)
178 {
179   struct vstop_notif *prev = NULL, *reply, *next;
180
181   for (reply = notif_queue; reply; reply = next)
182     {
183       next = reply->next;
184
185       if (pid == -1
186           || ptid_get_pid (reply->ptid) == pid)
187         {
188           if (reply == notif_queue)
189             notif_queue = next;
190           else
191             prev->next = reply->next;
192
193           free (reply);
194         }
195       else
196         prev = reply;
197     }
198 }
199
200 /* If there are more stop replies to push, push one now.  */
201
202 static void
203 send_next_stop_reply (char *own_buf)
204 {
205   if (notif_queue)
206     prepare_resume_reply (own_buf,
207                           notif_queue->ptid,
208                           &notif_queue->status);
209   else
210     write_ok (own_buf);
211 }
212
213 static int
214 target_running (void)
215 {
216   return all_threads.head != NULL;
217 }
218
219 static int
220 start_inferior (char **argv)
221 {
222   char **new_argv = argv;
223
224   if (wrapper_argv != NULL)
225     {
226       int i, count = 1;
227
228       for (i = 0; wrapper_argv[i] != NULL; i++)
229         count++;
230       for (i = 0; argv[i] != NULL; i++)
231         count++;
232       new_argv = alloca (sizeof (char *) * count);
233       count = 0;
234       for (i = 0; wrapper_argv[i] != NULL; i++)
235         new_argv[count++] = wrapper_argv[i];
236       for (i = 0; argv[i] != NULL; i++)
237         new_argv[count++] = argv[i];
238       new_argv[count] = NULL;
239     }
240
241 #ifdef SIGTTOU
242   signal (SIGTTOU, SIG_DFL);
243   signal (SIGTTIN, SIG_DFL);
244 #endif
245
246   signal_pid = create_inferior (new_argv[0], new_argv);
247
248   /* FIXME: we don't actually know at this point that the create
249      actually succeeded.  We won't know that until we wait.  */
250   fprintf (stderr, "Process %s created; pid = %ld\n", argv[0],
251            signal_pid);
252   fflush (stderr);
253
254 #ifdef SIGTTOU
255   signal (SIGTTOU, SIG_IGN);
256   signal (SIGTTIN, SIG_IGN);
257   terminal_fd = fileno (stderr);
258   old_foreground_pgrp = tcgetpgrp (terminal_fd);
259   tcsetpgrp (terminal_fd, signal_pid);
260   atexit (restore_old_foreground_pgrp);
261 #endif
262
263   if (wrapper_argv != NULL)
264     {
265       struct thread_resume resume_info;
266       ptid_t ptid;
267
268       resume_info.thread = pid_to_ptid (signal_pid);
269       resume_info.kind = resume_continue;
270       resume_info.sig = 0;
271
272       ptid = mywait (pid_to_ptid (signal_pid), &last_status, 0, 0);
273
274       if (last_status.kind != TARGET_WAITKIND_STOPPED)
275         return signal_pid;
276
277       do
278         {
279           (*the_target->resume) (&resume_info, 1);
280
281           mywait (pid_to_ptid (signal_pid), &last_status, 0, 0);
282           if (last_status.kind != TARGET_WAITKIND_STOPPED)
283             return signal_pid;
284         }
285       while (last_status.value.sig != TARGET_SIGNAL_TRAP);
286
287       return signal_pid;
288     }
289
290   /* Wait till we are at 1st instruction in program, return new pid
291      (assuming success).  */
292   last_ptid = mywait (pid_to_ptid (signal_pid), &last_status, 0, 0);
293
294   return signal_pid;
295 }
296
297 static int
298 attach_inferior (int pid)
299 {
300   /* myattach should return -1 if attaching is unsupported,
301      0 if it succeeded, and call error() otherwise.  */
302
303   if (myattach (pid) != 0)
304     return -1;
305
306   fprintf (stderr, "Attached; pid = %d\n", pid);
307   fflush (stderr);
308
309   /* FIXME - It may be that we should get the SIGNAL_PID from the
310      attach function, so that it can be the main thread instead of
311      whichever we were told to attach to.  */
312   signal_pid = pid;
313
314   if (!non_stop)
315     {
316       last_ptid = mywait (pid_to_ptid (pid), &last_status, 0, 0);
317
318       /* GDB knows to ignore the first SIGSTOP after attaching to a running
319          process using the "attach" command, but this is different; it's
320          just using "target remote".  Pretend it's just starting up.  */
321       if (last_status.kind == TARGET_WAITKIND_STOPPED
322           && last_status.value.sig == TARGET_SIGNAL_STOP)
323         last_status.value.sig = TARGET_SIGNAL_TRAP;
324     }
325
326   return 0;
327 }
328
329 extern int remote_debug;
330
331 /* Decode a qXfer read request.  Return 0 if everything looks OK,
332    or -1 otherwise.  */
333
334 static int
335 decode_xfer_read (char *buf, char **annex, CORE_ADDR *ofs, unsigned int *len)
336 {
337   /* Extract and NUL-terminate the annex.  */
338   *annex = buf;
339   while (*buf && *buf != ':')
340     buf++;
341   if (*buf == '\0')
342     return -1;
343   *buf++ = 0;
344
345   /* After the read marker and annex, qXfer looks like a
346      traditional 'm' packet.  */
347   decode_m_packet (buf, ofs, len);
348
349   return 0;
350 }
351
352 /* Write the response to a successful qXfer read.  Returns the
353    length of the (binary) data stored in BUF, corresponding
354    to as much of DATA/LEN as we could fit.  IS_MORE controls
355    the first character of the response.  */
356 static int
357 write_qxfer_response (char *buf, const void *data, int len, int is_more)
358 {
359   int out_len;
360
361   if (is_more)
362     buf[0] = 'm';
363   else
364     buf[0] = 'l';
365
366   return remote_escape_output (data, len, (unsigned char *) buf + 1, &out_len,
367                                PBUFSIZ - 2) + 1;
368 }
369
370 /* Handle all of the extended 'Q' packets.  */
371 void
372 handle_general_set (char *own_buf)
373 {
374   if (strncmp ("QPassSignals:", own_buf, strlen ("QPassSignals:")) == 0)
375     {
376       int numsigs = (int) TARGET_SIGNAL_LAST, i;
377       const char *p = own_buf + strlen ("QPassSignals:");
378       CORE_ADDR cursig;
379
380       p = decode_address_to_semicolon (&cursig, p);
381       for (i = 0; i < numsigs; i++)
382         {
383           if (i == cursig)
384             {
385               pass_signals[i] = 1;
386               if (*p == '\0')
387                 /* Keep looping, to clear the remaining signals.  */
388                 cursig = -1;
389               else
390                 p = decode_address_to_semicolon (&cursig, p);
391             }
392           else
393             pass_signals[i] = 0;
394         }
395       strcpy (own_buf, "OK");
396       return;
397     }
398
399   if (strcmp (own_buf, "QStartNoAckMode") == 0)
400     {
401       if (remote_debug)
402         {
403           fprintf (stderr, "[noack mode enabled]\n");
404           fflush (stderr);
405         }
406
407       noack_mode = 1;
408       write_ok (own_buf);
409       return;
410     }
411
412   if (strncmp (own_buf, "QNonStop:", 9) == 0)
413     {
414       char *mode = own_buf + 9;
415       int req = -1;
416       char *req_str;
417
418       if (strcmp (mode, "0") == 0)
419         req = 0;
420       else if (strcmp (mode, "1") == 0)
421         req = 1;
422       else
423         {
424           /* We don't know what this mode is, so complain to
425              GDB.  */
426           fprintf (stderr, "Unknown non-stop mode requested: %s\n",
427                    own_buf);
428           write_enn (own_buf);
429           return;
430         }
431
432       req_str = req ? "non-stop" : "all-stop";
433       if (start_non_stop (req) != 0)
434         {
435           fprintf (stderr, "Setting %s mode failed\n", req_str);
436           write_enn (own_buf);
437           return;
438         }
439
440       non_stop = req;
441
442       if (remote_debug)
443         fprintf (stderr, "[%s mode enabled]\n", req_str);
444
445       write_ok (own_buf);
446       return;
447     }
448
449   /* Otherwise we didn't know what packet it was.  Say we didn't
450      understand it.  */
451   own_buf[0] = 0;
452 }
453
454 static const char *
455 get_features_xml (const char *annex)
456 {
457   /* gdbserver_xmltarget defines what to return when looking
458      for the "target.xml" file.  Its contents can either be
459      verbatim XML code (prefixed with a '@') or else the name
460      of the actual XML file to be used in place of "target.xml".
461
462      This variable is set up from the auto-generated
463      init_registers_... routine for the current target.  */
464
465   if (gdbserver_xmltarget
466       && strcmp (annex, "target.xml") == 0)
467     {
468       if (*gdbserver_xmltarget == '@')
469         return gdbserver_xmltarget + 1;
470       else
471         annex = gdbserver_xmltarget;
472     }
473
474 #ifdef USE_XML
475   {
476     extern const char *const xml_builtin[][2];
477     int i;
478
479     /* Look for the annex.  */
480     for (i = 0; xml_builtin[i][0] != NULL; i++)
481       if (strcmp (annex, xml_builtin[i][0]) == 0)
482         break;
483
484     if (xml_builtin[i][0] != NULL)
485       return xml_builtin[i][1];
486   }
487 #endif
488
489   return NULL;
490 }
491
492 void
493 monitor_show_help (void)
494 {
495   monitor_output ("The following monitor commands are supported:\n");
496   monitor_output ("  set debug <0|1>\n");
497   monitor_output ("    Enable general debugging messages\n");
498   monitor_output ("  set remote-debug <0|1>\n");
499   monitor_output ("    Enable remote protocol debugging messages\n");
500   monitor_output ("  exit\n");
501   monitor_output ("    Quit GDBserver\n");
502 }
503
504 /* Subroutine of handle_search_memory to simplify it.  */
505
506 static int
507 handle_search_memory_1 (CORE_ADDR start_addr, CORE_ADDR search_space_len,
508                         gdb_byte *pattern, unsigned pattern_len,
509                         gdb_byte *search_buf,
510                         unsigned chunk_size, unsigned search_buf_size,
511                         CORE_ADDR *found_addrp)
512 {
513   /* Prime the search buffer.  */
514
515   if (read_inferior_memory (start_addr, search_buf, search_buf_size) != 0)
516     {
517       warning ("Unable to access target memory at 0x%lx, halting search.",
518                (long) start_addr);
519       return -1;
520     }
521
522   /* Perform the search.
523
524      The loop is kept simple by allocating [N + pattern-length - 1] bytes.
525      When we've scanned N bytes we copy the trailing bytes to the start and
526      read in another N bytes.  */
527
528   while (search_space_len >= pattern_len)
529     {
530       gdb_byte *found_ptr;
531       unsigned nr_search_bytes = (search_space_len < search_buf_size
532                                   ? search_space_len
533                                   : search_buf_size);
534
535       found_ptr = memmem (search_buf, nr_search_bytes, pattern, pattern_len);
536
537       if (found_ptr != NULL)
538         {
539           CORE_ADDR found_addr = start_addr + (found_ptr - search_buf);
540           *found_addrp = found_addr;
541           return 1;
542         }
543
544       /* Not found in this chunk, skip to next chunk.  */
545
546       /* Don't let search_space_len wrap here, it's unsigned.  */
547       if (search_space_len >= chunk_size)
548         search_space_len -= chunk_size;
549       else
550         search_space_len = 0;
551
552       if (search_space_len >= pattern_len)
553         {
554           unsigned keep_len = search_buf_size - chunk_size;
555           CORE_ADDR read_addr = start_addr + keep_len;
556           int nr_to_read;
557
558           /* Copy the trailing part of the previous iteration to the front
559              of the buffer for the next iteration.  */
560           memcpy (search_buf, search_buf + chunk_size, keep_len);
561
562           nr_to_read = (search_space_len - keep_len < chunk_size
563                         ? search_space_len - keep_len
564                         : chunk_size);
565
566           if (read_inferior_memory (read_addr, search_buf + keep_len,
567                                     nr_to_read) != 0)
568             {
569               warning ("Unable to access target memory at 0x%lx, halting search.",
570                        (long) read_addr);
571               return -1;
572             }
573
574           start_addr += chunk_size;
575         }
576     }
577
578   /* Not found.  */
579
580   return 0;
581 }
582
583 /* Handle qSearch:memory packets.  */
584
585 static void
586 handle_search_memory (char *own_buf, int packet_len)
587 {
588   CORE_ADDR start_addr;
589   CORE_ADDR search_space_len;
590   gdb_byte *pattern;
591   unsigned int pattern_len;
592   /* NOTE: also defined in find.c testcase.  */
593 #define SEARCH_CHUNK_SIZE 16000
594   const unsigned chunk_size = SEARCH_CHUNK_SIZE;
595   /* Buffer to hold memory contents for searching.  */
596   gdb_byte *search_buf;
597   unsigned search_buf_size;
598   int found;
599   CORE_ADDR found_addr;
600   int cmd_name_len = sizeof ("qSearch:memory:") - 1;
601
602   pattern = malloc (packet_len);
603   if (pattern == NULL)
604     {
605       error ("Unable to allocate memory to perform the search");
606       strcpy (own_buf, "E00");
607       return;
608     }
609   if (decode_search_memory_packet (own_buf + cmd_name_len,
610                                    packet_len - cmd_name_len,
611                                    &start_addr, &search_space_len,
612                                    pattern, &pattern_len) < 0)
613     {
614       free (pattern);
615       error ("Error in parsing qSearch:memory packet");
616       strcpy (own_buf, "E00");
617       return;
618     }
619
620   search_buf_size = chunk_size + pattern_len - 1;
621
622   /* No point in trying to allocate a buffer larger than the search space.  */
623   if (search_space_len < search_buf_size)
624     search_buf_size = search_space_len;
625
626   search_buf = malloc (search_buf_size);
627   if (search_buf == NULL)
628     {
629       free (pattern);
630       error ("Unable to allocate memory to perform the search");
631       strcpy (own_buf, "E00");
632       return;
633     }
634
635   found = handle_search_memory_1 (start_addr, search_space_len,
636                                   pattern, pattern_len,
637                                   search_buf, chunk_size, search_buf_size,
638                                   &found_addr);
639
640   if (found > 0)
641     sprintf (own_buf, "1,%lx", (long) found_addr);
642   else if (found == 0)
643     strcpy (own_buf, "0");
644   else
645     strcpy (own_buf, "E00");
646
647   free (search_buf);
648   free (pattern);
649 }
650
651 #define require_running(BUF)                    \
652   if (!target_running ())                       \
653     {                                           \
654       write_enn (BUF);                          \
655       return;                                   \
656     }
657
658 /* Handle all of the extended 'q' packets.  */
659 void
660 handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
661 {
662   static struct inferior_list_entry *thread_ptr;
663
664   /* Reply the current thread id.  */
665   if (strcmp ("qC", own_buf) == 0 && !disable_packet_qC)
666     {
667       ptid_t gdb_id;
668       require_running (own_buf);
669
670       if (!ptid_equal (general_thread, null_ptid)
671           && !ptid_equal (general_thread, minus_one_ptid))
672         gdb_id = general_thread;
673       else
674         {
675           thread_ptr = all_threads.head;
676           gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
677         }
678
679       sprintf (own_buf, "QC");
680       own_buf += 2;
681       own_buf = write_ptid (own_buf, gdb_id);
682       return;
683     }
684
685   if (strcmp ("qSymbol::", own_buf) == 0)
686     {
687       if (target_running () && the_target->look_up_symbols != NULL)
688         (*the_target->look_up_symbols) ();
689
690       strcpy (own_buf, "OK");
691       return;
692     }
693
694   if (!disable_packet_qfThreadInfo)
695     {
696       if (strcmp ("qfThreadInfo", own_buf) == 0)
697         {
698           ptid_t gdb_id;
699
700           require_running (own_buf);
701           thread_ptr = all_threads.head;
702
703           *own_buf++ = 'm';
704           gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
705           write_ptid (own_buf, gdb_id);
706           thread_ptr = thread_ptr->next;
707           return;
708         }
709
710       if (strcmp ("qsThreadInfo", own_buf) == 0)
711         {
712           ptid_t gdb_id;
713
714           require_running (own_buf);
715           if (thread_ptr != NULL)
716             {
717               *own_buf++ = 'm';
718               gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
719               write_ptid (own_buf, gdb_id);
720               thread_ptr = thread_ptr->next;
721               return;
722             }
723           else
724             {
725               sprintf (own_buf, "l");
726               return;
727             }
728         }
729     }
730
731   if (the_target->read_offsets != NULL
732       && strcmp ("qOffsets", own_buf) == 0)
733     {
734       CORE_ADDR text, data;
735
736       require_running (own_buf);
737       if (the_target->read_offsets (&text, &data))
738         sprintf (own_buf, "Text=%lX;Data=%lX;Bss=%lX",
739                  (long)text, (long)data, (long)data);
740       else
741         write_enn (own_buf);
742
743       return;
744     }
745
746   if (the_target->qxfer_spu != NULL
747       && strncmp ("qXfer:spu:read:", own_buf, 15) == 0)
748     {
749       char *annex;
750       int n;
751       unsigned int len;
752       CORE_ADDR ofs;
753       unsigned char *spu_buf;
754
755       require_running (own_buf);
756       strcpy (own_buf, "E00");
757       if (decode_xfer_read (own_buf + 15, &annex, &ofs, &len) < 0)
758         return;
759       if (len > PBUFSIZ - 2)
760         len = PBUFSIZ - 2;
761       spu_buf = malloc (len + 1);
762       if (!spu_buf)
763         return;
764
765       n = (*the_target->qxfer_spu) (annex, spu_buf, NULL, ofs, len + 1);
766       if (n < 0)
767         write_enn (own_buf);
768       else if (n > len)
769         *new_packet_len_p = write_qxfer_response (own_buf, spu_buf, len, 1);
770       else
771         *new_packet_len_p = write_qxfer_response (own_buf, spu_buf, n, 0);
772
773       free (spu_buf);
774       return;
775     }
776
777   if (the_target->qxfer_spu != NULL
778       && strncmp ("qXfer:spu:write:", own_buf, 16) == 0)
779     {
780       char *annex;
781       int n;
782       unsigned int len;
783       CORE_ADDR ofs;
784       unsigned char *spu_buf;
785
786       require_running (own_buf);
787       strcpy (own_buf, "E00");
788       spu_buf = malloc (packet_len - 15);
789       if (!spu_buf)
790         return;
791       if (decode_xfer_write (own_buf + 16, packet_len - 16, &annex,
792                              &ofs, &len, spu_buf) < 0)
793         {
794           free (spu_buf);
795           return;
796         }
797
798       n = (*the_target->qxfer_spu)
799         (annex, NULL, (unsigned const char *)spu_buf, ofs, len);
800       if (n < 0)
801         write_enn (own_buf);
802       else
803         sprintf (own_buf, "%x", n);
804
805       free (spu_buf);
806       return;
807     }
808
809   if (the_target->read_auxv != NULL
810       && strncmp ("qXfer:auxv:read:", own_buf, 16) == 0)
811     {
812       unsigned char *data;
813       int n;
814       CORE_ADDR ofs;
815       unsigned int len;
816       char *annex;
817
818       require_running (own_buf);
819
820       /* Reject any annex; grab the offset and length.  */
821       if (decode_xfer_read (own_buf + 16, &annex, &ofs, &len) < 0
822           || annex[0] != '\0')
823         {
824           strcpy (own_buf, "E00");
825           return;
826         }
827
828       /* Read one extra byte, as an indicator of whether there is
829          more.  */
830       if (len > PBUFSIZ - 2)
831         len = PBUFSIZ - 2;
832       data = malloc (len + 1);
833       if (data == NULL)
834         {
835           write_enn (own_buf);
836           return;
837         }
838       n = (*the_target->read_auxv) (ofs, data, len + 1);
839       if (n < 0)
840         write_enn (own_buf);
841       else if (n > len)
842         *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
843       else
844         *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
845
846       free (data);
847
848       return;
849     }
850
851   if (strncmp ("qXfer:features:read:", own_buf, 20) == 0)
852     {
853       CORE_ADDR ofs;
854       unsigned int len, total_len;
855       const char *document;
856       char *annex;
857
858       require_running (own_buf);
859
860       /* Grab the annex, offset, and length.  */
861       if (decode_xfer_read (own_buf + 20, &annex, &ofs, &len) < 0)
862         {
863           strcpy (own_buf, "E00");
864           return;
865         }
866
867       /* Now grab the correct annex.  */
868       document = get_features_xml (annex);
869       if (document == NULL)
870         {
871           strcpy (own_buf, "E00");
872           return;
873         }
874
875       total_len = strlen (document);
876       if (len > PBUFSIZ - 2)
877         len = PBUFSIZ - 2;
878
879       if (ofs > total_len)
880         write_enn (own_buf);
881       else if (len < total_len - ofs)
882         *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
883                                                   len, 1);
884       else
885         *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
886                                                   total_len - ofs, 0);
887
888       return;
889     }
890
891   if (strncmp ("qXfer:libraries:read:", own_buf, 21) == 0)
892     {
893       CORE_ADDR ofs;
894       unsigned int len, total_len;
895       char *document, *p;
896       struct inferior_list_entry *dll_ptr;
897       char *annex;
898
899       require_running (own_buf);
900
901       /* Reject any annex; grab the offset and length.  */
902       if (decode_xfer_read (own_buf + 21, &annex, &ofs, &len) < 0
903           || annex[0] != '\0')
904         {
905           strcpy (own_buf, "E00");
906           return;
907         }
908
909       /* Over-estimate the necessary memory.  Assume that every character
910          in the library name must be escaped.  */
911       total_len = 64;
912       for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)
913         total_len += 128 + 6 * strlen (((struct dll_info *) dll_ptr)->name);
914
915       document = malloc (total_len);
916       if (document == NULL)
917         {
918           write_enn (own_buf);
919           return;
920         }
921       strcpy (document, "<library-list>\n");
922       p = document + strlen (document);
923
924       for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)
925         {
926           struct dll_info *dll = (struct dll_info *) dll_ptr;
927           char *name;
928
929           strcpy (p, "  <library name=\"");
930           p = p + strlen (p);
931           name = xml_escape_text (dll->name);
932           strcpy (p, name);
933           free (name);
934           p = p + strlen (p);
935           strcpy (p, "\"><segment address=\"");
936           p = p + strlen (p);
937           sprintf (p, "0x%lx", (long) dll->base_addr);
938           p = p + strlen (p);
939           strcpy (p, "\"/></library>\n");
940           p = p + strlen (p);
941         }
942
943       strcpy (p, "</library-list>\n");
944
945       total_len = strlen (document);
946       if (len > PBUFSIZ - 2)
947         len = PBUFSIZ - 2;
948
949       if (ofs > total_len)
950         write_enn (own_buf);
951       else if (len < total_len - ofs)
952         *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
953                                                   len, 1);
954       else
955         *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
956                                                   total_len - ofs, 0);
957
958       free (document);
959       return;
960     }
961
962   if (the_target->qxfer_osdata != NULL
963       && strncmp ("qXfer:osdata:read:", own_buf, 18) == 0)
964     {
965       char *annex;
966       int n;
967       unsigned int len;
968       CORE_ADDR ofs;
969       unsigned char *workbuf;
970
971       strcpy (own_buf, "E00");
972       if (decode_xfer_read (own_buf + 18, &annex, &ofs, &len) < 0)
973         return;
974       if (len > PBUFSIZ - 2)
975         len = PBUFSIZ - 2;
976       workbuf = malloc (len + 1);
977       if (!workbuf)
978         return;
979
980       n = (*the_target->qxfer_osdata) (annex, workbuf, NULL, ofs, len + 1);
981       if (n < 0)
982         write_enn (own_buf);
983       else if (n > len)
984         *new_packet_len_p = write_qxfer_response (own_buf, workbuf, len, 1);
985       else
986         *new_packet_len_p = write_qxfer_response (own_buf, workbuf, n, 0);
987
988       free (workbuf);
989       return;
990     }
991
992   if (the_target->qxfer_siginfo != NULL
993       && strncmp ("qXfer:siginfo:read:", own_buf, 19) == 0)
994     {
995       unsigned char *data;
996       int n;
997       CORE_ADDR ofs;
998       unsigned int len;
999       char *annex;
1000
1001       require_running (own_buf);
1002
1003       /* Reject any annex; grab the offset and length.  */
1004       if (decode_xfer_read (own_buf + 19, &annex, &ofs, &len) < 0
1005           || annex[0] != '\0')
1006         {
1007           strcpy (own_buf, "E00");
1008           return;
1009         }
1010
1011       /* Read one extra byte, as an indicator of whether there is
1012          more.  */
1013       if (len > PBUFSIZ - 2)
1014         len = PBUFSIZ - 2;
1015       data = malloc (len + 1);
1016       if (!data)
1017         return;
1018       n = (*the_target->qxfer_siginfo) (annex, data, NULL, ofs, len + 1);
1019       if (n < 0)
1020         write_enn (own_buf);
1021       else if (n > len)
1022         *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
1023       else
1024         *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
1025
1026       free (data);
1027       return;
1028     }
1029
1030   if (the_target->qxfer_siginfo != NULL
1031       && strncmp ("qXfer:siginfo:write:", own_buf, 20) == 0)
1032     {
1033       char *annex;
1034       int n;
1035       unsigned int len;
1036       CORE_ADDR ofs;
1037       unsigned char *data;
1038
1039       require_running (own_buf);
1040
1041       strcpy (own_buf, "E00");
1042       data = malloc (packet_len - 19);
1043       if (!data)
1044         return;
1045       if (decode_xfer_write (own_buf + 20, packet_len - 20, &annex,
1046                              &ofs, &len, data) < 0)
1047         {
1048           free (data);
1049           return;
1050         }
1051
1052       n = (*the_target->qxfer_siginfo)
1053         (annex, NULL, (unsigned const char *)data, ofs, len);
1054       if (n < 0)
1055         write_enn (own_buf);
1056       else
1057         sprintf (own_buf, "%x", n);
1058
1059       free (data);
1060       return;
1061     }
1062
1063   /* Protocol features query.  */
1064   if (strncmp ("qSupported", own_buf, 10) == 0
1065       && (own_buf[10] == ':' || own_buf[10] == '\0'))
1066     {
1067       char *p = &own_buf[10];
1068
1069       /* Process each feature being provided by GDB.  The first
1070          feature will follow a ':', and latter features will follow
1071          ';'.  */
1072       if (*p == ':')
1073         for (p = strtok (p + 1, ";");
1074              p != NULL;
1075              p = strtok (NULL, ";"))
1076           {
1077             if (strcmp (p, "multiprocess+") == 0)
1078               {
1079                 /* GDB supports and wants multi-process support if
1080                    possible.  */
1081                 if (target_supports_multi_process ())
1082                   multi_process = 1;
1083               }
1084           }
1085
1086       sprintf (own_buf, "PacketSize=%x;QPassSignals+", PBUFSIZ - 1);
1087
1088       /* We do not have any hook to indicate whether the target backend
1089          supports qXfer:libraries:read, so always report it.  */
1090       strcat (own_buf, ";qXfer:libraries:read+");
1091
1092       if (the_target->read_auxv != NULL)
1093         strcat (own_buf, ";qXfer:auxv:read+");
1094
1095       if (the_target->qxfer_spu != NULL)
1096         strcat (own_buf, ";qXfer:spu:read+;qXfer:spu:write+");
1097
1098       if (the_target->qxfer_siginfo != NULL)
1099         strcat (own_buf, ";qXfer:siginfo:read+;qXfer:siginfo:write+");
1100
1101       /* We always report qXfer:features:read, as targets may
1102          install XML files on a subsequent call to arch_setup.
1103          If we reported to GDB on startup that we don't support
1104          qXfer:feature:read at all, we will never be re-queried.  */
1105       strcat (own_buf, ";qXfer:features:read+");
1106
1107       if (transport_is_reliable)
1108         strcat (own_buf, ";QStartNoAckMode+");
1109
1110       if (the_target->qxfer_osdata != NULL)
1111         strcat (own_buf, ";qXfer:osdata:read+");
1112
1113       if (target_supports_multi_process ())
1114         strcat (own_buf, ";multiprocess+");
1115
1116       if (target_supports_non_stop ())
1117         strcat (own_buf, ";QNonStop+");
1118
1119       return;
1120     }
1121
1122   /* Thread-local storage support.  */
1123   if (the_target->get_tls_address != NULL
1124       && strncmp ("qGetTLSAddr:", own_buf, 12) == 0)
1125     {
1126       char *p = own_buf + 12;
1127       CORE_ADDR parts[2], address = 0;
1128       int i, err;
1129       ptid_t ptid = null_ptid;
1130
1131       require_running (own_buf);
1132
1133       for (i = 0; i < 3; i++)
1134         {
1135           char *p2;
1136           int len;
1137
1138           if (p == NULL)
1139             break;
1140
1141           p2 = strchr (p, ',');
1142           if (p2)
1143             {
1144               len = p2 - p;
1145               p2++;
1146             }
1147           else
1148             {
1149               len = strlen (p);
1150               p2 = NULL;
1151             }
1152
1153           if (i == 0)
1154             ptid = read_ptid (p, NULL);
1155           else
1156             decode_address (&parts[i - 1], p, len);
1157           p = p2;
1158         }
1159
1160       if (p != NULL || i < 3)
1161         err = 1;
1162       else
1163         {
1164           struct thread_info *thread = find_thread_ptid (ptid);
1165
1166           if (thread == NULL)
1167             err = 2;
1168           else
1169             err = the_target->get_tls_address (thread, parts[0], parts[1],
1170                                                &address);
1171         }
1172
1173       if (err == 0)
1174         {
1175           sprintf (own_buf, "%llx", address);
1176           return;
1177         }
1178       else if (err > 0)
1179         {
1180           write_enn (own_buf);
1181           return;
1182         }
1183
1184       /* Otherwise, pretend we do not understand this packet.  */
1185     }
1186
1187   /* Handle "monitor" commands.  */
1188   if (strncmp ("qRcmd,", own_buf, 6) == 0)
1189     {
1190       char *mon = malloc (PBUFSIZ);
1191       int len = strlen (own_buf + 6);
1192
1193       if (mon == NULL)
1194         {
1195           write_enn (own_buf);
1196           return;
1197         }
1198
1199       if ((len % 2) != 0 || unhexify (mon, own_buf + 6, len / 2) != len / 2)
1200         {
1201           write_enn (own_buf);
1202           free (mon);
1203           return;
1204         }
1205       mon[len / 2] = '\0';
1206
1207       write_ok (own_buf);
1208
1209       if (strcmp (mon, "set debug 1") == 0)
1210         {
1211           debug_threads = 1;
1212           monitor_output ("Debug output enabled.\n");
1213         }
1214       else if (strcmp (mon, "set debug 0") == 0)
1215         {
1216           debug_threads = 0;
1217           monitor_output ("Debug output disabled.\n");
1218         }
1219       else if (strcmp (mon, "set remote-debug 1") == 0)
1220         {
1221           remote_debug = 1;
1222           monitor_output ("Protocol debug output enabled.\n");
1223         }
1224       else if (strcmp (mon, "set remote-debug 0") == 0)
1225         {
1226           remote_debug = 0;
1227           monitor_output ("Protocol debug output disabled.\n");
1228         }
1229       else if (strcmp (mon, "help") == 0)
1230         monitor_show_help ();
1231       else if (strcmp (mon, "exit") == 0)
1232         exit_requested = 1;
1233       else
1234         {
1235           monitor_output ("Unknown monitor command.\n\n");
1236           monitor_show_help ();
1237           write_enn (own_buf);
1238         }
1239
1240       free (mon);
1241       return;
1242     }
1243
1244   if (strncmp ("qSearch:memory:", own_buf, sizeof ("qSearch:memory:") - 1) == 0)
1245     {
1246       require_running (own_buf);
1247       handle_search_memory (own_buf, packet_len);
1248       return;
1249     }
1250
1251   if (strcmp (own_buf, "qAttached") == 0
1252       || strncmp (own_buf, "qAttached:", sizeof ("qAttached:") - 1) == 0)
1253     {
1254       struct process_info *process;
1255
1256       if (own_buf[sizeof ("qAttached") - 1])
1257         {
1258           int pid = strtoul (own_buf + sizeof ("qAttached:") - 1, NULL, 16);
1259           process = (struct process_info *)
1260             find_inferior_id (&all_processes, pid_to_ptid (pid));
1261         }
1262       else
1263         {
1264           require_running (own_buf);
1265           process = current_process ();
1266         }
1267
1268       if (process == NULL)
1269         {
1270           write_enn (own_buf);
1271           return;
1272         }
1273
1274       strcpy (own_buf, process->attached ? "1" : "0");
1275       return;
1276     }
1277
1278   /* Otherwise we didn't know what packet it was.  Say we didn't
1279      understand it.  */
1280   own_buf[0] = 0;
1281 }
1282
1283 /* Parse vCont packets.  */
1284 void
1285 handle_v_cont (char *own_buf)
1286 {
1287   char *p, *q;
1288   int n = 0, i = 0;
1289   struct thread_resume *resume_info;
1290   struct thread_resume default_action = {{0}};
1291
1292   /* Count the number of semicolons in the packet.  There should be one
1293      for every action.  */
1294   p = &own_buf[5];
1295   while (p)
1296     {
1297       n++;
1298       p++;
1299       p = strchr (p, ';');
1300     }
1301
1302   resume_info = malloc (n * sizeof (resume_info[0]));
1303   if (resume_info == NULL)
1304     goto err;
1305
1306   p = &own_buf[5];
1307   while (*p)
1308     {
1309       p++;
1310
1311       if (p[0] == 's' || p[0] == 'S')
1312         resume_info[i].kind = resume_step;
1313       else if (p[0] == 'c' || p[0] == 'C')
1314         resume_info[i].kind = resume_continue;
1315       else if (p[0] == 't')
1316         resume_info[i].kind = resume_stop;
1317       else
1318         goto err;
1319
1320       if (p[0] == 'S' || p[0] == 'C')
1321         {
1322           int sig;
1323           sig = strtol (p + 1, &q, 16);
1324           if (p == q)
1325             goto err;
1326           p = q;
1327
1328           if (!target_signal_to_host_p (sig))
1329             goto err;
1330           resume_info[i].sig = target_signal_to_host (sig);
1331         }
1332       else
1333         {
1334           resume_info[i].sig = 0;
1335           p = p + 1;
1336         }
1337
1338       if (p[0] == 0)
1339         {
1340           resume_info[i].thread = minus_one_ptid;
1341           default_action = resume_info[i];
1342
1343           /* Note: we don't increment i here, we'll overwrite this entry
1344              the next time through.  */
1345         }
1346       else if (p[0] == ':')
1347         {
1348           ptid_t ptid = read_ptid (p + 1, &q);
1349
1350           if (p == q)
1351             goto err;
1352           p = q;
1353           if (p[0] != ';' && p[0] != 0)
1354             goto err;
1355
1356           resume_info[i].thread = ptid;
1357
1358           i++;
1359         }
1360     }
1361
1362   if (i < n)
1363     resume_info[i] = default_action;
1364
1365   /* Still used in occasional places in the backend.  */
1366   if (n == 1
1367       && !ptid_equal (resume_info[0].thread, minus_one_ptid)
1368       && resume_info[0].kind != resume_stop)
1369     cont_thread = resume_info[0].thread;
1370   else
1371     cont_thread = minus_one_ptid;
1372   set_desired_inferior (0);
1373
1374   if (!non_stop)
1375     enable_async_io ();
1376
1377   (*the_target->resume) (resume_info, n);
1378
1379   free (resume_info);
1380
1381   if (non_stop)
1382     write_ok (own_buf);
1383   else
1384     {
1385       last_ptid = mywait (minus_one_ptid, &last_status, 0, 1);
1386       prepare_resume_reply (own_buf, last_ptid, &last_status);
1387       disable_async_io ();
1388     }
1389   return;
1390
1391 err:
1392   write_enn (own_buf);
1393   free (resume_info);
1394   return;
1395 }
1396
1397 /* Attach to a new program.  Return 1 if successful, 0 if failure.  */
1398 int
1399 handle_v_attach (char *own_buf)
1400 {
1401   int pid;
1402
1403   pid = strtol (own_buf + 8, NULL, 16);
1404   if (pid != 0 && attach_inferior (pid) == 0)
1405     {
1406       /* Don't report shared library events after attaching, even if
1407          some libraries are preloaded.  GDB will always poll the
1408          library list.  Avoids the "stopped by shared library event"
1409          notice on the GDB side.  */
1410       dlls_changed = 0;
1411
1412       if (non_stop)
1413         {
1414           /* In non-stop, we don't send a resume reply.  Stop events
1415              will follow up using the normal notification
1416              mechanism.  */
1417           write_ok (own_buf);
1418         }
1419       else
1420         prepare_resume_reply (own_buf, last_ptid, &last_status);
1421
1422       return 1;
1423     }
1424   else
1425     {
1426       write_enn (own_buf);
1427       return 0;
1428     }
1429 }
1430
1431 /* Run a new program.  Return 1 if successful, 0 if failure.  */
1432 static int
1433 handle_v_run (char *own_buf)
1434 {
1435   char *p, *next_p, **new_argv;
1436   int i, new_argc;
1437
1438   new_argc = 0;
1439   for (p = own_buf + strlen ("vRun;"); p && *p; p = strchr (p, ';'))
1440     {
1441       p++;
1442       new_argc++;
1443     }
1444
1445   new_argv = calloc (new_argc + 2, sizeof (char *));
1446   if (new_argv == NULL)
1447     {
1448       write_enn (own_buf);
1449       return 0;
1450     }
1451
1452   i = 0;
1453   for (p = own_buf + strlen ("vRun;"); *p; p = next_p)
1454     {
1455       next_p = strchr (p, ';');
1456       if (next_p == NULL)
1457         next_p = p + strlen (p);
1458
1459       if (i == 0 && p == next_p)
1460         new_argv[i] = NULL;
1461       else
1462         {
1463           /* FIXME: Fail request if out of memory instead of dying.  */
1464           new_argv[i] = xmalloc (1 + (next_p - p) / 2);
1465           unhexify (new_argv[i], p, (next_p - p) / 2);
1466           new_argv[i][(next_p - p) / 2] = '\0';
1467         }
1468
1469       if (*next_p)
1470         next_p++;
1471       i++;
1472     }
1473   new_argv[i] = NULL;
1474
1475   if (new_argv[0] == NULL)
1476     {
1477       /* GDB didn't specify a program to run.  Use the program from the
1478          last run with the new argument list.  */
1479
1480       if (program_argv == NULL)
1481         {
1482           /* FIXME: new_argv memory leak */
1483           write_enn (own_buf);
1484           return 0;
1485         }
1486
1487       new_argv[0] = strdup (program_argv[0]);
1488       if (new_argv[0] == NULL)
1489         {
1490           /* FIXME: new_argv memory leak */
1491           write_enn (own_buf);
1492           return 0;
1493         }
1494     }
1495
1496   /* Free the old argv and install the new one.  */
1497   freeargv (program_argv);
1498   program_argv = new_argv;
1499
1500   start_inferior (program_argv);
1501   if (last_status.kind == TARGET_WAITKIND_STOPPED)
1502     {
1503       prepare_resume_reply (own_buf, last_ptid, &last_status);
1504
1505       /* In non-stop, sending a resume reply doesn't set the general
1506          thread, but GDB assumes a vRun sets it (this is so GDB can
1507          query which is the main thread of the new inferior.  */
1508       if (non_stop)
1509         general_thread = last_ptid;
1510
1511       return 1;
1512     }
1513   else
1514     {
1515       write_enn (own_buf);
1516       return 0;
1517     }
1518 }
1519
1520 /* Kill process.  Return 1 if successful, 0 if failure.  */
1521 int
1522 handle_v_kill (char *own_buf)
1523 {
1524   int pid;
1525   char *p = &own_buf[6];
1526   if (multi_process)
1527     pid = strtol (p, NULL, 16);
1528   else
1529     pid = signal_pid;
1530   if (pid != 0 && kill_inferior (pid) == 0)
1531     {
1532       last_status.kind = TARGET_WAITKIND_SIGNALLED;
1533       last_status.value.sig = TARGET_SIGNAL_KILL;
1534       last_ptid = pid_to_ptid (pid);
1535       discard_queued_stop_replies (pid);
1536       write_ok (own_buf);
1537       return 1;
1538     }
1539   else
1540     {
1541       write_enn (own_buf);
1542       return 0;
1543     }
1544 }
1545
1546 /* Handle a 'vStopped' packet.  */
1547 static void
1548 handle_v_stopped (char *own_buf)
1549 {
1550   /* If we're waiting for GDB to acknowledge a pending stop reply,
1551      consider that done.  */
1552   if (notif_queue)
1553     {
1554       struct vstop_notif *head;
1555
1556       if (remote_debug)
1557         fprintf (stderr, "vStopped: acking %s\n",
1558                  target_pid_to_str (notif_queue->ptid));
1559
1560       head = notif_queue;
1561       notif_queue = notif_queue->next;
1562       free (head);
1563     }
1564
1565   /* Push another stop reply, or if there are no more left, an OK.  */
1566   send_next_stop_reply (own_buf);
1567 }
1568
1569 /* Handle all of the extended 'v' packets.  */
1570 void
1571 handle_v_requests (char *own_buf, int packet_len, int *new_packet_len)
1572 {
1573   if (!disable_packet_vCont)
1574     {
1575       if (strncmp (own_buf, "vCont;", 6) == 0)
1576         {
1577           require_running (own_buf);
1578           handle_v_cont (own_buf);
1579           return;
1580         }
1581
1582       if (strncmp (own_buf, "vCont?", 6) == 0)
1583         {
1584           strcpy (own_buf, "vCont;c;C;s;S;t");
1585           return;
1586         }
1587     }
1588
1589   if (strncmp (own_buf, "vFile:", 6) == 0
1590       && handle_vFile (own_buf, packet_len, new_packet_len))
1591     return;
1592
1593   if (strncmp (own_buf, "vAttach;", 8) == 0)
1594     {
1595       if (!multi_process && target_running ())
1596         {
1597           fprintf (stderr, "Already debugging a process\n");
1598           write_enn (own_buf);
1599           return;
1600         }
1601       handle_v_attach (own_buf);
1602       return;
1603     }
1604
1605   if (strncmp (own_buf, "vRun;", 5) == 0)
1606     {
1607       if (!multi_process && target_running ())
1608         {
1609           fprintf (stderr, "Already debugging a process\n");
1610           write_enn (own_buf);
1611           return;
1612         }
1613       handle_v_run (own_buf);
1614       return;
1615     }
1616
1617   if (strncmp (own_buf, "vKill;", 6) == 0)
1618     {
1619       if (!target_running ())
1620         {
1621           fprintf (stderr, "No process to kill\n");
1622           write_enn (own_buf);
1623           return;
1624         }
1625       handle_v_kill (own_buf);
1626       return;
1627     }
1628
1629   if (strncmp (own_buf, "vStopped", 8) == 0)
1630     {
1631       handle_v_stopped (own_buf);
1632       return;
1633     }
1634
1635   /* Otherwise we didn't know what packet it was.  Say we didn't
1636      understand it.  */
1637   own_buf[0] = 0;
1638   return;
1639 }
1640
1641 /* Resume inferior and wait for another event.  In non-stop mode,
1642    don't really wait here, but return immediatelly to the event
1643    loop.  */
1644 void
1645 myresume (char *own_buf, int step, int sig)
1646 {
1647   struct thread_resume resume_info[2];
1648   int n = 0;
1649   int valid_cont_thread;
1650
1651   set_desired_inferior (0);
1652
1653   valid_cont_thread = (!ptid_equal (cont_thread, null_ptid)
1654                          && !ptid_equal (cont_thread, minus_one_ptid));
1655
1656   if (step || sig || valid_cont_thread)
1657     {
1658       resume_info[0].thread
1659         = ((struct inferior_list_entry *) current_inferior)->id;
1660       if (step)
1661         resume_info[0].kind = resume_step;
1662       else
1663         resume_info[0].kind = resume_continue;
1664       resume_info[0].sig = sig;
1665       n++;
1666     }
1667
1668   if (!valid_cont_thread)
1669     {
1670       resume_info[n].thread = minus_one_ptid;
1671       resume_info[n].kind = resume_continue;
1672       resume_info[n].sig = 0;
1673       n++;
1674     }
1675
1676   if (!non_stop)
1677     enable_async_io ();
1678
1679   (*the_target->resume) (resume_info, n);
1680
1681   if (non_stop)
1682     write_ok (own_buf);
1683   else
1684     {
1685       last_ptid = mywait (minus_one_ptid, &last_status, 0, 1);
1686       prepare_resume_reply (own_buf, last_ptid, &last_status);
1687       disable_async_io ();
1688     }
1689 }
1690
1691 /* Callback for for_each_inferior.  Make a new stop reply for each
1692    stopped thread.  */
1693
1694 static int
1695 queue_stop_reply_callback (struct inferior_list_entry *entry, void *arg)
1696 {
1697   int pid = * (int *) arg;
1698
1699   if (pid == -1
1700       || ptid_get_pid (entry->id) == pid)
1701     {
1702       struct target_waitstatus status;
1703
1704       status.kind = TARGET_WAITKIND_STOPPED;
1705       status.value.sig = TARGET_SIGNAL_TRAP;
1706
1707       /* Pass the last stop reply back to GDB, but don't notify.  */
1708       queue_stop_reply (entry->id, &status);
1709     }
1710
1711   return 0;
1712 }
1713
1714 /* Status handler for the '?' packet.  */
1715
1716 static void
1717 handle_status (char *own_buf)
1718 {
1719   struct target_waitstatus status;
1720   status.kind = TARGET_WAITKIND_STOPPED;
1721   status.value.sig = TARGET_SIGNAL_TRAP;
1722
1723   /* In non-stop mode, we must send a stop reply for each stopped
1724      thread.  In all-stop mode, just send one for the first stopped
1725      thread we find.  */
1726
1727   if (non_stop)
1728     {
1729       int pid = -1;
1730       discard_queued_stop_replies (pid);
1731       find_inferior (&all_threads, queue_stop_reply_callback, &pid);
1732
1733       /* The first is sent immediatly.  OK is sent if there is no
1734          stopped thread, which is the same handling of the vStopped
1735          packet (by design).  */
1736       send_next_stop_reply (own_buf);
1737     }
1738   else
1739     {
1740       if (all_threads.head)
1741         prepare_resume_reply (own_buf,
1742                               all_threads.head->id, &status);
1743       else
1744         strcpy (own_buf, "W00");
1745     }
1746 }
1747
1748 static void
1749 gdbserver_version (void)
1750 {
1751   printf ("GNU gdbserver %s%s\n"
1752           "Copyright (C) 2009 Free Software Foundation, Inc.\n"
1753           "gdbserver is free software, covered by the GNU General Public License.\n"
1754           "This gdbserver was configured as \"%s\"\n",
1755           PKGVERSION, version, host_name);
1756 }
1757
1758 static void
1759 gdbserver_usage (FILE *stream)
1760 {
1761   fprintf (stream, "Usage:\tgdbserver [OPTIONS] COMM PROG [ARGS ...]\n"
1762            "\tgdbserver [OPTIONS] --attach COMM PID\n"
1763            "\tgdbserver [OPTIONS] --multi COMM\n"
1764            "\n"
1765            "COMM may either be a tty device (for serial debugging), or \n"
1766            "HOST:PORT to listen for a TCP connection.\n"
1767            "\n"
1768            "Options:\n"
1769            "  --debug               Enable general debugging output.\n"
1770            "  --remote-debug        Enable remote protocol debugging output.\n"
1771            "  --version             Display version information and exit.\n"
1772            "  --wrapper WRAPPER --  Run WRAPPER to start new programs.\n");
1773   if (REPORT_BUGS_TO[0] && stream == stdout)
1774     fprintf (stream, "Report bugs to \"%s\".\n", REPORT_BUGS_TO);
1775 }
1776
1777 static void
1778 gdbserver_show_disableable (FILE *stream)
1779 {
1780   fprintf (stream, "Disableable packets:\n"
1781            "  vCont       \tAll vCont packets\n"
1782            "  qC          \tQuerying the current thread\n"
1783            "  qfThreadInfo\tThread listing\n"
1784            "  Tthread     \tPassing the thread specifier in the T stop reply packet\n"
1785            "  threads     \tAll of the above\n");
1786 }
1787
1788
1789 #undef require_running
1790 #define require_running(BUF)                    \
1791   if (!target_running ())                       \
1792     {                                           \
1793       write_enn (BUF);                          \
1794       break;                                    \
1795     }
1796
1797 static int
1798 first_thread_of (struct inferior_list_entry *entry, void *args)
1799 {
1800   int pid = * (int *) args;
1801
1802   if (ptid_get_pid (entry->id) == pid)
1803     return 1;
1804
1805   return 0;
1806 }
1807
1808 static void
1809 kill_inferior_callback (struct inferior_list_entry *entry)
1810 {
1811   struct process_info *process = (struct process_info *) entry;
1812   int pid = ptid_get_pid (process->head.id);
1813
1814   kill_inferior (pid);
1815   discard_queued_stop_replies (pid);
1816 }
1817
1818 /* Callback for for_each_inferior to detach or kill the inferior,
1819    depending on whether we attached to it or not.
1820    We inform the user whether we're detaching or killing the process
1821    as this is only called when gdbserver is about to exit.  */
1822
1823 static void
1824 detach_or_kill_inferior_callback (struct inferior_list_entry *entry)
1825 {
1826   struct process_info *process = (struct process_info *) entry;
1827   int pid = ptid_get_pid (process->head.id);
1828
1829   if (process->attached)
1830     detach_inferior (pid);
1831   else
1832     kill_inferior (pid);
1833
1834   discard_queued_stop_replies (pid);
1835 }
1836
1837 /* for_each_inferior callback for detach_or_kill_for_exit to print
1838    the pids of started inferiors.  */
1839
1840 static void
1841 print_started_pid (struct inferior_list_entry *entry)
1842 {
1843   struct process_info *process = (struct process_info *) entry;
1844
1845   if (! process->attached)
1846     {
1847       int pid = ptid_get_pid (process->head.id);
1848       fprintf (stderr, " %d", pid);
1849     }
1850 }
1851
1852 /* for_each_inferior callback for detach_or_kill_for_exit to print
1853    the pids of attached inferiors.  */
1854
1855 static void
1856 print_attached_pid (struct inferior_list_entry *entry)
1857 {
1858   struct process_info *process = (struct process_info *) entry;
1859
1860   if (process->attached)
1861     {
1862       int pid = ptid_get_pid (process->head.id);
1863       fprintf (stderr, " %d", pid);
1864     }
1865 }
1866
1867 /* Call this when exiting gdbserver with possible inferiors that need
1868    to be killed or detached from.  */
1869
1870 static void
1871 detach_or_kill_for_exit (void)
1872 {
1873   /* First print a list of the inferiors we will be killing/detaching.
1874      This is to assist the user, for example, in case the inferior unexpectedly
1875      dies after we exit: did we screw up or did the inferior exit on its own?
1876      Having this info will save some head-scratching.  */
1877
1878   if (have_started_inferiors_p ())
1879     {
1880       fprintf (stderr, "Killing process(es):");
1881       for_each_inferior (&all_processes, print_started_pid);
1882       fprintf (stderr, "\n");
1883     }
1884   if (have_attached_inferiors_p ())
1885     {
1886       fprintf (stderr, "Detaching process(es):");
1887       for_each_inferior (&all_processes, print_attached_pid);
1888       fprintf (stderr, "\n");
1889     }
1890
1891   /* Now we can kill or detach the inferiors.  */
1892
1893   for_each_inferior (&all_processes, detach_or_kill_inferior_callback);
1894 }
1895
1896 static void
1897 join_inferiors_callback (struct inferior_list_entry *entry)
1898 {
1899   struct process_info *process = (struct process_info *) entry;
1900
1901   /* If we are attached, then we can exit.  Otherwise, we need to hang
1902      around doing nothing, until the child is gone.  */
1903   if (!process->attached)
1904     join_inferior (ptid_get_pid (process->head.id));
1905 }
1906
1907 int
1908 main (int argc, char *argv[])
1909 {
1910   int bad_attach;
1911   int pid;
1912   char *arg_end, *port;
1913   char **next_arg = &argv[1];
1914   int multi_mode = 0;
1915   int attach = 0;
1916   int was_running;
1917
1918   while (*next_arg != NULL && **next_arg == '-')
1919     {
1920       if (strcmp (*next_arg, "--version") == 0)
1921         {
1922           gdbserver_version ();
1923           exit (0);
1924         }
1925       else if (strcmp (*next_arg, "--help") == 0)
1926         {
1927           gdbserver_usage (stdout);
1928           exit (0);
1929         }
1930       else if (strcmp (*next_arg, "--attach") == 0)
1931         attach = 1;
1932       else if (strcmp (*next_arg, "--multi") == 0)
1933         multi_mode = 1;
1934       else if (strcmp (*next_arg, "--wrapper") == 0)
1935         {
1936           next_arg++;
1937
1938           wrapper_argv = next_arg;
1939           while (*next_arg != NULL && strcmp (*next_arg, "--") != 0)
1940             next_arg++;
1941
1942           if (next_arg == wrapper_argv || *next_arg == NULL)
1943             {
1944               gdbserver_usage (stderr);
1945               exit (1);
1946             }
1947
1948           /* Consume the "--".  */
1949           *next_arg = NULL;
1950         }
1951       else if (strcmp (*next_arg, "--debug") == 0)
1952         debug_threads = 1;
1953       else if (strcmp (*next_arg, "--remote-debug") == 0)
1954         remote_debug = 1;
1955       else if (strcmp (*next_arg, "--disable-packet") == 0)
1956         {
1957           gdbserver_show_disableable (stdout);
1958           exit (0);
1959         }
1960       else if (strncmp (*next_arg,
1961                         "--disable-packet=",
1962                         sizeof ("--disable-packet=") - 1) == 0)
1963         {
1964           char *packets, *tok;
1965
1966           packets = *next_arg += sizeof ("--disable-packet=") - 1;
1967           for (tok = strtok (packets, ",");
1968                tok != NULL;
1969                tok = strtok (NULL, ","))
1970             {
1971               if (strcmp ("vCont", tok) == 0)
1972                 disable_packet_vCont = 1;
1973               else if (strcmp ("Tthread", tok) == 0)
1974                 disable_packet_Tthread = 1;
1975               else if (strcmp ("qC", tok) == 0)
1976                 disable_packet_qC = 1;
1977               else if (strcmp ("qfThreadInfo", tok) == 0)
1978                 disable_packet_qfThreadInfo = 1;
1979               else if (strcmp ("threads", tok) == 0)
1980                 {
1981                   disable_packet_vCont = 1;
1982                   disable_packet_Tthread = 1;
1983                   disable_packet_qC = 1;
1984                   disable_packet_qfThreadInfo = 1;
1985                 }
1986               else
1987                 {
1988                   fprintf (stderr, "Don't know how to disable \"%s\".\n\n",
1989                            tok);
1990                   gdbserver_show_disableable (stderr);
1991                   exit (1);
1992                 }
1993             }
1994         }
1995       else
1996         {
1997           fprintf (stderr, "Unknown argument: %s\n", *next_arg);
1998           exit (1);
1999         }
2000
2001       next_arg++;
2002       continue;
2003     }
2004
2005   if (setjmp (toplevel))
2006     {
2007       fprintf (stderr, "Exiting\n");
2008       exit (1);
2009     }
2010
2011   port = *next_arg;
2012   next_arg++;
2013   if (port == NULL || (!attach && !multi_mode && *next_arg == NULL))
2014     {
2015       gdbserver_usage (stderr);
2016       exit (1);
2017     }
2018
2019   bad_attach = 0;
2020   pid = 0;
2021
2022   /* --attach used to come after PORT, so allow it there for
2023        compatibility.  */
2024   if (*next_arg != NULL && strcmp (*next_arg, "--attach") == 0)
2025     {
2026       attach = 1;
2027       next_arg++;
2028     }
2029
2030   if (attach
2031       && (*next_arg == NULL
2032           || (*next_arg)[0] == '\0'
2033           || (pid = strtoul (*next_arg, &arg_end, 0)) == 0
2034           || *arg_end != '\0'
2035           || next_arg[1] != NULL))
2036     bad_attach = 1;
2037
2038   if (bad_attach)
2039     {
2040       gdbserver_usage (stderr);
2041       exit (1);
2042     }
2043
2044   initialize_inferiors ();
2045   initialize_async_io ();
2046   initialize_low ();
2047
2048   own_buf = xmalloc (PBUFSIZ + 1);
2049   mem_buf = xmalloc (PBUFSIZ);
2050
2051   if (pid == 0 && *next_arg != NULL)
2052     {
2053       int i, n;
2054
2055       n = argc - (next_arg - argv);
2056       program_argv = xmalloc (sizeof (char *) * (n + 1));
2057       for (i = 0; i < n; i++)
2058         program_argv[i] = xstrdup (next_arg[i]);
2059       program_argv[i] = NULL;
2060
2061       /* Wait till we are at first instruction in program.  */
2062       start_inferior (program_argv);
2063
2064       /* We are now (hopefully) stopped at the first instruction of
2065          the target process.  This assumes that the target process was
2066          successfully created.  */
2067     }
2068   else if (pid != 0)
2069     {
2070       if (attach_inferior (pid) == -1)
2071         error ("Attaching not supported on this target");
2072
2073       /* Otherwise succeeded.  */
2074     }
2075   else
2076     {
2077       last_status.kind = TARGET_WAITKIND_EXITED;
2078       last_status.value.integer = 0;
2079       last_ptid = minus_one_ptid;
2080     }
2081
2082   /* Don't report shared library events on the initial connection,
2083      even if some libraries are preloaded.  Avoids the "stopped by
2084      shared library event" notice on gdb side.  */
2085   dlls_changed = 0;
2086
2087   if (setjmp (toplevel))
2088     {
2089       detach_or_kill_for_exit ();
2090       exit (1);
2091     }
2092
2093   if (last_status.kind == TARGET_WAITKIND_EXITED
2094       || last_status.kind == TARGET_WAITKIND_SIGNALLED)
2095     was_running = 0;
2096   else
2097     was_running = 1;
2098
2099   if (!was_running && !multi_mode)
2100     {
2101       fprintf (stderr, "No program to debug.  GDBserver exiting.\n");
2102       exit (1);
2103     }
2104
2105   while (1)
2106     {
2107       noack_mode = 0;
2108       multi_process = 0;
2109       non_stop = 0;
2110
2111       remote_open (port);
2112
2113       if (setjmp (toplevel) != 0)
2114         {
2115           /* An error occurred.  */
2116           if (response_needed)
2117             {
2118               write_enn (own_buf);
2119               putpkt (own_buf);
2120             }
2121         }
2122
2123       /* Wait for events.  This will return when all event sources are
2124          removed from the event loop. */
2125       start_event_loop ();
2126
2127       /* If an exit was requested (using the "monitor exit" command),
2128          terminate now.  The only other way to get here is for
2129          getpkt to fail; close the connection and reopen it at the
2130          top of the loop.  */
2131
2132       if (exit_requested)
2133         {
2134           detach_or_kill_for_exit ();
2135           exit (0);
2136         }
2137       else
2138         fprintf (stderr, "Remote side has terminated connection.  "
2139                  "GDBserver will reopen the connection.\n");
2140     }
2141 }
2142
2143 /* Event loop callback that handles a serial event.  The first byte in
2144    the serial buffer gets us here.  We expect characters to arrive at
2145    a brisk pace, so we read the rest of the packet with a blocking
2146    getpkt call.  */
2147
2148 static void
2149 process_serial_event (void)
2150 {
2151   char ch;
2152   int i = 0;
2153   int signal;
2154   unsigned int len;
2155   CORE_ADDR mem_addr;
2156   int pid;
2157   unsigned char sig;
2158   int packet_len;
2159   int new_packet_len = -1;
2160
2161   /* Used to decide when gdbserver should exit in
2162      multi-mode/remote.  */
2163   static int have_ran = 0;
2164
2165   if (!have_ran)
2166     have_ran = target_running ();
2167
2168   disable_async_io ();
2169
2170   response_needed = 0;
2171   packet_len = getpkt (own_buf);
2172   if (packet_len <= 0)
2173     {
2174       target_async (0);
2175       remote_close ();
2176       return;
2177     }
2178   response_needed = 1;
2179
2180   i = 0;
2181   ch = own_buf[i++];
2182   switch (ch)
2183     {
2184     case 'q':
2185       handle_query (own_buf, packet_len, &new_packet_len);
2186       break;
2187     case 'Q':
2188       handle_general_set (own_buf);
2189       break;
2190     case 'D':
2191       require_running (own_buf);
2192
2193       if (multi_process)
2194         {
2195           i++; /* skip ';' */
2196           pid = strtol (&own_buf[i], NULL, 16);
2197         }
2198       else
2199         pid =
2200           ptid_get_pid (((struct inferior_list_entry *) current_inferior)->id);
2201
2202       fprintf (stderr, "Detaching from process %d\n", pid);
2203       if (detach_inferior (pid) != 0)
2204         write_enn (own_buf);
2205       else
2206         {
2207           discard_queued_stop_replies (pid);
2208           write_ok (own_buf);
2209
2210           if (extended_protocol)
2211             {
2212               /* Treat this like a normal program exit.  */
2213               last_status.kind = TARGET_WAITKIND_EXITED;
2214               last_status.value.integer = 0;
2215               last_ptid = pid_to_ptid (pid);
2216
2217               current_inferior = NULL;
2218             }
2219           else
2220             {
2221               putpkt (own_buf);
2222               remote_close ();
2223
2224               /* If we are attached, then we can exit.  Otherwise, we
2225                  need to hang around doing nothing, until the child is
2226                  gone.  */
2227               for_each_inferior (&all_processes,
2228                                  join_inferiors_callback);
2229               exit (0);
2230             }
2231         }
2232       break;
2233     case '!':
2234       extended_protocol = 1;
2235       write_ok (own_buf);
2236       break;
2237     case '?':
2238       handle_status (own_buf);
2239       break;
2240     case 'H':
2241       if (own_buf[1] == 'c' || own_buf[1] == 'g' || own_buf[1] == 's')
2242         {
2243           ptid_t gdb_id, thread_id;
2244           int pid;
2245
2246           require_running (own_buf);
2247
2248           gdb_id = read_ptid (&own_buf[2], NULL);
2249
2250           pid = ptid_get_pid (gdb_id);
2251
2252           if (ptid_equal (gdb_id, null_ptid)
2253               || ptid_equal (gdb_id, minus_one_ptid))
2254             thread_id = null_ptid;
2255           else if (pid != 0
2256                    && ptid_equal (pid_to_ptid (pid),
2257                                   gdb_id))
2258             {
2259               struct thread_info *thread =
2260                 (struct thread_info *) find_inferior (&all_threads,
2261                                                       first_thread_of,
2262                                                       &pid);
2263               if (!thread)
2264                 {
2265                   write_enn (own_buf);
2266                   break;
2267                 }
2268
2269               thread_id = ((struct inferior_list_entry *)thread)->id;
2270             }
2271           else
2272             {
2273               thread_id = gdb_id_to_thread_id (gdb_id);
2274               if (ptid_equal (thread_id, null_ptid))
2275                 {
2276                   write_enn (own_buf);
2277                   break;
2278                 }
2279             }
2280
2281           if (own_buf[1] == 'g')
2282             {
2283               if (ptid_equal (thread_id, null_ptid))
2284                 {
2285                   /* GDB is telling us to choose any thread.  Check if
2286                      the currently selected thread is still valid. If
2287                      it is not, select the first available.  */
2288                   struct thread_info *thread =
2289                     (struct thread_info *) find_inferior_id (&all_threads,
2290                                                              general_thread);
2291                   if (thread == NULL)
2292                     thread_id = all_threads.head->id;
2293                 }
2294
2295               general_thread = thread_id;
2296               set_desired_inferior (1);
2297             }
2298           else if (own_buf[1] == 'c')
2299             cont_thread = thread_id;
2300           else if (own_buf[1] == 's')
2301             step_thread = thread_id;
2302
2303           write_ok (own_buf);
2304         }
2305       else
2306         {
2307           /* Silently ignore it so that gdb can extend the protocol
2308              without compatibility headaches.  */
2309           own_buf[0] = '\0';
2310         }
2311       break;
2312     case 'g':
2313       require_running (own_buf);
2314       set_desired_inferior (1);
2315       registers_to_string (own_buf);
2316       break;
2317     case 'G':
2318       require_running (own_buf);
2319       set_desired_inferior (1);
2320       registers_from_string (&own_buf[1]);
2321       write_ok (own_buf);
2322       break;
2323     case 'm':
2324       require_running (own_buf);
2325       decode_m_packet (&own_buf[1], &mem_addr, &len);
2326       if (read_inferior_memory (mem_addr, mem_buf, len) == 0)
2327         convert_int_to_ascii (mem_buf, own_buf, len);
2328       else
2329         write_enn (own_buf);
2330       break;
2331     case 'M':
2332       require_running (own_buf);
2333       decode_M_packet (&own_buf[1], &mem_addr, &len, mem_buf);
2334       if (write_inferior_memory (mem_addr, mem_buf, len) == 0)
2335         write_ok (own_buf);
2336       else
2337         write_enn (own_buf);
2338       break;
2339     case 'X':
2340       require_running (own_buf);
2341       if (decode_X_packet (&own_buf[1], packet_len - 1,
2342                            &mem_addr, &len, mem_buf) < 0
2343           || write_inferior_memory (mem_addr, mem_buf, len) != 0)
2344         write_enn (own_buf);
2345       else
2346         write_ok (own_buf);
2347       break;
2348     case 'C':
2349       require_running (own_buf);
2350       convert_ascii_to_int (own_buf + 1, &sig, 1);
2351       if (target_signal_to_host_p (sig))
2352         signal = target_signal_to_host (sig);
2353       else
2354         signal = 0;
2355       myresume (own_buf, 0, signal);
2356       break;
2357     case 'S':
2358       require_running (own_buf);
2359       convert_ascii_to_int (own_buf + 1, &sig, 1);
2360       if (target_signal_to_host_p (sig))
2361         signal = target_signal_to_host (sig);
2362       else
2363         signal = 0;
2364       myresume (own_buf, 1, signal);
2365       break;
2366     case 'c':
2367       require_running (own_buf);
2368       signal = 0;
2369       myresume (own_buf, 0, signal);
2370       break;
2371     case 's':
2372       require_running (own_buf);
2373       signal = 0;
2374       myresume (own_buf, 1, signal);
2375       break;
2376     case 'Z':  /* insert_ ... */
2377       /* Fallthrough.  */
2378     case 'z':  /* remove_ ... */
2379       {
2380         char *lenptr;
2381         char *dataptr;
2382         CORE_ADDR addr = strtoul (&own_buf[3], &lenptr, 16);
2383         int len = strtol (lenptr + 1, &dataptr, 16);
2384         char type = own_buf[1];
2385         int res;
2386         const int insert = ch == 'Z';
2387
2388         /* Default to unrecognized/unsupported.  */
2389         res = 1;
2390         switch (type)
2391           {
2392           case '0': /* software-breakpoint */
2393           case '1': /* hardware-breakpoint */
2394           case '2': /* write watchpoint */
2395           case '3': /* read watchpoint */
2396           case '4': /* access watchpoint */
2397             require_running (own_buf);
2398             if (insert && the_target->insert_point != NULL)
2399               res = (*the_target->insert_point) (type, addr, len);
2400             else if (!insert && the_target->remove_point != NULL)
2401               res = (*the_target->remove_point) (type, addr, len);
2402             break;
2403           default:
2404             break;
2405           }
2406
2407         if (res == 0)
2408           write_ok (own_buf);
2409         else if (res == 1)
2410           /* Unsupported.  */
2411           own_buf[0] = '\0';
2412         else
2413           write_enn (own_buf);
2414         break;
2415       }
2416     case 'k':
2417       response_needed = 0;
2418       if (!target_running ())
2419         /* The packet we received doesn't make sense - but we can't
2420            reply to it, either.  */
2421         return;
2422
2423       fprintf (stderr, "Killing all inferiors\n");
2424       for_each_inferior (&all_processes, kill_inferior_callback);
2425
2426       /* When using the extended protocol, we wait with no program
2427          running.  The traditional protocol will exit instead.  */
2428       if (extended_protocol)
2429         {
2430           last_status.kind = TARGET_WAITKIND_EXITED;
2431           last_status.value.sig = TARGET_SIGNAL_KILL;
2432           return;
2433         }
2434       else
2435         {
2436           exit (0);
2437           break;
2438         }
2439     case 'T':
2440       {
2441         ptid_t gdb_id, thread_id;
2442
2443         require_running (own_buf);
2444
2445         gdb_id = read_ptid (&own_buf[1], NULL);
2446         thread_id = gdb_id_to_thread_id (gdb_id);
2447         if (ptid_equal (thread_id, null_ptid))
2448           {
2449             write_enn (own_buf);
2450             break;
2451           }
2452
2453         if (mythread_alive (thread_id))
2454           write_ok (own_buf);
2455         else
2456           write_enn (own_buf);
2457       }
2458       break;
2459     case 'R':
2460       response_needed = 0;
2461
2462       /* Restarting the inferior is only supported in the extended
2463          protocol.  */
2464       if (extended_protocol)
2465         {
2466           if (target_running ())
2467             for_each_inferior (&all_processes,
2468                                kill_inferior_callback);
2469           fprintf (stderr, "GDBserver restarting\n");
2470
2471           /* Wait till we are at 1st instruction in prog.  */
2472           if (program_argv != NULL)
2473             start_inferior (program_argv);
2474           else
2475             {
2476               last_status.kind = TARGET_WAITKIND_EXITED;
2477               last_status.value.sig = TARGET_SIGNAL_KILL;
2478             }
2479           return;
2480         }
2481       else
2482         {
2483           /* It is a request we don't understand.  Respond with an
2484              empty packet so that gdb knows that we don't support this
2485              request.  */
2486           own_buf[0] = '\0';
2487           break;
2488         }
2489     case 'v':
2490       /* Extended (long) request.  */
2491       handle_v_requests (own_buf, packet_len, &new_packet_len);
2492       break;
2493
2494     default:
2495       /* It is a request we don't understand.  Respond with an empty
2496          packet so that gdb knows that we don't support this
2497          request.  */
2498       own_buf[0] = '\0';
2499       break;
2500     }
2501
2502   if (new_packet_len != -1)
2503     putpkt_binary (own_buf, new_packet_len);
2504   else
2505     putpkt (own_buf);
2506
2507   response_needed = 0;
2508
2509   if (!extended_protocol && have_ran && !target_running ())
2510     {
2511       /* In non-stop, defer exiting until GDB had a chance to query
2512          the whole vStopped list (until it gets an OK).  */
2513       if (!notif_queue)
2514         {
2515           fprintf (stderr, "GDBserver exiting\n");
2516           remote_close ();
2517           exit (0);
2518         }
2519     }
2520 }
2521
2522 /* Event-loop callback for serial events.  */
2523
2524 void
2525 handle_serial_event (int err, gdb_client_data client_data)
2526 {
2527   if (debug_threads)
2528     fprintf (stderr, "handling possible serial event\n");
2529
2530   /* Really handle it.  */
2531   process_serial_event ();
2532
2533   /* Be sure to not change the selected inferior behind GDB's back.
2534      Important in the non-stop mode asynchronous protocol.  */
2535   set_desired_inferior (1);
2536 }
2537
2538 /* Event-loop callback for target events.  */
2539
2540 void
2541 handle_target_event (int err, gdb_client_data client_data)
2542 {
2543   if (debug_threads)
2544     fprintf (stderr, "handling possible target event\n");
2545
2546   last_ptid = mywait (minus_one_ptid, &last_status,
2547                       TARGET_WNOHANG, 1);
2548
2549   if (last_status.kind != TARGET_WAITKIND_IGNORE)
2550     {
2551       /* Something interesting.  Tell GDB about it.  */
2552       push_event (last_ptid, &last_status);
2553     }
2554
2555   /* Be sure to not change the selected inferior behind GDB's back.
2556      Important in the non-stop mode asynchronous protocol.  */
2557   set_desired_inferior (1);
2558 }