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