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