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