* server.c (process_serial_event): Add support for Z0 and Z1 packet.
[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 if (strcmp (p, "multiprocess+") == 0)
1078 {
1079 /* GDB supports and wants multi-process support if
1080 possible. */
1081 if (target_supports_multi_process ())
1082 multi_process = 1;
1083 }
1084 }
1085
1086 sprintf (own_buf, "PacketSize=%x;QPassSignals+", PBUFSIZ - 1);
1087
1088 /* We do not have any hook to indicate whether the target backend
1089 supports qXfer:libraries:read, so always report it. */
1090 strcat (own_buf, ";qXfer:libraries:read+");
1091
1092 if (the_target->read_auxv != NULL)
1093 strcat (own_buf, ";qXfer:auxv:read+");
1094
1095 if (the_target->qxfer_spu != NULL)
1096 strcat (own_buf, ";qXfer:spu:read+;qXfer:spu:write+");
1097
1098 if (the_target->qxfer_siginfo != NULL)
1099 strcat (own_buf, ";qXfer:siginfo:read+;qXfer:siginfo:write+");
1100
1101 /* We always report qXfer:features:read, as targets may
1102 install XML files on a subsequent call to arch_setup.
1103 If we reported to GDB on startup that we don't support
1104 qXfer:feature:read at all, we will never be re-queried. */
1105 strcat (own_buf, ";qXfer:features:read+");
1106
1107 if (transport_is_reliable)
1108 strcat (own_buf, ";QStartNoAckMode+");
1109
1110 if (the_target->qxfer_osdata != NULL)
1111 strcat (own_buf, ";qXfer:osdata:read+");
1112
1113 if (target_supports_multi_process ())
1114 strcat (own_buf, ";multiprocess+");
1115
1116 if (target_supports_non_stop ())
1117 strcat (own_buf, ";QNonStop+");
1118
1119 return;
1120 }
1121
1122 /* Thread-local storage support. */
1123 if (the_target->get_tls_address != NULL
1124 && strncmp ("qGetTLSAddr:", own_buf, 12) == 0)
1125 {
1126 char *p = own_buf + 12;
1127 CORE_ADDR parts[2], address = 0;
1128 int i, err;
1129 ptid_t ptid = null_ptid;
1130
1131 require_running (own_buf);
1132
1133 for (i = 0; i < 3; i++)
1134 {
1135 char *p2;
1136 int len;
1137
1138 if (p == NULL)
1139 break;
1140
1141 p2 = strchr (p, ',');
1142 if (p2)
1143 {
1144 len = p2 - p;
1145 p2++;
1146 }
1147 else
1148 {
1149 len = strlen (p);
1150 p2 = NULL;
1151 }
1152
1153 if (i == 0)
1154 ptid = read_ptid (p, NULL);
1155 else
1156 decode_address (&parts[i - 1], p, len);
1157 p = p2;
1158 }
1159
1160 if (p != NULL || i < 3)
1161 err = 1;
1162 else
1163 {
1164 struct thread_info *thread = find_thread_ptid (ptid);
1165
1166 if (thread == NULL)
1167 err = 2;
1168 else
1169 err = the_target->get_tls_address (thread, parts[0], parts[1],
1170 &address);
1171 }
1172
1173 if (err == 0)
1174 {
1175 sprintf (own_buf, "%llx", address);
1176 return;
1177 }
1178 else if (err > 0)
1179 {
1180 write_enn (own_buf);
1181 return;
1182 }
1183
1184 /* Otherwise, pretend we do not understand this packet. */
1185 }
1186
1187 /* Handle "monitor" commands. */
1188 if (strncmp ("qRcmd,", own_buf, 6) == 0)
1189 {
1190 char *mon = malloc (PBUFSIZ);
1191 int len = strlen (own_buf + 6);
1192
1193 if (mon == NULL)
1194 {
1195 write_enn (own_buf);
1196 return;
1197 }
1198
1199 if ((len % 2) != 0 || unhexify (mon, own_buf + 6, len / 2) != len / 2)
1200 {
1201 write_enn (own_buf);
1202 free (mon);
1203 return;
1204 }
1205 mon[len / 2] = '\0';
1206
1207 write_ok (own_buf);
1208
1209 if (strcmp (mon, "set debug 1") == 0)
1210 {
1211 debug_threads = 1;
1212 monitor_output ("Debug output enabled.\n");
1213 }
1214 else if (strcmp (mon, "set debug 0") == 0)
1215 {
1216 debug_threads = 0;
1217 monitor_output ("Debug output disabled.\n");
1218 }
1219 else if (strcmp (mon, "set remote-debug 1") == 0)
1220 {
1221 remote_debug = 1;
1222 monitor_output ("Protocol debug output enabled.\n");
1223 }
1224 else if (strcmp (mon, "set remote-debug 0") == 0)
1225 {
1226 remote_debug = 0;
1227 monitor_output ("Protocol debug output disabled.\n");
1228 }
1229 else if (strcmp (mon, "help") == 0)
1230 monitor_show_help ();
1231 else if (strcmp (mon, "exit") == 0)
1232 exit_requested = 1;
1233 else
1234 {
1235 monitor_output ("Unknown monitor command.\n\n");
1236 monitor_show_help ();
1237 write_enn (own_buf);
1238 }
1239
1240 free (mon);
1241 return;
1242 }
1243
1244 if (strncmp ("qSearch:memory:", own_buf, sizeof ("qSearch:memory:") - 1) == 0)
1245 {
1246 require_running (own_buf);
1247 handle_search_memory (own_buf, packet_len);
1248 return;
1249 }
1250
1251 if (strcmp (own_buf, "qAttached") == 0
1252 || strncmp (own_buf, "qAttached:", sizeof ("qAttached:") - 1) == 0)
1253 {
1254 struct process_info *process;
1255
1256 if (own_buf[sizeof ("qAttached") - 1])
1257 {
1258 int pid = strtoul (own_buf + sizeof ("qAttached:") - 1, NULL, 16);
1259 process = (struct process_info *)
1260 find_inferior_id (&all_processes, pid_to_ptid (pid));
1261 }
1262 else
1263 {
1264 require_running (own_buf);
1265 process = current_process ();
1266 }
1267
1268 if (process == NULL)
1269 {
1270 write_enn (own_buf);
1271 return;
1272 }
1273
1274 strcpy (own_buf, process->attached ? "1" : "0");
1275 return;
1276 }
1277
1278 /* Otherwise we didn't know what packet it was. Say we didn't
1279 understand it. */
1280 own_buf[0] = 0;
1281 }
1282
1283 /* Parse vCont packets. */
1284 void
1285 handle_v_cont (char *own_buf)
1286 {
1287 char *p, *q;
1288 int n = 0, i = 0;
1289 struct thread_resume *resume_info;
1290 struct thread_resume default_action = {{0}};
1291
1292 /* Count the number of semicolons in the packet. There should be one
1293 for every action. */
1294 p = &own_buf[5];
1295 while (p)
1296 {
1297 n++;
1298 p++;
1299 p = strchr (p, ';');
1300 }
1301
1302 resume_info = malloc (n * sizeof (resume_info[0]));
1303 if (resume_info == NULL)
1304 goto err;
1305
1306 p = &own_buf[5];
1307 while (*p)
1308 {
1309 p++;
1310
1311 if (p[0] == 's' || p[0] == 'S')
1312 resume_info[i].kind = resume_step;
1313 else if (p[0] == 'c' || p[0] == 'C')
1314 resume_info[i].kind = resume_continue;
1315 else if (p[0] == 't')
1316 resume_info[i].kind = resume_stop;
1317 else
1318 goto err;
1319
1320 if (p[0] == 'S' || p[0] == 'C')
1321 {
1322 int sig;
1323 sig = strtol (p + 1, &q, 16);
1324 if (p == q)
1325 goto err;
1326 p = q;
1327
1328 if (!target_signal_to_host_p (sig))
1329 goto err;
1330 resume_info[i].sig = target_signal_to_host (sig);
1331 }
1332 else
1333 {
1334 resume_info[i].sig = 0;
1335 p = p + 1;
1336 }
1337
1338 if (p[0] == 0)
1339 {
1340 resume_info[i].thread = minus_one_ptid;
1341 default_action = resume_info[i];
1342
1343 /* Note: we don't increment i here, we'll overwrite this entry
1344 the next time through. */
1345 }
1346 else if (p[0] == ':')
1347 {
1348 ptid_t ptid = read_ptid (p + 1, &q);
1349
1350 if (p == q)
1351 goto err;
1352 p = q;
1353 if (p[0] != ';' && p[0] != 0)
1354 goto err;
1355
1356 resume_info[i].thread = ptid;
1357
1358 i++;
1359 }
1360 }
1361
1362 if (i < n)
1363 resume_info[i] = default_action;
1364
1365 /* Still used in occasional places in the backend. */
1366 if (n == 1
1367 && !ptid_equal (resume_info[0].thread, minus_one_ptid)
1368 && resume_info[0].kind != resume_stop)
1369 cont_thread = resume_info[0].thread;
1370 else
1371 cont_thread = minus_one_ptid;
1372 set_desired_inferior (0);
1373
1374 if (!non_stop)
1375 enable_async_io ();
1376
1377 (*the_target->resume) (resume_info, n);
1378
1379 free (resume_info);
1380
1381 if (non_stop)
1382 write_ok (own_buf);
1383 else
1384 {
1385 last_ptid = mywait (minus_one_ptid, &last_status, 0, 1);
1386 prepare_resume_reply (own_buf, last_ptid, &last_status);
1387 disable_async_io ();
1388 }
1389 return;
1390
1391 err:
1392 write_enn (own_buf);
1393 free (resume_info);
1394 return;
1395 }
1396
1397 /* Attach to a new program. Return 1 if successful, 0 if failure. */
1398 int
1399 handle_v_attach (char *own_buf)
1400 {
1401 int pid;
1402
1403 pid = strtol (own_buf + 8, NULL, 16);
1404 if (pid != 0 && attach_inferior (pid) == 0)
1405 {
1406 /* Don't report shared library events after attaching, even if
1407 some libraries are preloaded. GDB will always poll the
1408 library list. Avoids the "stopped by shared library event"
1409 notice on the GDB side. */
1410 dlls_changed = 0;
1411
1412 if (non_stop)
1413 {
1414 /* In non-stop, we don't send a resume reply. Stop events
1415 will follow up using the normal notification
1416 mechanism. */
1417 write_ok (own_buf);
1418 }
1419 else
1420 prepare_resume_reply (own_buf, last_ptid, &last_status);
1421
1422 return 1;
1423 }
1424 else
1425 {
1426 write_enn (own_buf);
1427 return 0;
1428 }
1429 }
1430
1431 /* Run a new program. Return 1 if successful, 0 if failure. */
1432 static int
1433 handle_v_run (char *own_buf)
1434 {
1435 char *p, *next_p, **new_argv;
1436 int i, new_argc;
1437
1438 new_argc = 0;
1439 for (p = own_buf + strlen ("vRun;"); p && *p; p = strchr (p, ';'))
1440 {
1441 p++;
1442 new_argc++;
1443 }
1444
1445 new_argv = calloc (new_argc + 2, sizeof (char *));
1446 if (new_argv == NULL)
1447 {
1448 write_enn (own_buf);
1449 return 0;
1450 }
1451
1452 i = 0;
1453 for (p = own_buf + strlen ("vRun;"); *p; p = next_p)
1454 {
1455 next_p = strchr (p, ';');
1456 if (next_p == NULL)
1457 next_p = p + strlen (p);
1458
1459 if (i == 0 && p == next_p)
1460 new_argv[i] = NULL;
1461 else
1462 {
1463 /* FIXME: Fail request if out of memory instead of dying. */
1464 new_argv[i] = xmalloc (1 + (next_p - p) / 2);
1465 unhexify (new_argv[i], p, (next_p - p) / 2);
1466 new_argv[i][(next_p - p) / 2] = '\0';
1467 }
1468
1469 if (*next_p)
1470 next_p++;
1471 i++;
1472 }
1473 new_argv[i] = NULL;
1474
1475 if (new_argv[0] == NULL)
1476 {
1477 /* GDB didn't specify a program to run. Use the program from the
1478 last run with the new argument list. */
1479
1480 if (program_argv == NULL)
1481 {
1482 /* FIXME: new_argv memory leak */
1483 write_enn (own_buf);
1484 return 0;
1485 }
1486
1487 new_argv[0] = strdup (program_argv[0]);
1488 if (new_argv[0] == NULL)
1489 {
1490 /* FIXME: new_argv memory leak */
1491 write_enn (own_buf);
1492 return 0;
1493 }
1494 }
1495
1496 /* Free the old argv and install the new one. */
1497 freeargv (program_argv);
1498 program_argv = new_argv;
1499
1500 start_inferior (program_argv);
1501 if (last_status.kind == TARGET_WAITKIND_STOPPED)
1502 {
1503 prepare_resume_reply (own_buf, last_ptid, &last_status);
1504
1505 /* In non-stop, sending a resume reply doesn't set the general
1506 thread, but GDB assumes a vRun sets it (this is so GDB can
1507 query which is the main thread of the new inferior. */
1508 if (non_stop)
1509 general_thread = last_ptid;
1510
1511 return 1;
1512 }
1513 else
1514 {
1515 write_enn (own_buf);
1516 return 0;
1517 }
1518 }
1519
1520 /* Kill process. Return 1 if successful, 0 if failure. */
1521 int
1522 handle_v_kill (char *own_buf)
1523 {
1524 int pid;
1525 char *p = &own_buf[6];
1526
1527 pid = strtol (p, NULL, 16);
1528 if (pid != 0 && kill_inferior (pid) == 0)
1529 {
1530 last_status.kind = TARGET_WAITKIND_SIGNALLED;
1531 last_status.value.sig = TARGET_SIGNAL_KILL;
1532 last_ptid = pid_to_ptid (pid);
1533 discard_queued_stop_replies (pid);
1534 write_ok (own_buf);
1535 return 1;
1536 }
1537 else
1538 {
1539 write_enn (own_buf);
1540 return 0;
1541 }
1542 }
1543
1544 /* Handle a 'vStopped' packet. */
1545 static void
1546 handle_v_stopped (char *own_buf)
1547 {
1548 /* If we're waiting for GDB to acknowledge a pending stop reply,
1549 consider that done. */
1550 if (notif_queue)
1551 {
1552 struct vstop_notif *head;
1553
1554 if (remote_debug)
1555 fprintf (stderr, "vStopped: acking %s\n",
1556 target_pid_to_str (notif_queue->ptid));
1557
1558 head = notif_queue;
1559 notif_queue = notif_queue->next;
1560 free (head);
1561 }
1562
1563 /* Push another stop reply, or if there are no more left, an OK. */
1564 send_next_stop_reply (own_buf);
1565 }
1566
1567 /* Handle all of the extended 'v' packets. */
1568 void
1569 handle_v_requests (char *own_buf, int packet_len, int *new_packet_len)
1570 {
1571 if (!disable_packet_vCont)
1572 {
1573 if (strncmp (own_buf, "vCont;", 6) == 0)
1574 {
1575 require_running (own_buf);
1576 handle_v_cont (own_buf);
1577 return;
1578 }
1579
1580 if (strncmp (own_buf, "vCont?", 6) == 0)
1581 {
1582 strcpy (own_buf, "vCont;c;C;s;S;t");
1583 return;
1584 }
1585 }
1586
1587 if (strncmp (own_buf, "vFile:", 6) == 0
1588 && handle_vFile (own_buf, packet_len, new_packet_len))
1589 return;
1590
1591 if (strncmp (own_buf, "vAttach;", 8) == 0)
1592 {
1593 if (!multi_process && target_running ())
1594 {
1595 fprintf (stderr, "Already debugging a process\n");
1596 write_enn (own_buf);
1597 return;
1598 }
1599 handle_v_attach (own_buf);
1600 return;
1601 }
1602
1603 if (strncmp (own_buf, "vRun;", 5) == 0)
1604 {
1605 if (!multi_process && target_running ())
1606 {
1607 fprintf (stderr, "Already debugging a process\n");
1608 write_enn (own_buf);
1609 return;
1610 }
1611 handle_v_run (own_buf);
1612 return;
1613 }
1614
1615 if (strncmp (own_buf, "vKill;", 6) == 0)
1616 {
1617 if (!target_running ())
1618 {
1619 fprintf (stderr, "No process to kill\n");
1620 write_enn (own_buf);
1621 return;
1622 }
1623 handle_v_kill (own_buf);
1624 return;
1625 }
1626
1627 if (strncmp (own_buf, "vStopped", 8) == 0)
1628 {
1629 handle_v_stopped (own_buf);
1630 return;
1631 }
1632
1633 /* Otherwise we didn't know what packet it was. Say we didn't
1634 understand it. */
1635 own_buf[0] = 0;
1636 return;
1637 }
1638
1639 /* Resume inferior and wait for another event. In non-stop mode,
1640 don't really wait here, but return immediatelly to the event
1641 loop. */
1642 void
1643 myresume (char *own_buf, int step, int sig)
1644 {
1645 struct thread_resume resume_info[2];
1646 int n = 0;
1647 int valid_cont_thread;
1648
1649 set_desired_inferior (0);
1650
1651 valid_cont_thread = (!ptid_equal (cont_thread, null_ptid)
1652 && !ptid_equal (cont_thread, minus_one_ptid));
1653
1654 if (step || sig || valid_cont_thread)
1655 {
1656 resume_info[0].thread
1657 = ((struct inferior_list_entry *) current_inferior)->id;
1658 if (step)
1659 resume_info[0].kind = resume_step;
1660 else
1661 resume_info[0].kind = resume_continue;
1662 resume_info[0].sig = sig;
1663 n++;
1664 }
1665
1666 if (!valid_cont_thread)
1667 {
1668 resume_info[n].thread = minus_one_ptid;
1669 resume_info[n].kind = resume_continue;
1670 resume_info[n].sig = 0;
1671 n++;
1672 }
1673
1674 if (!non_stop)
1675 enable_async_io ();
1676
1677 (*the_target->resume) (resume_info, n);
1678
1679 if (non_stop)
1680 write_ok (own_buf);
1681 else
1682 {
1683 last_ptid = mywait (minus_one_ptid, &last_status, 0, 1);
1684 prepare_resume_reply (own_buf, last_ptid, &last_status);
1685 disable_async_io ();
1686 }
1687 }
1688
1689 /* Callback for for_each_inferior. Make a new stop reply for each
1690 stopped thread. */
1691
1692 static int
1693 queue_stop_reply_callback (struct inferior_list_entry *entry, void *arg)
1694 {
1695 int pid = * (int *) arg;
1696
1697 if (pid == -1
1698 || ptid_get_pid (entry->id) == pid)
1699 {
1700 struct target_waitstatus status;
1701
1702 status.kind = TARGET_WAITKIND_STOPPED;
1703 status.value.sig = TARGET_SIGNAL_TRAP;
1704
1705 /* Pass the last stop reply back to GDB, but don't notify. */
1706 queue_stop_reply (entry->id, &status);
1707 }
1708
1709 return 0;
1710 }
1711
1712 /* Status handler for the '?' packet. */
1713
1714 static void
1715 handle_status (char *own_buf)
1716 {
1717 struct target_waitstatus status;
1718 status.kind = TARGET_WAITKIND_STOPPED;
1719 status.value.sig = TARGET_SIGNAL_TRAP;
1720
1721 /* In non-stop mode, we must send a stop reply for each stopped
1722 thread. In all-stop mode, just send one for the first stopped
1723 thread we find. */
1724
1725 if (non_stop)
1726 {
1727 int pid = -1;
1728 discard_queued_stop_replies (pid);
1729 find_inferior (&all_threads, queue_stop_reply_callback, &pid);
1730
1731 /* The first is sent immediatly. OK is sent if there is no
1732 stopped thread, which is the same handling of the vStopped
1733 packet (by design). */
1734 send_next_stop_reply (own_buf);
1735 }
1736 else
1737 {
1738 if (all_threads.head)
1739 prepare_resume_reply (own_buf,
1740 all_threads.head->id, &status);
1741 else
1742 strcpy (own_buf, "W00");
1743 }
1744 }
1745
1746 static void
1747 gdbserver_version (void)
1748 {
1749 printf ("GNU gdbserver %s%s\n"
1750 "Copyright (C) 2009 Free Software Foundation, Inc.\n"
1751 "gdbserver is free software, covered by the GNU General Public License.\n"
1752 "This gdbserver was configured as \"%s\"\n",
1753 PKGVERSION, version, host_name);
1754 }
1755
1756 static void
1757 gdbserver_usage (FILE *stream)
1758 {
1759 fprintf (stream, "Usage:\tgdbserver [OPTIONS] COMM PROG [ARGS ...]\n"
1760 "\tgdbserver [OPTIONS] --attach COMM PID\n"
1761 "\tgdbserver [OPTIONS] --multi COMM\n"
1762 "\n"
1763 "COMM may either be a tty device (for serial debugging), or \n"
1764 "HOST:PORT to listen for a TCP connection.\n"
1765 "\n"
1766 "Options:\n"
1767 " --debug Enable general debugging output.\n"
1768 " --remote-debug Enable remote protocol debugging output.\n"
1769 " --version Display version information and exit.\n"
1770 " --wrapper WRAPPER -- Run WRAPPER to start new programs.\n");
1771 if (REPORT_BUGS_TO[0] && stream == stdout)
1772 fprintf (stream, "Report bugs to \"%s\".\n", REPORT_BUGS_TO);
1773 }
1774
1775 static void
1776 gdbserver_show_disableable (FILE *stream)
1777 {
1778 fprintf (stream, "Disableable packets:\n"
1779 " vCont \tAll vCont packets\n"
1780 " qC \tQuerying the current thread\n"
1781 " qfThreadInfo\tThread listing\n"
1782 " Tthread \tPassing the thread specifier in the T stop reply packet\n"
1783 " threads \tAll of the above\n");
1784 }
1785
1786
1787 #undef require_running
1788 #define require_running(BUF) \
1789 if (!target_running ()) \
1790 { \
1791 write_enn (BUF); \
1792 break; \
1793 }
1794
1795 static int
1796 first_thread_of (struct inferior_list_entry *entry, void *args)
1797 {
1798 int pid = * (int *) args;
1799
1800 if (ptid_get_pid (entry->id) == pid)
1801 return 1;
1802
1803 return 0;
1804 }
1805
1806 static void
1807 kill_inferior_callback (struct inferior_list_entry *entry)
1808 {
1809 struct process_info *process = (struct process_info *) entry;
1810 int pid = ptid_get_pid (process->head.id);
1811
1812 kill_inferior (pid);
1813 discard_queued_stop_replies (pid);
1814 }
1815
1816 /* Callback for for_each_inferior to detach or kill the inferior,
1817 depending on whether we attached to it or not.
1818 We inform the user whether we're detaching or killing the process
1819 as this is only called when gdbserver is about to exit. */
1820
1821 static void
1822 detach_or_kill_inferior_callback (struct inferior_list_entry *entry)
1823 {
1824 struct process_info *process = (struct process_info *) entry;
1825 int pid = ptid_get_pid (process->head.id);
1826
1827 if (process->attached)
1828 detach_inferior (pid);
1829 else
1830 kill_inferior (pid);
1831
1832 discard_queued_stop_replies (pid);
1833 }
1834
1835 /* for_each_inferior callback for detach_or_kill_for_exit to print
1836 the pids of started inferiors. */
1837
1838 static void
1839 print_started_pid (struct inferior_list_entry *entry)
1840 {
1841 struct process_info *process = (struct process_info *) entry;
1842
1843 if (! process->attached)
1844 {
1845 int pid = ptid_get_pid (process->head.id);
1846 fprintf (stderr, " %d", pid);
1847 }
1848 }
1849
1850 /* for_each_inferior callback for detach_or_kill_for_exit to print
1851 the pids of attached inferiors. */
1852
1853 static void
1854 print_attached_pid (struct inferior_list_entry *entry)
1855 {
1856 struct process_info *process = (struct process_info *) entry;
1857
1858 if (process->attached)
1859 {
1860 int pid = ptid_get_pid (process->head.id);
1861 fprintf (stderr, " %d", pid);
1862 }
1863 }
1864
1865 /* Call this when exiting gdbserver with possible inferiors that need
1866 to be killed or detached from. */
1867
1868 static void
1869 detach_or_kill_for_exit (void)
1870 {
1871 /* First print a list of the inferiors we will be killing/detaching.
1872 This is to assist the user, for example, in case the inferior unexpectedly
1873 dies after we exit: did we screw up or did the inferior exit on its own?
1874 Having this info will save some head-scratching. */
1875
1876 if (have_started_inferiors_p ())
1877 {
1878 fprintf (stderr, "Killing process(es):");
1879 for_each_inferior (&all_processes, print_started_pid);
1880 fprintf (stderr, "\n");
1881 }
1882 if (have_attached_inferiors_p ())
1883 {
1884 fprintf (stderr, "Detaching process(es):");
1885 for_each_inferior (&all_processes, print_attached_pid);
1886 fprintf (stderr, "\n");
1887 }
1888
1889 /* Now we can kill or detach the inferiors. */
1890
1891 for_each_inferior (&all_processes, detach_or_kill_inferior_callback);
1892 }
1893
1894 static void
1895 join_inferiors_callback (struct inferior_list_entry *entry)
1896 {
1897 struct process_info *process = (struct process_info *) entry;
1898
1899 /* If we are attached, then we can exit. Otherwise, we need to hang
1900 around doing nothing, until the child is gone. */
1901 if (!process->attached)
1902 join_inferior (ptid_get_pid (process->head.id));
1903 }
1904
1905 int
1906 main (int argc, char *argv[])
1907 {
1908 int bad_attach;
1909 int pid;
1910 char *arg_end, *port;
1911 char **next_arg = &argv[1];
1912 int multi_mode = 0;
1913 int attach = 0;
1914 int was_running;
1915
1916 while (*next_arg != NULL && **next_arg == '-')
1917 {
1918 if (strcmp (*next_arg, "--version") == 0)
1919 {
1920 gdbserver_version ();
1921 exit (0);
1922 }
1923 else if (strcmp (*next_arg, "--help") == 0)
1924 {
1925 gdbserver_usage (stdout);
1926 exit (0);
1927 }
1928 else if (strcmp (*next_arg, "--attach") == 0)
1929 attach = 1;
1930 else if (strcmp (*next_arg, "--multi") == 0)
1931 multi_mode = 1;
1932 else if (strcmp (*next_arg, "--wrapper") == 0)
1933 {
1934 next_arg++;
1935
1936 wrapper_argv = next_arg;
1937 while (*next_arg != NULL && strcmp (*next_arg, "--") != 0)
1938 next_arg++;
1939
1940 if (next_arg == wrapper_argv || *next_arg == NULL)
1941 {
1942 gdbserver_usage (stderr);
1943 exit (1);
1944 }
1945
1946 /* Consume the "--". */
1947 *next_arg = NULL;
1948 }
1949 else if (strcmp (*next_arg, "--debug") == 0)
1950 debug_threads = 1;
1951 else if (strcmp (*next_arg, "--remote-debug") == 0)
1952 remote_debug = 1;
1953 else if (strcmp (*next_arg, "--disable-packet") == 0)
1954 {
1955 gdbserver_show_disableable (stdout);
1956 exit (0);
1957 }
1958 else if (strncmp (*next_arg,
1959 "--disable-packet=",
1960 sizeof ("--disable-packet=") - 1) == 0)
1961 {
1962 char *packets, *tok;
1963
1964 packets = *next_arg += sizeof ("--disable-packet=") - 1;
1965 for (tok = strtok (packets, ",");
1966 tok != NULL;
1967 tok = strtok (NULL, ","))
1968 {
1969 if (strcmp ("vCont", tok) == 0)
1970 disable_packet_vCont = 1;
1971 else if (strcmp ("Tthread", tok) == 0)
1972 disable_packet_Tthread = 1;
1973 else if (strcmp ("qC", tok) == 0)
1974 disable_packet_qC = 1;
1975 else if (strcmp ("qfThreadInfo", tok) == 0)
1976 disable_packet_qfThreadInfo = 1;
1977 else if (strcmp ("threads", tok) == 0)
1978 {
1979 disable_packet_vCont = 1;
1980 disable_packet_Tthread = 1;
1981 disable_packet_qC = 1;
1982 disable_packet_qfThreadInfo = 1;
1983 }
1984 else
1985 {
1986 fprintf (stderr, "Don't know how to disable \"%s\".\n\n",
1987 tok);
1988 gdbserver_show_disableable (stderr);
1989 exit (1);
1990 }
1991 }
1992 }
1993 else
1994 {
1995 fprintf (stderr, "Unknown argument: %s\n", *next_arg);
1996 exit (1);
1997 }
1998
1999 next_arg++;
2000 continue;
2001 }
2002
2003 if (setjmp (toplevel))
2004 {
2005 fprintf (stderr, "Exiting\n");
2006 exit (1);
2007 }
2008
2009 port = *next_arg;
2010 next_arg++;
2011 if (port == NULL || (!attach && !multi_mode && *next_arg == NULL))
2012 {
2013 gdbserver_usage (stderr);
2014 exit (1);
2015 }
2016
2017 bad_attach = 0;
2018 pid = 0;
2019
2020 /* --attach used to come after PORT, so allow it there for
2021 compatibility. */
2022 if (*next_arg != NULL && strcmp (*next_arg, "--attach") == 0)
2023 {
2024 attach = 1;
2025 next_arg++;
2026 }
2027
2028 if (attach
2029 && (*next_arg == NULL
2030 || (*next_arg)[0] == '\0'
2031 || (pid = strtoul (*next_arg, &arg_end, 0)) == 0
2032 || *arg_end != '\0'
2033 || next_arg[1] != NULL))
2034 bad_attach = 1;
2035
2036 if (bad_attach)
2037 {
2038 gdbserver_usage (stderr);
2039 exit (1);
2040 }
2041
2042 initialize_inferiors ();
2043 initialize_async_io ();
2044 initialize_low ();
2045
2046 own_buf = xmalloc (PBUFSIZ + 1);
2047 mem_buf = xmalloc (PBUFSIZ);
2048
2049 if (pid == 0 && *next_arg != NULL)
2050 {
2051 int i, n;
2052
2053 n = argc - (next_arg - argv);
2054 program_argv = xmalloc (sizeof (char *) * (n + 1));
2055 for (i = 0; i < n; i++)
2056 program_argv[i] = xstrdup (next_arg[i]);
2057 program_argv[i] = NULL;
2058
2059 /* Wait till we are at first instruction in program. */
2060 start_inferior (program_argv);
2061
2062 /* We are now (hopefully) stopped at the first instruction of
2063 the target process. This assumes that the target process was
2064 successfully created. */
2065 }
2066 else if (pid != 0)
2067 {
2068 if (attach_inferior (pid) == -1)
2069 error ("Attaching not supported on this target");
2070
2071 /* Otherwise succeeded. */
2072 }
2073 else
2074 {
2075 last_status.kind = TARGET_WAITKIND_EXITED;
2076 last_status.value.integer = 0;
2077 last_ptid = minus_one_ptid;
2078 }
2079
2080 /* Don't report shared library events on the initial connection,
2081 even if some libraries are preloaded. Avoids the "stopped by
2082 shared library event" notice on gdb side. */
2083 dlls_changed = 0;
2084
2085 if (setjmp (toplevel))
2086 {
2087 detach_or_kill_for_exit ();
2088 exit (1);
2089 }
2090
2091 if (last_status.kind == TARGET_WAITKIND_EXITED
2092 || last_status.kind == TARGET_WAITKIND_SIGNALLED)
2093 was_running = 0;
2094 else
2095 was_running = 1;
2096
2097 if (!was_running && !multi_mode)
2098 {
2099 fprintf (stderr, "No program to debug. GDBserver exiting.\n");
2100 exit (1);
2101 }
2102
2103 while (1)
2104 {
2105 noack_mode = 0;
2106 multi_process = 0;
2107 non_stop = 0;
2108
2109 remote_open (port);
2110
2111 if (setjmp (toplevel) != 0)
2112 {
2113 /* An error occurred. */
2114 if (response_needed)
2115 {
2116 write_enn (own_buf);
2117 putpkt (own_buf);
2118 }
2119 }
2120
2121 /* Wait for events. This will return when all event sources are
2122 removed from the event loop. */
2123 start_event_loop ();
2124
2125 /* If an exit was requested (using the "monitor exit" command),
2126 terminate now. The only other way to get here is for
2127 getpkt to fail; close the connection and reopen it at the
2128 top of the loop. */
2129
2130 if (exit_requested)
2131 {
2132 detach_or_kill_for_exit ();
2133 exit (0);
2134 }
2135 else
2136 fprintf (stderr, "Remote side has terminated connection. "
2137 "GDBserver will reopen the connection.\n");
2138 }
2139 }
2140
2141 /* Event loop callback that handles a serial event. The first byte in
2142 the serial buffer gets us here. We expect characters to arrive at
2143 a brisk pace, so we read the rest of the packet with a blocking
2144 getpkt call. */
2145
2146 static void
2147 process_serial_event (void)
2148 {
2149 char ch;
2150 int i = 0;
2151 int signal;
2152 unsigned int len;
2153 CORE_ADDR mem_addr;
2154 int pid;
2155 unsigned char sig;
2156 int packet_len;
2157 int new_packet_len = -1;
2158
2159 /* Used to decide when gdbserver should exit in
2160 multi-mode/remote. */
2161 static int have_ran = 0;
2162
2163 if (!have_ran)
2164 have_ran = target_running ();
2165
2166 disable_async_io ();
2167
2168 response_needed = 0;
2169 packet_len = getpkt (own_buf);
2170 if (packet_len <= 0)
2171 {
2172 target_async (0);
2173 remote_close ();
2174 return;
2175 }
2176 response_needed = 1;
2177
2178 i = 0;
2179 ch = own_buf[i++];
2180 switch (ch)
2181 {
2182 case 'q':
2183 handle_query (own_buf, packet_len, &new_packet_len);
2184 break;
2185 case 'Q':
2186 handle_general_set (own_buf);
2187 break;
2188 case 'D':
2189 require_running (own_buf);
2190
2191 if (multi_process)
2192 {
2193 i++; /* skip ';' */
2194 pid = strtol (&own_buf[i], NULL, 16);
2195 }
2196 else
2197 pid =
2198 ptid_get_pid (((struct inferior_list_entry *) current_inferior)->id);
2199
2200 fprintf (stderr, "Detaching from process %d\n", pid);
2201 if (detach_inferior (pid) != 0)
2202 write_enn (own_buf);
2203 else
2204 {
2205 discard_queued_stop_replies (pid);
2206 write_ok (own_buf);
2207
2208 if (extended_protocol)
2209 {
2210 /* Treat this like a normal program exit. */
2211 last_status.kind = TARGET_WAITKIND_EXITED;
2212 last_status.value.integer = 0;
2213 last_ptid = pid_to_ptid (pid);
2214
2215 current_inferior = NULL;
2216 }
2217 else
2218 {
2219 putpkt (own_buf);
2220 remote_close ();
2221
2222 /* If we are attached, then we can exit. Otherwise, we
2223 need to hang around doing nothing, until the child is
2224 gone. */
2225 for_each_inferior (&all_processes,
2226 join_inferiors_callback);
2227 exit (0);
2228 }
2229 }
2230 break;
2231 case '!':
2232 extended_protocol = 1;
2233 write_ok (own_buf);
2234 break;
2235 case '?':
2236 handle_status (own_buf);
2237 break;
2238 case 'H':
2239 if (own_buf[1] == 'c' || own_buf[1] == 'g' || own_buf[1] == 's')
2240 {
2241 ptid_t gdb_id, thread_id;
2242 int pid;
2243
2244 require_running (own_buf);
2245
2246 gdb_id = read_ptid (&own_buf[2], NULL);
2247
2248 pid = ptid_get_pid (gdb_id);
2249
2250 if (ptid_equal (gdb_id, null_ptid)
2251 || ptid_equal (gdb_id, minus_one_ptid))
2252 thread_id = null_ptid;
2253 else if (pid != 0
2254 && ptid_equal (pid_to_ptid (pid),
2255 gdb_id))
2256 {
2257 struct thread_info *thread =
2258 (struct thread_info *) find_inferior (&all_threads,
2259 first_thread_of,
2260 &pid);
2261 if (!thread)
2262 {
2263 write_enn (own_buf);
2264 break;
2265 }
2266
2267 thread_id = ((struct inferior_list_entry *)thread)->id;
2268 }
2269 else
2270 {
2271 thread_id = gdb_id_to_thread_id (gdb_id);
2272 if (ptid_equal (thread_id, null_ptid))
2273 {
2274 write_enn (own_buf);
2275 break;
2276 }
2277 }
2278
2279 if (own_buf[1] == 'g')
2280 {
2281 if (ptid_equal (thread_id, null_ptid))
2282 {
2283 /* GDB is telling us to choose any thread. Check if
2284 the currently selected thread is still valid. If
2285 it is not, select the first available. */
2286 struct thread_info *thread =
2287 (struct thread_info *) find_inferior_id (&all_threads,
2288 general_thread);
2289 if (thread == NULL)
2290 thread_id = all_threads.head->id;
2291 }
2292
2293 general_thread = thread_id;
2294 set_desired_inferior (1);
2295 }
2296 else if (own_buf[1] == 'c')
2297 cont_thread = thread_id;
2298 else if (own_buf[1] == 's')
2299 step_thread = thread_id;
2300
2301 write_ok (own_buf);
2302 }
2303 else
2304 {
2305 /* Silently ignore it so that gdb can extend the protocol
2306 without compatibility headaches. */
2307 own_buf[0] = '\0';
2308 }
2309 break;
2310 case 'g':
2311 require_running (own_buf);
2312 set_desired_inferior (1);
2313 registers_to_string (own_buf);
2314 break;
2315 case 'G':
2316 require_running (own_buf);
2317 set_desired_inferior (1);
2318 registers_from_string (&own_buf[1]);
2319 write_ok (own_buf);
2320 break;
2321 case 'm':
2322 require_running (own_buf);
2323 decode_m_packet (&own_buf[1], &mem_addr, &len);
2324 if (read_inferior_memory (mem_addr, mem_buf, len) == 0)
2325 convert_int_to_ascii (mem_buf, own_buf, len);
2326 else
2327 write_enn (own_buf);
2328 break;
2329 case 'M':
2330 require_running (own_buf);
2331 decode_M_packet (&own_buf[1], &mem_addr, &len, mem_buf);
2332 if (write_inferior_memory (mem_addr, mem_buf, len) == 0)
2333 write_ok (own_buf);
2334 else
2335 write_enn (own_buf);
2336 break;
2337 case 'X':
2338 require_running (own_buf);
2339 if (decode_X_packet (&own_buf[1], packet_len - 1,
2340 &mem_addr, &len, mem_buf) < 0
2341 || write_inferior_memory (mem_addr, mem_buf, len) != 0)
2342 write_enn (own_buf);
2343 else
2344 write_ok (own_buf);
2345 break;
2346 case 'C':
2347 require_running (own_buf);
2348 convert_ascii_to_int (own_buf + 1, &sig, 1);
2349 if (target_signal_to_host_p (sig))
2350 signal = target_signal_to_host (sig);
2351 else
2352 signal = 0;
2353 myresume (own_buf, 0, signal);
2354 break;
2355 case 'S':
2356 require_running (own_buf);
2357 convert_ascii_to_int (own_buf + 1, &sig, 1);
2358 if (target_signal_to_host_p (sig))
2359 signal = target_signal_to_host (sig);
2360 else
2361 signal = 0;
2362 myresume (own_buf, 1, signal);
2363 break;
2364 case 'c':
2365 require_running (own_buf);
2366 signal = 0;
2367 myresume (own_buf, 0, signal);
2368 break;
2369 case 's':
2370 require_running (own_buf);
2371 signal = 0;
2372 myresume (own_buf, 1, signal);
2373 break;
2374 case 'Z': /* insert_ ... */
2375 /* Fallthrough. */
2376 case 'z': /* remove_ ... */
2377 {
2378 char *lenptr;
2379 char *dataptr;
2380 CORE_ADDR addr = strtoul (&own_buf[3], &lenptr, 16);
2381 int len = strtol (lenptr + 1, &dataptr, 16);
2382 char type = own_buf[1];
2383 int res;
2384 const int insert_ = ch == 'Z';
2385
2386 /* Type: '0' - software-breakpoint
2387 '1' - hardware-breakpoint
2388 '2' - write watchpoint
2389 '3' - read watchpoint
2390 '4' - access watchpoint */
2391
2392 if (the_target->insert_watchpoint == NULL
2393 || the_target->remove_watchpoint == NULL)
2394 res = 1; /* Not supported. */
2395 else
2396 switch (type)
2397 {
2398 case '2':
2399 /* Fallthrough. */
2400 case '3':
2401 /* Fallthrough. */
2402 case '4':
2403 require_running (own_buf);
2404 /* Fallthrough. */
2405 case '0':
2406 /* Fallthrough. */
2407 case '1':
2408 res = insert_ ? (*the_target->insert_watchpoint) (type, addr,
2409 len)
2410 : (*the_target->remove_watchpoint) (type, addr,
2411 len);
2412 break;
2413 default:
2414 res = -1; /* Unrecognized type. */
2415 }
2416
2417 if (res == 0)
2418 write_ok (own_buf);
2419 else if (res == 1)
2420 /* Unsupported. */
2421 own_buf[0] = '\0';
2422 else
2423 write_enn (own_buf);
2424 break;
2425 }
2426 case 'k':
2427 response_needed = 0;
2428 if (!target_running ())
2429 /* The packet we received doesn't make sense - but we can't
2430 reply to it, either. */
2431 return;
2432
2433 fprintf (stderr, "Killing all inferiors\n");
2434 for_each_inferior (&all_processes, kill_inferior_callback);
2435
2436 /* When using the extended protocol, we wait with no program
2437 running. The traditional protocol will exit instead. */
2438 if (extended_protocol)
2439 {
2440 last_status.kind = TARGET_WAITKIND_EXITED;
2441 last_status.value.sig = TARGET_SIGNAL_KILL;
2442 return;
2443 }
2444 else
2445 {
2446 exit (0);
2447 break;
2448 }
2449 case 'T':
2450 {
2451 ptid_t gdb_id, thread_id;
2452
2453 require_running (own_buf);
2454
2455 gdb_id = read_ptid (&own_buf[1], NULL);
2456 thread_id = gdb_id_to_thread_id (gdb_id);
2457 if (ptid_equal (thread_id, null_ptid))
2458 {
2459 write_enn (own_buf);
2460 break;
2461 }
2462
2463 if (mythread_alive (thread_id))
2464 write_ok (own_buf);
2465 else
2466 write_enn (own_buf);
2467 }
2468 break;
2469 case 'R':
2470 response_needed = 0;
2471
2472 /* Restarting the inferior is only supported in the extended
2473 protocol. */
2474 if (extended_protocol)
2475 {
2476 if (target_running ())
2477 for_each_inferior (&all_processes,
2478 kill_inferior_callback);
2479 fprintf (stderr, "GDBserver restarting\n");
2480
2481 /* Wait till we are at 1st instruction in prog. */
2482 if (program_argv != NULL)
2483 start_inferior (program_argv);
2484 else
2485 {
2486 last_status.kind = TARGET_WAITKIND_EXITED;
2487 last_status.value.sig = TARGET_SIGNAL_KILL;
2488 }
2489 return;
2490 }
2491 else
2492 {
2493 /* It is a request we don't understand. Respond with an
2494 empty packet so that gdb knows that we don't support this
2495 request. */
2496 own_buf[0] = '\0';
2497 break;
2498 }
2499 case 'v':
2500 /* Extended (long) request. */
2501 handle_v_requests (own_buf, packet_len, &new_packet_len);
2502 break;
2503
2504 default:
2505 /* It is a request we don't understand. Respond with an empty
2506 packet so that gdb knows that we don't support this
2507 request. */
2508 own_buf[0] = '\0';
2509 break;
2510 }
2511
2512 if (new_packet_len != -1)
2513 putpkt_binary (own_buf, new_packet_len);
2514 else
2515 putpkt (own_buf);
2516
2517 response_needed = 0;
2518
2519 if (!extended_protocol && have_ran && !target_running ())
2520 {
2521 /* In non-stop, defer exiting until GDB had a chance to query
2522 the whole vStopped list (until it gets an OK). */
2523 if (!notif_queue)
2524 {
2525 fprintf (stderr, "GDBserver exiting\n");
2526 remote_close ();
2527 exit (0);
2528 }
2529 }
2530 }
2531
2532 /* Event-loop callback for serial events. */
2533
2534 void
2535 handle_serial_event (int err, gdb_client_data client_data)
2536 {
2537 if (debug_threads)
2538 fprintf (stderr, "handling possible serial event\n");
2539
2540 /* Really handle it. */
2541 process_serial_event ();
2542
2543 /* Be sure to not change the selected inferior behind GDB's back.
2544 Important in the non-stop mode asynchronous protocol. */
2545 set_desired_inferior (1);
2546 }
2547
2548 /* Event-loop callback for target events. */
2549
2550 void
2551 handle_target_event (int err, gdb_client_data client_data)
2552 {
2553 if (debug_threads)
2554 fprintf (stderr, "handling possible target event\n");
2555
2556 last_ptid = mywait (minus_one_ptid, &last_status,
2557 TARGET_WNOHANG, 1);
2558
2559 if (last_status.kind != TARGET_WAITKIND_IGNORE)
2560 {
2561 /* Something interesting. Tell GDB about it. */
2562 push_event (last_ptid, &last_status);
2563 }
2564
2565 /* Be sure to not change the selected inferior behind GDB's back.
2566 Important in the non-stop mode asynchronous protocol. */
2567 set_desired_inferior (1);
2568 }