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