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