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