gdb/gdbserver/
[external/binutils.git] / gdb / gdbserver / server.c
1 /* Main code for remote server for GDB.
2    Copyright (C) 1989, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2002, 2003,
3    2004, 2005, 2006, 2007, 2008, 2009, 2010 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   if (target_supports_tracepoints ()
453       && handle_tracepoint_general_set (own_buf))
454     return;
455
456   /* Otherwise we didn't know what packet it was.  Say we didn't
457      understand it.  */
458   own_buf[0] = 0;
459 }
460
461 static const char *
462 get_features_xml (const char *annex)
463 {
464   /* gdbserver_xmltarget defines what to return when looking
465      for the "target.xml" file.  Its contents can either be
466      verbatim XML code (prefixed with a '@') or else the name
467      of the actual XML file to be used in place of "target.xml".
468
469      This variable is set up from the auto-generated
470      init_registers_... routine for the current target.  */
471
472   if (gdbserver_xmltarget
473       && strcmp (annex, "target.xml") == 0)
474     {
475       if (*gdbserver_xmltarget == '@')
476         return gdbserver_xmltarget + 1;
477       else
478         annex = gdbserver_xmltarget;
479     }
480
481 #ifdef USE_XML
482   {
483     extern const char *const xml_builtin[][2];
484     int i;
485
486     /* Look for the annex.  */
487     for (i = 0; xml_builtin[i][0] != NULL; i++)
488       if (strcmp (annex, xml_builtin[i][0]) == 0)
489         break;
490
491     if (xml_builtin[i][0] != NULL)
492       return xml_builtin[i][1];
493   }
494 #endif
495
496   return NULL;
497 }
498
499 void
500 monitor_show_help (void)
501 {
502   monitor_output ("The following monitor commands are supported:\n");
503   monitor_output ("  set debug <0|1>\n");
504   monitor_output ("    Enable general debugging messages\n");
505   monitor_output ("  set debug-hw-points <0|1>\n");
506   monitor_output ("    Enable h/w breakpoint/watchpoint debugging messages\n");
507   monitor_output ("  set remote-debug <0|1>\n");
508   monitor_output ("    Enable remote protocol debugging messages\n");
509   monitor_output ("  exit\n");
510   monitor_output ("    Quit GDBserver\n");
511 }
512
513 /* Read trace frame or inferior memory.  */
514
515 static int
516 read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
517 {
518   if (current_traceframe >= 0)
519     {
520       ULONGEST nbytes;
521       ULONGEST length = len;
522
523       if (traceframe_read_mem (current_traceframe,
524                                memaddr, myaddr, len, &nbytes))
525         return EIO;
526       /* Data read from trace buffer, we're done.  */
527       if (nbytes == length)
528         return 0;
529       if (!in_readonly_region (memaddr, length))
530         return EIO;
531       /* Otherwise we have a valid readonly case, fall through.  */
532       /* (assume no half-trace half-real blocks for now) */
533     }
534
535   return read_inferior_memory (memaddr, myaddr, len);
536 }
537
538 /* Write trace frame or inferior memory.  Actually, writing to trace
539    frames is forbidden.  */
540
541 static int
542 write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len)
543 {
544   if (current_traceframe >= 0)
545     return EIO;
546   else
547     return write_inferior_memory (memaddr, myaddr, len);
548 }
549
550 /* Subroutine of handle_search_memory to simplify it.  */
551
552 static int
553 handle_search_memory_1 (CORE_ADDR start_addr, CORE_ADDR search_space_len,
554                         gdb_byte *pattern, unsigned pattern_len,
555                         gdb_byte *search_buf,
556                         unsigned chunk_size, unsigned search_buf_size,
557                         CORE_ADDR *found_addrp)
558 {
559   /* Prime the search buffer.  */
560
561   if (read_memory (start_addr, search_buf, search_buf_size) != 0)
562     {
563       warning ("Unable to access target memory at 0x%lx, halting search.",
564                (long) start_addr);
565       return -1;
566     }
567
568   /* Perform the search.
569
570      The loop is kept simple by allocating [N + pattern-length - 1] bytes.
571      When we've scanned N bytes we copy the trailing bytes to the start and
572      read in another N bytes.  */
573
574   while (search_space_len >= pattern_len)
575     {
576       gdb_byte *found_ptr;
577       unsigned nr_search_bytes = (search_space_len < search_buf_size
578                                   ? search_space_len
579                                   : search_buf_size);
580
581       found_ptr = memmem (search_buf, nr_search_bytes, pattern, pattern_len);
582
583       if (found_ptr != NULL)
584         {
585           CORE_ADDR found_addr = start_addr + (found_ptr - search_buf);
586           *found_addrp = found_addr;
587           return 1;
588         }
589
590       /* Not found in this chunk, skip to next chunk.  */
591
592       /* Don't let search_space_len wrap here, it's unsigned.  */
593       if (search_space_len >= chunk_size)
594         search_space_len -= chunk_size;
595       else
596         search_space_len = 0;
597
598       if (search_space_len >= pattern_len)
599         {
600           unsigned keep_len = search_buf_size - chunk_size;
601           CORE_ADDR read_addr = start_addr + chunk_size + keep_len;
602           int nr_to_read;
603
604           /* Copy the trailing part of the previous iteration to the front
605              of the buffer for the next iteration.  */
606           memcpy (search_buf, search_buf + chunk_size, keep_len);
607
608           nr_to_read = (search_space_len - keep_len < chunk_size
609                         ? search_space_len - keep_len
610                         : chunk_size);
611
612           if (read_memory (read_addr, search_buf + keep_len,
613                                     nr_to_read) != 0)
614             {
615               warning ("Unable to access target memory at 0x%lx, halting search.",
616                        (long) read_addr);
617               return -1;
618             }
619
620           start_addr += chunk_size;
621         }
622     }
623
624   /* Not found.  */
625
626   return 0;
627 }
628
629 /* Handle qSearch:memory packets.  */
630
631 static void
632 handle_search_memory (char *own_buf, int packet_len)
633 {
634   CORE_ADDR start_addr;
635   CORE_ADDR search_space_len;
636   gdb_byte *pattern;
637   unsigned int pattern_len;
638   /* NOTE: also defined in find.c testcase.  */
639 #define SEARCH_CHUNK_SIZE 16000
640   const unsigned chunk_size = SEARCH_CHUNK_SIZE;
641   /* Buffer to hold memory contents for searching.  */
642   gdb_byte *search_buf;
643   unsigned search_buf_size;
644   int found;
645   CORE_ADDR found_addr;
646   int cmd_name_len = sizeof ("qSearch:memory:") - 1;
647
648   pattern = malloc (packet_len);
649   if (pattern == NULL)
650     {
651       error ("Unable to allocate memory to perform the search");
652       strcpy (own_buf, "E00");
653       return;
654     }
655   if (decode_search_memory_packet (own_buf + cmd_name_len,
656                                    packet_len - cmd_name_len,
657                                    &start_addr, &search_space_len,
658                                    pattern, &pattern_len) < 0)
659     {
660       free (pattern);
661       error ("Error in parsing qSearch:memory packet");
662       strcpy (own_buf, "E00");
663       return;
664     }
665
666   search_buf_size = chunk_size + pattern_len - 1;
667
668   /* No point in trying to allocate a buffer larger than the search space.  */
669   if (search_space_len < search_buf_size)
670     search_buf_size = search_space_len;
671
672   search_buf = malloc (search_buf_size);
673   if (search_buf == NULL)
674     {
675       free (pattern);
676       error ("Unable to allocate memory to perform the search");
677       strcpy (own_buf, "E00");
678       return;
679     }
680
681   found = handle_search_memory_1 (start_addr, search_space_len,
682                                   pattern, pattern_len,
683                                   search_buf, chunk_size, search_buf_size,
684                                   &found_addr);
685
686   if (found > 0)
687     sprintf (own_buf, "1,%lx", (long) found_addr);
688   else if (found == 0)
689     strcpy (own_buf, "0");
690   else
691     strcpy (own_buf, "E00");
692
693   free (search_buf);
694   free (pattern);
695 }
696
697 #define require_running(BUF)                    \
698   if (!target_running ())                       \
699     {                                           \
700       write_enn (BUF);                          \
701       return;                                   \
702     }
703
704 /* Handle monitor commands not handled by target-specific handlers.  */
705
706 static void
707 handle_monitor_command (char *mon)
708 {
709   if (strcmp (mon, "set debug 1") == 0)
710     {
711       debug_threads = 1;
712       monitor_output ("Debug output enabled.\n");
713     }
714   else if (strcmp (mon, "set debug 0") == 0)
715     {
716       debug_threads = 0;
717       monitor_output ("Debug output disabled.\n");
718     }
719   else if (strcmp (mon, "set debug-hw-points 1") == 0)
720     {
721       debug_hw_points = 1;
722       monitor_output ("H/W point debugging output enabled.\n");
723     }
724   else if (strcmp (mon, "set debug-hw-points 0") == 0)
725     {
726       debug_hw_points = 0;
727       monitor_output ("H/W point debugging output disabled.\n");
728     }
729   else if (strcmp (mon, "set remote-debug 1") == 0)
730     {
731       remote_debug = 1;
732       monitor_output ("Protocol debug output enabled.\n");
733     }
734   else if (strcmp (mon, "set remote-debug 0") == 0)
735     {
736       remote_debug = 0;
737       monitor_output ("Protocol debug output disabled.\n");
738     }
739   else if (strcmp (mon, "help") == 0)
740     monitor_show_help ();
741   else if (strcmp (mon, "exit") == 0)
742     exit_requested = 1;
743   else
744     {
745       monitor_output ("Unknown monitor command.\n\n");
746       monitor_show_help ();
747       write_enn (own_buf);
748     }
749 }
750
751 static void
752 handle_threads_qxfer_proper (struct buffer *buffer)
753 {
754   struct inferior_list_entry *thread;
755
756   buffer_grow_str (buffer, "<threads>\n");
757
758   for (thread = all_threads.head; thread; thread = thread->next)
759     {
760       ptid_t ptid = thread_to_gdb_id ((struct thread_info *)thread);
761       char ptid_s[100];
762       int core = -1;
763       char core_s[21];
764
765       write_ptid (ptid_s, ptid);
766
767       if (the_target->core_of_thread)
768         core = (*the_target->core_of_thread) (ptid);
769
770       if (core != -1)
771         {
772           sprintf (core_s, "%d", core);
773           buffer_xml_printf (buffer, "<thread id=\"%s\" core=\"%s\"/>\n",
774                              ptid_s, core_s);
775         }
776       else
777         {
778           buffer_xml_printf (buffer, "<thread id=\"%s\"/>\n",
779                              ptid_s);
780         }
781     }
782
783   buffer_grow_str0 (buffer, "</threads>\n");
784 }
785
786 static int
787 handle_threads_qxfer (const char *annex,
788                       unsigned char *readbuf,
789                       CORE_ADDR offset, int length)
790 {
791   static char *result = 0;
792   static unsigned int result_length = 0;
793
794   if (annex && strcmp (annex, "") != 0)
795     return 0;
796
797   if (offset == 0)
798     {
799       struct buffer buffer;
800       /* When asked for data at offset 0, generate everything and store into
801          'result'.  Successive reads will be served off 'result'.  */
802       if (result)
803         free (result);
804
805       buffer_init (&buffer);
806
807       handle_threads_qxfer_proper (&buffer);
808
809       result = buffer_finish (&buffer);
810       result_length = strlen (result);
811       buffer_free (&buffer);
812     }
813
814   if (offset >= result_length)
815     {
816       /* We're out of data.  */
817       free (result);
818       result = NULL;
819       result_length = 0;
820       return 0;
821     }
822
823   if (length > result_length - offset)
824     length = result_length - offset;
825
826   memcpy (readbuf, result + offset, length);
827
828   return length;
829
830 }
831
832 /* Table used by the crc32 function to calcuate the checksum.  */
833
834 static unsigned int crc32_table[256] =
835 {0, 0};
836
837 /* Compute 32 bit CRC from inferior memory.
838
839    On success, return 32 bit CRC.
840    On failure, return (unsigned long long) -1.  */
841
842 static unsigned long long
843 crc32 (CORE_ADDR base, int len, unsigned int crc)
844 {
845   if (!crc32_table[1])
846     {
847       /* Initialize the CRC table and the decoding table.  */
848       int i, j;
849       unsigned int c;
850
851       for (i = 0; i < 256; i++)
852         {
853           for (c = i << 24, j = 8; j > 0; --j)
854             c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1);
855           crc32_table[i] = c;
856         }
857     }
858
859   while (len--)
860     {
861       unsigned char byte = 0;
862
863       /* Return failure if memory read fails.  */
864       if (read_inferior_memory (base, &byte, 1) != 0)
865         return (unsigned long long) -1;
866
867       crc = (crc << 8) ^ crc32_table[((crc >> 24) ^ byte) & 255];
868       base++;
869     }
870   return (unsigned long long) crc;
871 }
872
873 /* Handle all of the extended 'q' packets.  */
874 void
875 handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
876 {
877   static struct inferior_list_entry *thread_ptr;
878
879   /* Reply the current thread id.  */
880   if (strcmp ("qC", own_buf) == 0 && !disable_packet_qC)
881     {
882       ptid_t gdb_id;
883       require_running (own_buf);
884
885       if (!ptid_equal (general_thread, null_ptid)
886           && !ptid_equal (general_thread, minus_one_ptid))
887         gdb_id = general_thread;
888       else
889         {
890           thread_ptr = all_threads.head;
891           gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
892         }
893
894       sprintf (own_buf, "QC");
895       own_buf += 2;
896       own_buf = write_ptid (own_buf, gdb_id);
897       return;
898     }
899
900   if (strcmp ("qSymbol::", own_buf) == 0)
901     {
902       /* GDB is suggesting new symbols have been loaded.  This may
903          mean a new shared library has been detected as loaded, so
904          take the opportunity to check if breakpoints we think are
905          inserted, still are.  Note that it isn't guaranteed that
906          we'll see this when a shared library is loaded, and nor will
907          we see this for unloads (although breakpoints in unloaded
908          libraries shouldn't trigger), as GDB may not find symbols for
909          the library at all.  We also re-validate breakpoints when we
910          see a second GDB breakpoint for the same address, and or when
911          we access breakpoint shadows.  */
912       validate_breakpoints ();
913
914       if (target_running () && the_target->look_up_symbols != NULL)
915         (*the_target->look_up_symbols) ();
916
917       strcpy (own_buf, "OK");
918       return;
919     }
920
921   if (!disable_packet_qfThreadInfo)
922     {
923       if (strcmp ("qfThreadInfo", own_buf) == 0)
924         {
925           ptid_t gdb_id;
926
927           require_running (own_buf);
928           thread_ptr = all_threads.head;
929
930           *own_buf++ = 'm';
931           gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
932           write_ptid (own_buf, gdb_id);
933           thread_ptr = thread_ptr->next;
934           return;
935         }
936
937       if (strcmp ("qsThreadInfo", own_buf) == 0)
938         {
939           ptid_t gdb_id;
940
941           require_running (own_buf);
942           if (thread_ptr != NULL)
943             {
944               *own_buf++ = 'm';
945               gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
946               write_ptid (own_buf, gdb_id);
947               thread_ptr = thread_ptr->next;
948               return;
949             }
950           else
951             {
952               sprintf (own_buf, "l");
953               return;
954             }
955         }
956     }
957
958   if (the_target->read_offsets != NULL
959       && strcmp ("qOffsets", own_buf) == 0)
960     {
961       CORE_ADDR text, data;
962
963       require_running (own_buf);
964       if (the_target->read_offsets (&text, &data))
965         sprintf (own_buf, "Text=%lX;Data=%lX;Bss=%lX",
966                  (long)text, (long)data, (long)data);
967       else
968         write_enn (own_buf);
969
970       return;
971     }
972
973   if (the_target->qxfer_spu != NULL
974       && strncmp ("qXfer:spu:read:", own_buf, 15) == 0)
975     {
976       char *annex;
977       int n;
978       unsigned int len;
979       CORE_ADDR ofs;
980       unsigned char *spu_buf;
981
982       require_running (own_buf);
983       strcpy (own_buf, "E00");
984       if (decode_xfer_read (own_buf + 15, &annex, &ofs, &len) < 0)
985         return;
986       if (len > PBUFSIZ - 2)
987         len = PBUFSIZ - 2;
988       spu_buf = malloc (len + 1);
989       if (!spu_buf)
990         return;
991
992       n = (*the_target->qxfer_spu) (annex, spu_buf, NULL, ofs, len + 1);
993       if (n < 0)
994         write_enn (own_buf);
995       else if (n > len)
996         *new_packet_len_p = write_qxfer_response (own_buf, spu_buf, len, 1);
997       else
998         *new_packet_len_p = write_qxfer_response (own_buf, spu_buf, n, 0);
999
1000       free (spu_buf);
1001       return;
1002     }
1003
1004   if (the_target->qxfer_spu != NULL
1005       && strncmp ("qXfer:spu:write:", own_buf, 16) == 0)
1006     {
1007       char *annex;
1008       int n;
1009       unsigned int len;
1010       CORE_ADDR ofs;
1011       unsigned char *spu_buf;
1012
1013       require_running (own_buf);
1014       strcpy (own_buf, "E00");
1015       spu_buf = malloc (packet_len - 15);
1016       if (!spu_buf)
1017         return;
1018       if (decode_xfer_write (own_buf + 16, packet_len - 16, &annex,
1019                              &ofs, &len, spu_buf) < 0)
1020         {
1021           free (spu_buf);
1022           return;
1023         }
1024
1025       n = (*the_target->qxfer_spu)
1026         (annex, NULL, (unsigned const char *)spu_buf, ofs, len);
1027       if (n < 0)
1028         write_enn (own_buf);
1029       else
1030         sprintf (own_buf, "%x", n);
1031
1032       free (spu_buf);
1033       return;
1034     }
1035
1036   if (the_target->read_auxv != NULL
1037       && strncmp ("qXfer:auxv:read:", own_buf, 16) == 0)
1038     {
1039       unsigned char *data;
1040       int n;
1041       CORE_ADDR ofs;
1042       unsigned int len;
1043       char *annex;
1044
1045       require_running (own_buf);
1046
1047       /* Reject any annex; grab the offset and length.  */
1048       if (decode_xfer_read (own_buf + 16, &annex, &ofs, &len) < 0
1049           || annex[0] != '\0')
1050         {
1051           strcpy (own_buf, "E00");
1052           return;
1053         }
1054
1055       /* Read one extra byte, as an indicator of whether there is
1056          more.  */
1057       if (len > PBUFSIZ - 2)
1058         len = PBUFSIZ - 2;
1059       data = malloc (len + 1);
1060       if (data == NULL)
1061         {
1062           write_enn (own_buf);
1063           return;
1064         }
1065       n = (*the_target->read_auxv) (ofs, data, len + 1);
1066       if (n < 0)
1067         write_enn (own_buf);
1068       else if (n > len)
1069         *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
1070       else
1071         *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
1072
1073       free (data);
1074
1075       return;
1076     }
1077
1078   if (strncmp ("qXfer:features:read:", own_buf, 20) == 0)
1079     {
1080       CORE_ADDR ofs;
1081       unsigned int len, total_len;
1082       const char *document;
1083       char *annex;
1084
1085       require_running (own_buf);
1086
1087       /* Grab the annex, offset, and length.  */
1088       if (decode_xfer_read (own_buf + 20, &annex, &ofs, &len) < 0)
1089         {
1090           strcpy (own_buf, "E00");
1091           return;
1092         }
1093
1094       /* Now grab the correct annex.  */
1095       document = get_features_xml (annex);
1096       if (document == NULL)
1097         {
1098           strcpy (own_buf, "E00");
1099           return;
1100         }
1101
1102       total_len = strlen (document);
1103       if (len > PBUFSIZ - 2)
1104         len = PBUFSIZ - 2;
1105
1106       if (ofs > total_len)
1107         write_enn (own_buf);
1108       else if (len < total_len - ofs)
1109         *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
1110                                                   len, 1);
1111       else
1112         *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
1113                                                   total_len - ofs, 0);
1114
1115       return;
1116     }
1117
1118   if (strncmp ("qXfer:libraries:read:", own_buf, 21) == 0)
1119     {
1120       CORE_ADDR ofs;
1121       unsigned int len, total_len;
1122       char *document, *p;
1123       struct inferior_list_entry *dll_ptr;
1124       char *annex;
1125
1126       require_running (own_buf);
1127
1128       /* Reject any annex; grab the offset and length.  */
1129       if (decode_xfer_read (own_buf + 21, &annex, &ofs, &len) < 0
1130           || annex[0] != '\0')
1131         {
1132           strcpy (own_buf, "E00");
1133           return;
1134         }
1135
1136       /* Over-estimate the necessary memory.  Assume that every character
1137          in the library name must be escaped.  */
1138       total_len = 64;
1139       for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)
1140         total_len += 128 + 6 * strlen (((struct dll_info *) dll_ptr)->name);
1141
1142       document = malloc (total_len);
1143       if (document == NULL)
1144         {
1145           write_enn (own_buf);
1146           return;
1147         }
1148       strcpy (document, "<library-list>\n");
1149       p = document + strlen (document);
1150
1151       for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)
1152         {
1153           struct dll_info *dll = (struct dll_info *) dll_ptr;
1154           char *name;
1155
1156           strcpy (p, "  <library name=\"");
1157           p = p + strlen (p);
1158           name = xml_escape_text (dll->name);
1159           strcpy (p, name);
1160           free (name);
1161           p = p + strlen (p);
1162           strcpy (p, "\"><segment address=\"");
1163           p = p + strlen (p);
1164           sprintf (p, "0x%lx", (long) dll->base_addr);
1165           p = p + strlen (p);
1166           strcpy (p, "\"/></library>\n");
1167           p = p + strlen (p);
1168         }
1169
1170       strcpy (p, "</library-list>\n");
1171
1172       total_len = strlen (document);
1173       if (len > PBUFSIZ - 2)
1174         len = PBUFSIZ - 2;
1175
1176       if (ofs > total_len)
1177         write_enn (own_buf);
1178       else if (len < total_len - ofs)
1179         *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
1180                                                   len, 1);
1181       else
1182         *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
1183                                                   total_len - ofs, 0);
1184
1185       free (document);
1186       return;
1187     }
1188
1189   if (the_target->qxfer_osdata != NULL
1190       && strncmp ("qXfer:osdata:read:", own_buf, 18) == 0)
1191     {
1192       char *annex;
1193       int n;
1194       unsigned int len;
1195       CORE_ADDR ofs;
1196       unsigned char *workbuf;
1197
1198       strcpy (own_buf, "E00");
1199       if (decode_xfer_read (own_buf + 18, &annex, &ofs, &len) < 0)
1200         return;
1201       if (len > PBUFSIZ - 2)
1202         len = PBUFSIZ - 2;
1203       workbuf = malloc (len + 1);
1204       if (!workbuf)
1205         return;
1206
1207       n = (*the_target->qxfer_osdata) (annex, workbuf, NULL, ofs, len + 1);
1208       if (n < 0)
1209         write_enn (own_buf);
1210       else if (n > len)
1211         *new_packet_len_p = write_qxfer_response (own_buf, workbuf, len, 1);
1212       else
1213         *new_packet_len_p = write_qxfer_response (own_buf, workbuf, n, 0);
1214
1215       free (workbuf);
1216       return;
1217     }
1218
1219   if (the_target->qxfer_siginfo != NULL
1220       && strncmp ("qXfer:siginfo:read:", own_buf, 19) == 0)
1221     {
1222       unsigned char *data;
1223       int n;
1224       CORE_ADDR ofs;
1225       unsigned int len;
1226       char *annex;
1227
1228       require_running (own_buf);
1229
1230       /* Reject any annex; grab the offset and length.  */
1231       if (decode_xfer_read (own_buf + 19, &annex, &ofs, &len) < 0
1232           || annex[0] != '\0')
1233         {
1234           strcpy (own_buf, "E00");
1235           return;
1236         }
1237
1238       /* Read one extra byte, as an indicator of whether there is
1239          more.  */
1240       if (len > PBUFSIZ - 2)
1241         len = PBUFSIZ - 2;
1242       data = malloc (len + 1);
1243       if (!data)
1244         return;
1245       n = (*the_target->qxfer_siginfo) (annex, data, NULL, ofs, len + 1);
1246       if (n < 0)
1247         write_enn (own_buf);
1248       else if (n > len)
1249         *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
1250       else
1251         *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
1252
1253       free (data);
1254       return;
1255     }
1256
1257   if (the_target->qxfer_siginfo != NULL
1258       && strncmp ("qXfer:siginfo:write:", own_buf, 20) == 0)
1259     {
1260       char *annex;
1261       int n;
1262       unsigned int len;
1263       CORE_ADDR ofs;
1264       unsigned char *data;
1265
1266       require_running (own_buf);
1267
1268       strcpy (own_buf, "E00");
1269       data = malloc (packet_len - 19);
1270       if (!data)
1271         return;
1272       if (decode_xfer_write (own_buf + 20, packet_len - 20, &annex,
1273                              &ofs, &len, data) < 0)
1274         {
1275           free (data);
1276           return;
1277         }
1278
1279       n = (*the_target->qxfer_siginfo)
1280         (annex, NULL, (unsigned const char *)data, ofs, len);
1281       if (n < 0)
1282         write_enn (own_buf);
1283       else
1284         sprintf (own_buf, "%x", n);
1285
1286       free (data);
1287       return;
1288     }
1289
1290   if (strncmp ("qXfer:threads:read:", own_buf, 19) == 0)
1291     {
1292       unsigned char *data;
1293       int n;
1294       CORE_ADDR ofs;
1295       unsigned int len;
1296       char *annex;
1297
1298       require_running (own_buf);
1299
1300       /* Reject any annex; grab the offset and length.  */
1301       if (decode_xfer_read (own_buf + 19, &annex, &ofs, &len) < 0
1302           || annex[0] != '\0')
1303         {
1304           strcpy (own_buf, "E00");
1305           return;
1306         }
1307
1308       /* Read one extra byte, as an indicator of whether there is
1309          more.  */
1310       if (len > PBUFSIZ - 2)
1311         len = PBUFSIZ - 2;
1312       data = malloc (len + 1);
1313       if (!data)
1314         return;
1315       n = handle_threads_qxfer (annex, data, ofs, len + 1);
1316       if (n < 0)
1317         write_enn (own_buf);
1318       else if (n > len)
1319         *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
1320       else
1321         *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
1322
1323       free (data);
1324       return;
1325     }
1326
1327   /* Protocol features query.  */
1328   if (strncmp ("qSupported", own_buf, 10) == 0
1329       && (own_buf[10] == ':' || own_buf[10] == '\0'))
1330     {
1331       char *p = &own_buf[10];
1332
1333       /* Start processing qSupported packet.  */
1334       target_process_qsupported (NULL);
1335
1336       /* Process each feature being provided by GDB.  The first
1337          feature will follow a ':', and latter features will follow
1338          ';'.  */
1339       if (*p == ':')
1340         for (p = strtok (p + 1, ";");
1341              p != NULL;
1342              p = strtok (NULL, ";"))
1343           {
1344             if (strcmp (p, "multiprocess+") == 0)
1345               {
1346                 /* GDB supports and wants multi-process support if
1347                    possible.  */
1348                 if (target_supports_multi_process ())
1349                   multi_process = 1;
1350               }
1351             else
1352               target_process_qsupported (p);
1353           }
1354
1355       sprintf (own_buf, "PacketSize=%x;QPassSignals+", PBUFSIZ - 1);
1356
1357       /* We do not have any hook to indicate whether the target backend
1358          supports qXfer:libraries:read, so always report it.  */
1359       strcat (own_buf, ";qXfer:libraries:read+");
1360
1361       if (the_target->read_auxv != NULL)
1362         strcat (own_buf, ";qXfer:auxv:read+");
1363
1364       if (the_target->qxfer_spu != NULL)
1365         strcat (own_buf, ";qXfer:spu:read+;qXfer:spu:write+");
1366
1367       if (the_target->qxfer_siginfo != NULL)
1368         strcat (own_buf, ";qXfer:siginfo:read+;qXfer:siginfo:write+");
1369
1370       /* We always report qXfer:features:read, as targets may
1371          install XML files on a subsequent call to arch_setup.
1372          If we reported to GDB on startup that we don't support
1373          qXfer:feature:read at all, we will never be re-queried.  */
1374       strcat (own_buf, ";qXfer:features:read+");
1375
1376       if (transport_is_reliable)
1377         strcat (own_buf, ";QStartNoAckMode+");
1378
1379       if (the_target->qxfer_osdata != NULL)
1380         strcat (own_buf, ";qXfer:osdata:read+");
1381
1382       if (target_supports_multi_process ())
1383         strcat (own_buf, ";multiprocess+");
1384
1385       if (target_supports_non_stop ())
1386         strcat (own_buf, ";QNonStop+");
1387
1388       strcat (own_buf, ";qXfer:threads:read+");
1389
1390       if (target_supports_tracepoints ())
1391         {
1392           strcat (own_buf, ";ConditionalTracepoints+");
1393           strcat (own_buf, ";TraceStateVariables+");
1394           strcat (own_buf, ";TracepointSource+");
1395         }
1396
1397       return;
1398     }
1399
1400   /* Thread-local storage support.  */
1401   if (the_target->get_tls_address != NULL
1402       && strncmp ("qGetTLSAddr:", own_buf, 12) == 0)
1403     {
1404       char *p = own_buf + 12;
1405       CORE_ADDR parts[2], address = 0;
1406       int i, err;
1407       ptid_t ptid = null_ptid;
1408
1409       require_running (own_buf);
1410
1411       for (i = 0; i < 3; i++)
1412         {
1413           char *p2;
1414           int len;
1415
1416           if (p == NULL)
1417             break;
1418
1419           p2 = strchr (p, ',');
1420           if (p2)
1421             {
1422               len = p2 - p;
1423               p2++;
1424             }
1425           else
1426             {
1427               len = strlen (p);
1428               p2 = NULL;
1429             }
1430
1431           if (i == 0)
1432             ptid = read_ptid (p, NULL);
1433           else
1434             decode_address (&parts[i - 1], p, len);
1435           p = p2;
1436         }
1437
1438       if (p != NULL || i < 3)
1439         err = 1;
1440       else
1441         {
1442           struct thread_info *thread = find_thread_ptid (ptid);
1443
1444           if (thread == NULL)
1445             err = 2;
1446           else
1447             err = the_target->get_tls_address (thread, parts[0], parts[1],
1448                                                &address);
1449         }
1450
1451       if (err == 0)
1452         {
1453           sprintf (own_buf, "%llx", address);
1454           return;
1455         }
1456       else if (err > 0)
1457         {
1458           write_enn (own_buf);
1459           return;
1460         }
1461
1462       /* Otherwise, pretend we do not understand this packet.  */
1463     }
1464
1465   /* Handle "monitor" commands.  */
1466   if (strncmp ("qRcmd,", own_buf, 6) == 0)
1467     {
1468       char *mon = malloc (PBUFSIZ);
1469       int len = strlen (own_buf + 6);
1470
1471       if (mon == NULL)
1472         {
1473           write_enn (own_buf);
1474           return;
1475         }
1476
1477       if ((len % 2) != 0 || unhexify (mon, own_buf + 6, len / 2) != len / 2)
1478         {
1479           write_enn (own_buf);
1480           free (mon);
1481           return;
1482         }
1483       mon[len / 2] = '\0';
1484
1485       write_ok (own_buf);
1486
1487       if (the_target->handle_monitor_command == NULL
1488           || (*the_target->handle_monitor_command) (mon) == 0)
1489         /* Default processing.  */
1490         handle_monitor_command (mon);
1491
1492       free (mon);
1493       return;
1494     }
1495
1496   if (strncmp ("qSearch:memory:", own_buf, sizeof ("qSearch:memory:") - 1) == 0)
1497     {
1498       require_running (own_buf);
1499       handle_search_memory (own_buf, packet_len);
1500       return;
1501     }
1502
1503   if (strcmp (own_buf, "qAttached") == 0
1504       || strncmp (own_buf, "qAttached:", sizeof ("qAttached:") - 1) == 0)
1505     {
1506       struct process_info *process;
1507
1508       if (own_buf[sizeof ("qAttached") - 1])
1509         {
1510           int pid = strtoul (own_buf + sizeof ("qAttached:") - 1, NULL, 16);
1511           process = (struct process_info *)
1512             find_inferior_id (&all_processes, pid_to_ptid (pid));
1513         }
1514       else
1515         {
1516           require_running (own_buf);
1517           process = current_process ();
1518         }
1519
1520       if (process == NULL)
1521         {
1522           write_enn (own_buf);
1523           return;
1524         }
1525
1526       strcpy (own_buf, process->attached ? "1" : "0");
1527       return;
1528     }
1529
1530   if (strncmp ("qCRC:", own_buf, 5) == 0)
1531     {
1532       /* CRC check (compare-section).  */
1533       char *comma;
1534       CORE_ADDR base;
1535       int len;
1536       unsigned long long crc;
1537
1538       require_running (own_buf);
1539       base = strtoul (own_buf + 5, &comma, 16);
1540       if (*comma++ != ',')
1541         {
1542           write_enn (own_buf);
1543           return;
1544         }
1545       len = strtoul (comma, NULL, 16);
1546       crc = crc32 (base, len, 0xffffffff);
1547       /* Check for memory failure.  */
1548       if (crc == (unsigned long long) -1)
1549         {
1550           write_enn (own_buf);
1551           return;
1552         }
1553       sprintf (own_buf, "C%lx", (unsigned long) crc);
1554       return;
1555     }
1556
1557   if (target_supports_tracepoints () && handle_tracepoint_query (own_buf))
1558     return;
1559
1560   /* Otherwise we didn't know what packet it was.  Say we didn't
1561      understand it.  */
1562   own_buf[0] = 0;
1563 }
1564
1565 /* Parse vCont packets.  */
1566 void
1567 handle_v_cont (char *own_buf)
1568 {
1569   char *p, *q;
1570   int n = 0, i = 0;
1571   struct thread_resume *resume_info;
1572   struct thread_resume default_action = {{0}};
1573
1574   /* Count the number of semicolons in the packet.  There should be one
1575      for every action.  */
1576   p = &own_buf[5];
1577   while (p)
1578     {
1579       n++;
1580       p++;
1581       p = strchr (p, ';');
1582     }
1583
1584   resume_info = malloc (n * sizeof (resume_info[0]));
1585   if (resume_info == NULL)
1586     goto err;
1587
1588   p = &own_buf[5];
1589   while (*p)
1590     {
1591       p++;
1592
1593       if (p[0] == 's' || p[0] == 'S')
1594         resume_info[i].kind = resume_step;
1595       else if (p[0] == 'c' || p[0] == 'C')
1596         resume_info[i].kind = resume_continue;
1597       else if (p[0] == 't')
1598         resume_info[i].kind = resume_stop;
1599       else
1600         goto err;
1601
1602       if (p[0] == 'S' || p[0] == 'C')
1603         {
1604           int sig;
1605           sig = strtol (p + 1, &q, 16);
1606           if (p == q)
1607             goto err;
1608           p = q;
1609
1610           if (!target_signal_to_host_p (sig))
1611             goto err;
1612           resume_info[i].sig = target_signal_to_host (sig);
1613         }
1614       else
1615         {
1616           resume_info[i].sig = 0;
1617           p = p + 1;
1618         }
1619
1620       if (p[0] == 0)
1621         {
1622           resume_info[i].thread = minus_one_ptid;
1623           default_action = resume_info[i];
1624
1625           /* Note: we don't increment i here, we'll overwrite this entry
1626              the next time through.  */
1627         }
1628       else if (p[0] == ':')
1629         {
1630           ptid_t ptid = read_ptid (p + 1, &q);
1631
1632           if (p == q)
1633             goto err;
1634           p = q;
1635           if (p[0] != ';' && p[0] != 0)
1636             goto err;
1637
1638           resume_info[i].thread = ptid;
1639
1640           i++;
1641         }
1642     }
1643
1644   if (i < n)
1645     resume_info[i] = default_action;
1646
1647   /* Still used in occasional places in the backend.  */
1648   if (n == 1
1649       && !ptid_equal (resume_info[0].thread, minus_one_ptid)
1650       && resume_info[0].kind != resume_stop)
1651     cont_thread = resume_info[0].thread;
1652   else
1653     cont_thread = minus_one_ptid;
1654   set_desired_inferior (0);
1655
1656   if (!non_stop)
1657     enable_async_io ();
1658
1659   (*the_target->resume) (resume_info, n);
1660
1661   free (resume_info);
1662
1663   if (non_stop)
1664     write_ok (own_buf);
1665   else
1666     {
1667       last_ptid = mywait (minus_one_ptid, &last_status, 0, 1);
1668       prepare_resume_reply (own_buf, last_ptid, &last_status);
1669       disable_async_io ();
1670     }
1671   return;
1672
1673 err:
1674   write_enn (own_buf);
1675   free (resume_info);
1676   return;
1677 }
1678
1679 /* Attach to a new program.  Return 1 if successful, 0 if failure.  */
1680 int
1681 handle_v_attach (char *own_buf)
1682 {
1683   int pid;
1684
1685   pid = strtol (own_buf + 8, NULL, 16);
1686   if (pid != 0 && attach_inferior (pid) == 0)
1687     {
1688       /* Don't report shared library events after attaching, even if
1689          some libraries are preloaded.  GDB will always poll the
1690          library list.  Avoids the "stopped by shared library event"
1691          notice on the GDB side.  */
1692       dlls_changed = 0;
1693
1694       if (non_stop)
1695         {
1696           /* In non-stop, we don't send a resume reply.  Stop events
1697              will follow up using the normal notification
1698              mechanism.  */
1699           write_ok (own_buf);
1700         }
1701       else
1702         prepare_resume_reply (own_buf, last_ptid, &last_status);
1703
1704       return 1;
1705     }
1706   else
1707     {
1708       write_enn (own_buf);
1709       return 0;
1710     }
1711 }
1712
1713 /* Run a new program.  Return 1 if successful, 0 if failure.  */
1714 static int
1715 handle_v_run (char *own_buf)
1716 {
1717   char *p, *next_p, **new_argv;
1718   int i, new_argc;
1719
1720   new_argc = 0;
1721   for (p = own_buf + strlen ("vRun;"); p && *p; p = strchr (p, ';'))
1722     {
1723       p++;
1724       new_argc++;
1725     }
1726
1727   new_argv = calloc (new_argc + 2, sizeof (char *));
1728   if (new_argv == NULL)
1729     {
1730       write_enn (own_buf);
1731       return 0;
1732     }
1733
1734   i = 0;
1735   for (p = own_buf + strlen ("vRun;"); *p; p = next_p)
1736     {
1737       next_p = strchr (p, ';');
1738       if (next_p == NULL)
1739         next_p = p + strlen (p);
1740
1741       if (i == 0 && p == next_p)
1742         new_argv[i] = NULL;
1743       else
1744         {
1745           /* FIXME: Fail request if out of memory instead of dying.  */
1746           new_argv[i] = xmalloc (1 + (next_p - p) / 2);
1747           unhexify (new_argv[i], p, (next_p - p) / 2);
1748           new_argv[i][(next_p - p) / 2] = '\0';
1749         }
1750
1751       if (*next_p)
1752         next_p++;
1753       i++;
1754     }
1755   new_argv[i] = NULL;
1756
1757   if (new_argv[0] == NULL)
1758     {
1759       /* GDB didn't specify a program to run.  Use the program from the
1760          last run with the new argument list.  */
1761
1762       if (program_argv == NULL)
1763         {
1764           /* FIXME: new_argv memory leak */
1765           write_enn (own_buf);
1766           return 0;
1767         }
1768
1769       new_argv[0] = strdup (program_argv[0]);
1770       if (new_argv[0] == NULL)
1771         {
1772           /* FIXME: new_argv memory leak */
1773           write_enn (own_buf);
1774           return 0;
1775         }
1776     }
1777
1778   /* Free the old argv and install the new one.  */
1779   freeargv (program_argv);
1780   program_argv = new_argv;
1781
1782   start_inferior (program_argv);
1783   if (last_status.kind == TARGET_WAITKIND_STOPPED)
1784     {
1785       prepare_resume_reply (own_buf, last_ptid, &last_status);
1786
1787       /* In non-stop, sending a resume reply doesn't set the general
1788          thread, but GDB assumes a vRun sets it (this is so GDB can
1789          query which is the main thread of the new inferior.  */
1790       if (non_stop)
1791         general_thread = last_ptid;
1792
1793       return 1;
1794     }
1795   else
1796     {
1797       write_enn (own_buf);
1798       return 0;
1799     }
1800 }
1801
1802 /* Kill process.  Return 1 if successful, 0 if failure.  */
1803 int
1804 handle_v_kill (char *own_buf)
1805 {
1806   int pid;
1807   char *p = &own_buf[6];
1808   if (multi_process)
1809     pid = strtol (p, NULL, 16);
1810   else
1811     pid = signal_pid;
1812   if (pid != 0 && kill_inferior (pid) == 0)
1813     {
1814       last_status.kind = TARGET_WAITKIND_SIGNALLED;
1815       last_status.value.sig = TARGET_SIGNAL_KILL;
1816       last_ptid = pid_to_ptid (pid);
1817       discard_queued_stop_replies (pid);
1818       write_ok (own_buf);
1819       return 1;
1820     }
1821   else
1822     {
1823       write_enn (own_buf);
1824       return 0;
1825     }
1826 }
1827
1828 /* Handle a 'vStopped' packet.  */
1829 static void
1830 handle_v_stopped (char *own_buf)
1831 {
1832   /* If we're waiting for GDB to acknowledge a pending stop reply,
1833      consider that done.  */
1834   if (notif_queue)
1835     {
1836       struct vstop_notif *head;
1837
1838       if (remote_debug)
1839         fprintf (stderr, "vStopped: acking %s\n",
1840                  target_pid_to_str (notif_queue->ptid));
1841
1842       head = notif_queue;
1843       notif_queue = notif_queue->next;
1844       free (head);
1845     }
1846
1847   /* Push another stop reply, or if there are no more left, an OK.  */
1848   send_next_stop_reply (own_buf);
1849 }
1850
1851 /* Handle all of the extended 'v' packets.  */
1852 void
1853 handle_v_requests (char *own_buf, int packet_len, int *new_packet_len)
1854 {
1855   if (!disable_packet_vCont)
1856     {
1857       if (strncmp (own_buf, "vCont;", 6) == 0)
1858         {
1859           require_running (own_buf);
1860           handle_v_cont (own_buf);
1861           return;
1862         }
1863
1864       if (strncmp (own_buf, "vCont?", 6) == 0)
1865         {
1866           strcpy (own_buf, "vCont;c;C;s;S;t");
1867           return;
1868         }
1869     }
1870
1871   if (strncmp (own_buf, "vFile:", 6) == 0
1872       && handle_vFile (own_buf, packet_len, new_packet_len))
1873     return;
1874
1875   if (strncmp (own_buf, "vAttach;", 8) == 0)
1876     {
1877       if (!multi_process && target_running ())
1878         {
1879           fprintf (stderr, "Already debugging a process\n");
1880           write_enn (own_buf);
1881           return;
1882         }
1883       handle_v_attach (own_buf);
1884       return;
1885     }
1886
1887   if (strncmp (own_buf, "vRun;", 5) == 0)
1888     {
1889       if (!multi_process && target_running ())
1890         {
1891           fprintf (stderr, "Already debugging a process\n");
1892           write_enn (own_buf);
1893           return;
1894         }
1895       handle_v_run (own_buf);
1896       return;
1897     }
1898
1899   if (strncmp (own_buf, "vKill;", 6) == 0)
1900     {
1901       if (!target_running ())
1902         {
1903           fprintf (stderr, "No process to kill\n");
1904           write_enn (own_buf);
1905           return;
1906         }
1907       handle_v_kill (own_buf);
1908       return;
1909     }
1910
1911   if (strncmp (own_buf, "vStopped", 8) == 0)
1912     {
1913       handle_v_stopped (own_buf);
1914       return;
1915     }
1916
1917   /* Otherwise we didn't know what packet it was.  Say we didn't
1918      understand it.  */
1919   own_buf[0] = 0;
1920   return;
1921 }
1922
1923 /* Resume inferior and wait for another event.  In non-stop mode,
1924    don't really wait here, but return immediatelly to the event
1925    loop.  */
1926 void
1927 myresume (char *own_buf, int step, int sig)
1928 {
1929   struct thread_resume resume_info[2];
1930   int n = 0;
1931   int valid_cont_thread;
1932
1933   set_desired_inferior (0);
1934
1935   valid_cont_thread = (!ptid_equal (cont_thread, null_ptid)
1936                          && !ptid_equal (cont_thread, minus_one_ptid));
1937
1938   if (step || sig || valid_cont_thread)
1939     {
1940       resume_info[0].thread
1941         = ((struct inferior_list_entry *) current_inferior)->id;
1942       if (step)
1943         resume_info[0].kind = resume_step;
1944       else
1945         resume_info[0].kind = resume_continue;
1946       resume_info[0].sig = sig;
1947       n++;
1948     }
1949
1950   if (!valid_cont_thread)
1951     {
1952       resume_info[n].thread = minus_one_ptid;
1953       resume_info[n].kind = resume_continue;
1954       resume_info[n].sig = 0;
1955       n++;
1956     }
1957
1958   if (!non_stop)
1959     enable_async_io ();
1960
1961   (*the_target->resume) (resume_info, n);
1962
1963   if (non_stop)
1964     write_ok (own_buf);
1965   else
1966     {
1967       last_ptid = mywait (minus_one_ptid, &last_status, 0, 1);
1968       prepare_resume_reply (own_buf, last_ptid, &last_status);
1969       disable_async_io ();
1970     }
1971 }
1972
1973 /* Callback for for_each_inferior.  Make a new stop reply for each
1974    stopped thread.  */
1975
1976 static int
1977 queue_stop_reply_callback (struct inferior_list_entry *entry, void *arg)
1978 {
1979   int pid = * (int *) arg;
1980
1981   if (pid == -1
1982       || ptid_get_pid (entry->id) == pid)
1983     {
1984       struct target_waitstatus status;
1985
1986       status.kind = TARGET_WAITKIND_STOPPED;
1987       status.value.sig = TARGET_SIGNAL_TRAP;
1988
1989       /* Pass the last stop reply back to GDB, but don't notify.  */
1990       queue_stop_reply (entry->id, &status);
1991     }
1992
1993   return 0;
1994 }
1995
1996 /* Status handler for the '?' packet.  */
1997
1998 static void
1999 handle_status (char *own_buf)
2000 {
2001   struct target_waitstatus status;
2002   status.kind = TARGET_WAITKIND_STOPPED;
2003   status.value.sig = TARGET_SIGNAL_TRAP;
2004
2005   /* In non-stop mode, we must send a stop reply for each stopped
2006      thread.  In all-stop mode, just send one for the first stopped
2007      thread we find.  */
2008
2009   if (non_stop)
2010     {
2011       int pid = -1;
2012       discard_queued_stop_replies (pid);
2013       find_inferior (&all_threads, queue_stop_reply_callback, &pid);
2014
2015       /* The first is sent immediatly.  OK is sent if there is no
2016          stopped thread, which is the same handling of the vStopped
2017          packet (by design).  */
2018       send_next_stop_reply (own_buf);
2019     }
2020   else
2021     {
2022       if (all_threads.head)
2023         prepare_resume_reply (own_buf,
2024                               all_threads.head->id, &status);
2025       else
2026         strcpy (own_buf, "W00");
2027     }
2028 }
2029
2030 static void
2031 gdbserver_version (void)
2032 {
2033   printf ("GNU gdbserver %s%s\n"
2034           "Copyright (C) 2010 Free Software Foundation, Inc.\n"
2035           "gdbserver is free software, covered by the GNU General Public License.\n"
2036           "This gdbserver was configured as \"%s\"\n",
2037           PKGVERSION, version, host_name);
2038 }
2039
2040 static void
2041 gdbserver_usage (FILE *stream)
2042 {
2043   fprintf (stream, "Usage:\tgdbserver [OPTIONS] COMM PROG [ARGS ...]\n"
2044            "\tgdbserver [OPTIONS] --attach COMM PID\n"
2045            "\tgdbserver [OPTIONS] --multi COMM\n"
2046            "\n"
2047            "COMM may either be a tty device (for serial debugging), or \n"
2048            "HOST:PORT to listen for a TCP connection.\n"
2049            "\n"
2050            "Options:\n"
2051            "  --debug               Enable general debugging output.\n"
2052            "  --remote-debug        Enable remote protocol debugging output.\n"
2053            "  --version             Display version information and exit.\n"
2054            "  --wrapper WRAPPER --  Run WRAPPER to start new programs.\n");
2055   if (REPORT_BUGS_TO[0] && stream == stdout)
2056     fprintf (stream, "Report bugs to \"%s\".\n", REPORT_BUGS_TO);
2057 }
2058
2059 static void
2060 gdbserver_show_disableable (FILE *stream)
2061 {
2062   fprintf (stream, "Disableable packets:\n"
2063            "  vCont       \tAll vCont packets\n"
2064            "  qC          \tQuerying the current thread\n"
2065            "  qfThreadInfo\tThread listing\n"
2066            "  Tthread     \tPassing the thread specifier in the T stop reply packet\n"
2067            "  threads     \tAll of the above\n");
2068 }
2069
2070
2071 #undef require_running
2072 #define require_running(BUF)                    \
2073   if (!target_running ())                       \
2074     {                                           \
2075       write_enn (BUF);                          \
2076       break;                                    \
2077     }
2078
2079 static int
2080 first_thread_of (struct inferior_list_entry *entry, void *args)
2081 {
2082   int pid = * (int *) args;
2083
2084   if (ptid_get_pid (entry->id) == pid)
2085     return 1;
2086
2087   return 0;
2088 }
2089
2090 static void
2091 kill_inferior_callback (struct inferior_list_entry *entry)
2092 {
2093   struct process_info *process = (struct process_info *) entry;
2094   int pid = ptid_get_pid (process->head.id);
2095
2096   kill_inferior (pid);
2097   discard_queued_stop_replies (pid);
2098 }
2099
2100 /* Callback for for_each_inferior to detach or kill the inferior,
2101    depending on whether we attached to it or not.
2102    We inform the user whether we're detaching or killing the process
2103    as this is only called when gdbserver is about to exit.  */
2104
2105 static void
2106 detach_or_kill_inferior_callback (struct inferior_list_entry *entry)
2107 {
2108   struct process_info *process = (struct process_info *) entry;
2109   int pid = ptid_get_pid (process->head.id);
2110
2111   if (process->attached)
2112     detach_inferior (pid);
2113   else
2114     kill_inferior (pid);
2115
2116   discard_queued_stop_replies (pid);
2117 }
2118
2119 /* for_each_inferior callback for detach_or_kill_for_exit to print
2120    the pids of started inferiors.  */
2121
2122 static void
2123 print_started_pid (struct inferior_list_entry *entry)
2124 {
2125   struct process_info *process = (struct process_info *) entry;
2126
2127   if (! process->attached)
2128     {
2129       int pid = ptid_get_pid (process->head.id);
2130       fprintf (stderr, " %d", pid);
2131     }
2132 }
2133
2134 /* for_each_inferior callback for detach_or_kill_for_exit to print
2135    the pids of attached inferiors.  */
2136
2137 static void
2138 print_attached_pid (struct inferior_list_entry *entry)
2139 {
2140   struct process_info *process = (struct process_info *) entry;
2141
2142   if (process->attached)
2143     {
2144       int pid = ptid_get_pid (process->head.id);
2145       fprintf (stderr, " %d", pid);
2146     }
2147 }
2148
2149 /* Call this when exiting gdbserver with possible inferiors that need
2150    to be killed or detached from.  */
2151
2152 static void
2153 detach_or_kill_for_exit (void)
2154 {
2155   /* First print a list of the inferiors we will be killing/detaching.
2156      This is to assist the user, for example, in case the inferior unexpectedly
2157      dies after we exit: did we screw up or did the inferior exit on its own?
2158      Having this info will save some head-scratching.  */
2159
2160   if (have_started_inferiors_p ())
2161     {
2162       fprintf (stderr, "Killing process(es):");
2163       for_each_inferior (&all_processes, print_started_pid);
2164       fprintf (stderr, "\n");
2165     }
2166   if (have_attached_inferiors_p ())
2167     {
2168       fprintf (stderr, "Detaching process(es):");
2169       for_each_inferior (&all_processes, print_attached_pid);
2170       fprintf (stderr, "\n");
2171     }
2172
2173   /* Now we can kill or detach the inferiors.  */
2174
2175   for_each_inferior (&all_processes, detach_or_kill_inferior_callback);
2176 }
2177
2178 static void
2179 join_inferiors_callback (struct inferior_list_entry *entry)
2180 {
2181   struct process_info *process = (struct process_info *) entry;
2182
2183   /* If we are attached, then we can exit.  Otherwise, we need to hang
2184      around doing nothing, until the child is gone.  */
2185   if (!process->attached)
2186     join_inferior (ptid_get_pid (process->head.id));
2187 }
2188
2189 int
2190 main (int argc, char *argv[])
2191 {
2192   int bad_attach;
2193   int pid;
2194   char *arg_end, *port;
2195   char **next_arg = &argv[1];
2196   int multi_mode = 0;
2197   int attach = 0;
2198   int was_running;
2199
2200   while (*next_arg != NULL && **next_arg == '-')
2201     {
2202       if (strcmp (*next_arg, "--version") == 0)
2203         {
2204           gdbserver_version ();
2205           exit (0);
2206         }
2207       else if (strcmp (*next_arg, "--help") == 0)
2208         {
2209           gdbserver_usage (stdout);
2210           exit (0);
2211         }
2212       else if (strcmp (*next_arg, "--attach") == 0)
2213         attach = 1;
2214       else if (strcmp (*next_arg, "--multi") == 0)
2215         multi_mode = 1;
2216       else if (strcmp (*next_arg, "--wrapper") == 0)
2217         {
2218           next_arg++;
2219
2220           wrapper_argv = next_arg;
2221           while (*next_arg != NULL && strcmp (*next_arg, "--") != 0)
2222             next_arg++;
2223
2224           if (next_arg == wrapper_argv || *next_arg == NULL)
2225             {
2226               gdbserver_usage (stderr);
2227               exit (1);
2228             }
2229
2230           /* Consume the "--".  */
2231           *next_arg = NULL;
2232         }
2233       else if (strcmp (*next_arg, "--debug") == 0)
2234         debug_threads = 1;
2235       else if (strcmp (*next_arg, "--remote-debug") == 0)
2236         remote_debug = 1;
2237       else if (strcmp (*next_arg, "--disable-packet") == 0)
2238         {
2239           gdbserver_show_disableable (stdout);
2240           exit (0);
2241         }
2242       else if (strncmp (*next_arg,
2243                         "--disable-packet=",
2244                         sizeof ("--disable-packet=") - 1) == 0)
2245         {
2246           char *packets, *tok;
2247
2248           packets = *next_arg += sizeof ("--disable-packet=") - 1;
2249           for (tok = strtok (packets, ",");
2250                tok != NULL;
2251                tok = strtok (NULL, ","))
2252             {
2253               if (strcmp ("vCont", tok) == 0)
2254                 disable_packet_vCont = 1;
2255               else if (strcmp ("Tthread", tok) == 0)
2256                 disable_packet_Tthread = 1;
2257               else if (strcmp ("qC", tok) == 0)
2258                 disable_packet_qC = 1;
2259               else if (strcmp ("qfThreadInfo", tok) == 0)
2260                 disable_packet_qfThreadInfo = 1;
2261               else if (strcmp ("threads", tok) == 0)
2262                 {
2263                   disable_packet_vCont = 1;
2264                   disable_packet_Tthread = 1;
2265                   disable_packet_qC = 1;
2266                   disable_packet_qfThreadInfo = 1;
2267                 }
2268               else
2269                 {
2270                   fprintf (stderr, "Don't know how to disable \"%s\".\n\n",
2271                            tok);
2272                   gdbserver_show_disableable (stderr);
2273                   exit (1);
2274                 }
2275             }
2276         }
2277       else
2278         {
2279           fprintf (stderr, "Unknown argument: %s\n", *next_arg);
2280           exit (1);
2281         }
2282
2283       next_arg++;
2284       continue;
2285     }
2286
2287   if (setjmp (toplevel))
2288     {
2289       fprintf (stderr, "Exiting\n");
2290       exit (1);
2291     }
2292
2293   port = *next_arg;
2294   next_arg++;
2295   if (port == NULL || (!attach && !multi_mode && *next_arg == NULL))
2296     {
2297       gdbserver_usage (stderr);
2298       exit (1);
2299     }
2300
2301   bad_attach = 0;
2302   pid = 0;
2303
2304   /* --attach used to come after PORT, so allow it there for
2305        compatibility.  */
2306   if (*next_arg != NULL && strcmp (*next_arg, "--attach") == 0)
2307     {
2308       attach = 1;
2309       next_arg++;
2310     }
2311
2312   if (attach
2313       && (*next_arg == NULL
2314           || (*next_arg)[0] == '\0'
2315           || (pid = strtoul (*next_arg, &arg_end, 0)) == 0
2316           || *arg_end != '\0'
2317           || next_arg[1] != NULL))
2318     bad_attach = 1;
2319
2320   if (bad_attach)
2321     {
2322       gdbserver_usage (stderr);
2323       exit (1);
2324     }
2325
2326   initialize_inferiors ();
2327   initialize_async_io ();
2328   initialize_low ();
2329   if (target_supports_tracepoints ())
2330     initialize_tracepoint ();
2331
2332   own_buf = xmalloc (PBUFSIZ + 1);
2333   mem_buf = xmalloc (PBUFSIZ);
2334
2335   if (pid == 0 && *next_arg != NULL)
2336     {
2337       int i, n;
2338
2339       n = argc - (next_arg - argv);
2340       program_argv = xmalloc (sizeof (char *) * (n + 1));
2341       for (i = 0; i < n; i++)
2342         program_argv[i] = xstrdup (next_arg[i]);
2343       program_argv[i] = NULL;
2344
2345       /* Wait till we are at first instruction in program.  */
2346       start_inferior (program_argv);
2347
2348       /* We are now (hopefully) stopped at the first instruction of
2349          the target process.  This assumes that the target process was
2350          successfully created.  */
2351     }
2352   else if (pid != 0)
2353     {
2354       if (attach_inferior (pid) == -1)
2355         error ("Attaching not supported on this target");
2356
2357       /* Otherwise succeeded.  */
2358     }
2359   else
2360     {
2361       last_status.kind = TARGET_WAITKIND_EXITED;
2362       last_status.value.integer = 0;
2363       last_ptid = minus_one_ptid;
2364     }
2365
2366   /* Don't report shared library events on the initial connection,
2367      even if some libraries are preloaded.  Avoids the "stopped by
2368      shared library event" notice on gdb side.  */
2369   dlls_changed = 0;
2370
2371   if (setjmp (toplevel))
2372     {
2373       detach_or_kill_for_exit ();
2374       exit (1);
2375     }
2376
2377   if (last_status.kind == TARGET_WAITKIND_EXITED
2378       || last_status.kind == TARGET_WAITKIND_SIGNALLED)
2379     was_running = 0;
2380   else
2381     was_running = 1;
2382
2383   if (!was_running && !multi_mode)
2384     {
2385       fprintf (stderr, "No program to debug.  GDBserver exiting.\n");
2386       exit (1);
2387     }
2388
2389   while (1)
2390     {
2391       noack_mode = 0;
2392       multi_process = 0;
2393       non_stop = 0;
2394
2395       remote_open (port);
2396
2397       if (setjmp (toplevel) != 0)
2398         {
2399           /* An error occurred.  */
2400           if (response_needed)
2401             {
2402               write_enn (own_buf);
2403               putpkt (own_buf);
2404             }
2405         }
2406
2407       /* Wait for events.  This will return when all event sources are
2408          removed from the event loop. */
2409       start_event_loop ();
2410
2411       /* If an exit was requested (using the "monitor exit" command),
2412          terminate now.  The only other way to get here is for
2413          getpkt to fail; close the connection and reopen it at the
2414          top of the loop.  */
2415
2416       if (exit_requested)
2417         {
2418           detach_or_kill_for_exit ();
2419           exit (0);
2420         }
2421       else
2422         fprintf (stderr, "Remote side has terminated connection.  "
2423                  "GDBserver will reopen the connection.\n");
2424     }
2425 }
2426
2427 /* Event loop callback that handles a serial event.  The first byte in
2428    the serial buffer gets us here.  We expect characters to arrive at
2429    a brisk pace, so we read the rest of the packet with a blocking
2430    getpkt call.  */
2431
2432 static void
2433 process_serial_event (void)
2434 {
2435   char ch;
2436   int i = 0;
2437   int signal;
2438   unsigned int len;
2439   CORE_ADDR mem_addr;
2440   int pid;
2441   unsigned char sig;
2442   int packet_len;
2443   int new_packet_len = -1;
2444
2445   /* Used to decide when gdbserver should exit in
2446      multi-mode/remote.  */
2447   static int have_ran = 0;
2448
2449   if (!have_ran)
2450     have_ran = target_running ();
2451
2452   disable_async_io ();
2453
2454   response_needed = 0;
2455   packet_len = getpkt (own_buf);
2456   if (packet_len <= 0)
2457     {
2458       target_async (0);
2459       remote_close ();
2460       return;
2461     }
2462   response_needed = 1;
2463
2464   i = 0;
2465   ch = own_buf[i++];
2466   switch (ch)
2467     {
2468     case 'q':
2469       handle_query (own_buf, packet_len, &new_packet_len);
2470       break;
2471     case 'Q':
2472       handle_general_set (own_buf);
2473       break;
2474     case 'D':
2475       require_running (own_buf);
2476
2477       if (multi_process)
2478         {
2479           i++; /* skip ';' */
2480           pid = strtol (&own_buf[i], NULL, 16);
2481         }
2482       else
2483         pid =
2484           ptid_get_pid (((struct inferior_list_entry *) current_inferior)->id);
2485
2486       fprintf (stderr, "Detaching from process %d\n", pid);
2487       if (detach_inferior (pid) != 0)
2488         write_enn (own_buf);
2489       else
2490         {
2491           discard_queued_stop_replies (pid);
2492           write_ok (own_buf);
2493
2494           if (extended_protocol)
2495             {
2496               /* Treat this like a normal program exit.  */
2497               last_status.kind = TARGET_WAITKIND_EXITED;
2498               last_status.value.integer = 0;
2499               last_ptid = pid_to_ptid (pid);
2500
2501               current_inferior = NULL;
2502             }
2503           else
2504             {
2505               putpkt (own_buf);
2506               remote_close ();
2507
2508               /* If we are attached, then we can exit.  Otherwise, we
2509                  need to hang around doing nothing, until the child is
2510                  gone.  */
2511               for_each_inferior (&all_processes,
2512                                  join_inferiors_callback);
2513               exit (0);
2514             }
2515         }
2516       break;
2517     case '!':
2518       extended_protocol = 1;
2519       write_ok (own_buf);
2520       break;
2521     case '?':
2522       handle_status (own_buf);
2523       break;
2524     case 'H':
2525       if (own_buf[1] == 'c' || own_buf[1] == 'g' || own_buf[1] == 's')
2526         {
2527           ptid_t gdb_id, thread_id;
2528           int pid;
2529
2530           require_running (own_buf);
2531
2532           gdb_id = read_ptid (&own_buf[2], NULL);
2533
2534           pid = ptid_get_pid (gdb_id);
2535
2536           if (ptid_equal (gdb_id, null_ptid)
2537               || ptid_equal (gdb_id, minus_one_ptid))
2538             thread_id = null_ptid;
2539           else if (pid != 0
2540                    && ptid_equal (pid_to_ptid (pid),
2541                                   gdb_id))
2542             {
2543               struct thread_info *thread =
2544                 (struct thread_info *) find_inferior (&all_threads,
2545                                                       first_thread_of,
2546                                                       &pid);
2547               if (!thread)
2548                 {
2549                   write_enn (own_buf);
2550                   break;
2551                 }
2552
2553               thread_id = ((struct inferior_list_entry *)thread)->id;
2554             }
2555           else
2556             {
2557               thread_id = gdb_id_to_thread_id (gdb_id);
2558               if (ptid_equal (thread_id, null_ptid))
2559                 {
2560                   write_enn (own_buf);
2561                   break;
2562                 }
2563             }
2564
2565           if (own_buf[1] == 'g')
2566             {
2567               if (ptid_equal (thread_id, null_ptid))
2568                 {
2569                   /* GDB is telling us to choose any thread.  Check if
2570                      the currently selected thread is still valid. If
2571                      it is not, select the first available.  */
2572                   struct thread_info *thread =
2573                     (struct thread_info *) find_inferior_id (&all_threads,
2574                                                              general_thread);
2575                   if (thread == NULL)
2576                     thread_id = all_threads.head->id;
2577                 }
2578
2579               general_thread = thread_id;
2580               set_desired_inferior (1);
2581             }
2582           else if (own_buf[1] == 'c')
2583             cont_thread = thread_id;
2584           else if (own_buf[1] == 's')
2585             step_thread = thread_id;
2586
2587           write_ok (own_buf);
2588         }
2589       else
2590         {
2591           /* Silently ignore it so that gdb can extend the protocol
2592              without compatibility headaches.  */
2593           own_buf[0] = '\0';
2594         }
2595       break;
2596     case 'g':
2597       require_running (own_buf);
2598       if (current_traceframe >= 0)
2599         {
2600           struct regcache *regcache = new_register_cache ();
2601
2602           if (fetch_traceframe_registers (current_traceframe,
2603                                           regcache, -1) == 0)
2604             registers_to_string (regcache, own_buf);
2605           else
2606             write_enn (own_buf);
2607           free_register_cache (regcache);
2608         }
2609       else
2610         {
2611           struct regcache *regcache;
2612
2613           set_desired_inferior (1);
2614           regcache = get_thread_regcache (current_inferior, 1);
2615           registers_to_string (regcache, own_buf);
2616         }
2617       break;
2618     case 'G':
2619       require_running (own_buf);
2620       if (current_traceframe >= 0)
2621         write_enn (own_buf);
2622       else
2623         {
2624           struct regcache *regcache;
2625
2626           set_desired_inferior (1);
2627           regcache = get_thread_regcache (current_inferior, 1);
2628           registers_from_string (regcache, &own_buf[1]);
2629           write_ok (own_buf);
2630         }
2631       break;
2632     case 'm':
2633       require_running (own_buf);
2634       decode_m_packet (&own_buf[1], &mem_addr, &len);
2635       if (read_memory (mem_addr, mem_buf, len) == 0)
2636         convert_int_to_ascii (mem_buf, own_buf, len);
2637       else
2638         write_enn (own_buf);
2639       break;
2640     case 'M':
2641       require_running (own_buf);
2642       decode_M_packet (&own_buf[1], &mem_addr, &len, mem_buf);
2643       if (write_memory (mem_addr, mem_buf, len) == 0)
2644         write_ok (own_buf);
2645       else
2646         write_enn (own_buf);
2647       break;
2648     case 'X':
2649       require_running (own_buf);
2650       if (decode_X_packet (&own_buf[1], packet_len - 1,
2651                            &mem_addr, &len, mem_buf) < 0
2652           || write_memory (mem_addr, mem_buf, len) != 0)
2653         write_enn (own_buf);
2654       else
2655         write_ok (own_buf);
2656       break;
2657     case 'C':
2658       require_running (own_buf);
2659       convert_ascii_to_int (own_buf + 1, &sig, 1);
2660       if (target_signal_to_host_p (sig))
2661         signal = target_signal_to_host (sig);
2662       else
2663         signal = 0;
2664       myresume (own_buf, 0, signal);
2665       break;
2666     case 'S':
2667       require_running (own_buf);
2668       convert_ascii_to_int (own_buf + 1, &sig, 1);
2669       if (target_signal_to_host_p (sig))
2670         signal = target_signal_to_host (sig);
2671       else
2672         signal = 0;
2673       myresume (own_buf, 1, signal);
2674       break;
2675     case 'c':
2676       require_running (own_buf);
2677       signal = 0;
2678       myresume (own_buf, 0, signal);
2679       break;
2680     case 's':
2681       require_running (own_buf);
2682       signal = 0;
2683       myresume (own_buf, 1, signal);
2684       break;
2685     case 'Z':  /* insert_ ... */
2686       /* Fallthrough.  */
2687     case 'z':  /* remove_ ... */
2688       {
2689         char *lenptr;
2690         char *dataptr;
2691         CORE_ADDR addr = strtoul (&own_buf[3], &lenptr, 16);
2692         int len = strtol (lenptr + 1, &dataptr, 16);
2693         char type = own_buf[1];
2694         int res;
2695         const int insert = ch == 'Z';
2696
2697         /* Default to unrecognized/unsupported.  */
2698         res = 1;
2699         switch (type)
2700           {
2701           case '0': /* software-breakpoint */
2702           case '1': /* hardware-breakpoint */
2703           case '2': /* write watchpoint */
2704           case '3': /* read watchpoint */
2705           case '4': /* access watchpoint */
2706             require_running (own_buf);
2707             if (insert && the_target->insert_point != NULL)
2708               res = (*the_target->insert_point) (type, addr, len);
2709             else if (!insert && the_target->remove_point != NULL)
2710               res = (*the_target->remove_point) (type, addr, len);
2711             break;
2712           default:
2713             break;
2714           }
2715
2716         if (res == 0)
2717           write_ok (own_buf);
2718         else if (res == 1)
2719           /* Unsupported.  */
2720           own_buf[0] = '\0';
2721         else
2722           write_enn (own_buf);
2723         break;
2724       }
2725     case 'k':
2726       response_needed = 0;
2727       if (!target_running ())
2728         /* The packet we received doesn't make sense - but we can't
2729            reply to it, either.  */
2730         return;
2731
2732       fprintf (stderr, "Killing all inferiors\n");
2733       for_each_inferior (&all_processes, kill_inferior_callback);
2734
2735       /* When using the extended protocol, we wait with no program
2736          running.  The traditional protocol will exit instead.  */
2737       if (extended_protocol)
2738         {
2739           last_status.kind = TARGET_WAITKIND_EXITED;
2740           last_status.value.sig = TARGET_SIGNAL_KILL;
2741           return;
2742         }
2743       else
2744         {
2745           exit (0);
2746           break;
2747         }
2748     case 'T':
2749       {
2750         ptid_t gdb_id, thread_id;
2751
2752         require_running (own_buf);
2753
2754         gdb_id = read_ptid (&own_buf[1], NULL);
2755         thread_id = gdb_id_to_thread_id (gdb_id);
2756         if (ptid_equal (thread_id, null_ptid))
2757           {
2758             write_enn (own_buf);
2759             break;
2760           }
2761
2762         if (mythread_alive (thread_id))
2763           write_ok (own_buf);
2764         else
2765           write_enn (own_buf);
2766       }
2767       break;
2768     case 'R':
2769       response_needed = 0;
2770
2771       /* Restarting the inferior is only supported in the extended
2772          protocol.  */
2773       if (extended_protocol)
2774         {
2775           if (target_running ())
2776             for_each_inferior (&all_processes,
2777                                kill_inferior_callback);
2778           fprintf (stderr, "GDBserver restarting\n");
2779
2780           /* Wait till we are at 1st instruction in prog.  */
2781           if (program_argv != NULL)
2782             start_inferior (program_argv);
2783           else
2784             {
2785               last_status.kind = TARGET_WAITKIND_EXITED;
2786               last_status.value.sig = TARGET_SIGNAL_KILL;
2787             }
2788           return;
2789         }
2790       else
2791         {
2792           /* It is a request we don't understand.  Respond with an
2793              empty packet so that gdb knows that we don't support this
2794              request.  */
2795           own_buf[0] = '\0';
2796           break;
2797         }
2798     case 'v':
2799       /* Extended (long) request.  */
2800       handle_v_requests (own_buf, packet_len, &new_packet_len);
2801       break;
2802
2803     default:
2804       /* It is a request we don't understand.  Respond with an empty
2805          packet so that gdb knows that we don't support this
2806          request.  */
2807       own_buf[0] = '\0';
2808       break;
2809     }
2810
2811   if (new_packet_len != -1)
2812     putpkt_binary (own_buf, new_packet_len);
2813   else
2814     putpkt (own_buf);
2815
2816   response_needed = 0;
2817
2818   if (!extended_protocol && have_ran && !target_running ())
2819     {
2820       /* In non-stop, defer exiting until GDB had a chance to query
2821          the whole vStopped list (until it gets an OK).  */
2822       if (!notif_queue)
2823         {
2824           fprintf (stderr, "GDBserver exiting\n");
2825           remote_close ();
2826           exit (0);
2827         }
2828     }
2829 }
2830
2831 /* Event-loop callback for serial events.  */
2832
2833 void
2834 handle_serial_event (int err, gdb_client_data client_data)
2835 {
2836   if (debug_threads)
2837     fprintf (stderr, "handling possible serial event\n");
2838
2839   /* Really handle it.  */
2840   process_serial_event ();
2841
2842   /* Be sure to not change the selected inferior behind GDB's back.
2843      Important in the non-stop mode asynchronous protocol.  */
2844   set_desired_inferior (1);
2845 }
2846
2847 /* Event-loop callback for target events.  */
2848
2849 void
2850 handle_target_event (int err, gdb_client_data client_data)
2851 {
2852   if (debug_threads)
2853     fprintf (stderr, "handling possible target event\n");
2854
2855   last_ptid = mywait (minus_one_ptid, &last_status,
2856                       TARGET_WNOHANG, 1);
2857
2858   if (last_status.kind != TARGET_WAITKIND_IGNORE)
2859     {
2860       /* Something interesting.  Tell GDB about it.  */
2861       push_event (last_ptid, &last_status);
2862     }
2863
2864   /* Be sure to not change the selected inferior behind GDB's back.
2865      Important in the non-stop mode asynchronous protocol.  */
2866   set_desired_inferior (1);
2867 }