gdb/gdbserver/
[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_supports_tracepoints ())
924 tracepoint_look_up_symbols ();
925
926 if (target_running () && the_target->look_up_symbols != NULL)
927 (*the_target->look_up_symbols) ();
928
929 strcpy (own_buf, "OK");
930 return;
931 }
932
933 if (!disable_packet_qfThreadInfo)
934 {
935 if (strcmp ("qfThreadInfo", own_buf) == 0)
936 {
937 ptid_t gdb_id;
938
939 require_running (own_buf);
940 thread_ptr = all_threads.head;
941
942 *own_buf++ = 'm';
943 gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
944 write_ptid (own_buf, gdb_id);
945 thread_ptr = thread_ptr->next;
946 return;
947 }
948
949 if (strcmp ("qsThreadInfo", own_buf) == 0)
950 {
951 ptid_t gdb_id;
952
953 require_running (own_buf);
954 if (thread_ptr != NULL)
955 {
956 *own_buf++ = 'm';
957 gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
958 write_ptid (own_buf, gdb_id);
959 thread_ptr = thread_ptr->next;
960 return;
961 }
962 else
963 {
964 sprintf (own_buf, "l");
965 return;
966 }
967 }
968 }
969
970 if (the_target->read_offsets != NULL
971 && strcmp ("qOffsets", own_buf) == 0)
972 {
973 CORE_ADDR text, data;
974
975 require_running (own_buf);
976 if (the_target->read_offsets (&text, &data))
977 sprintf (own_buf, "Text=%lX;Data=%lX;Bss=%lX",
978 (long)text, (long)data, (long)data);
979 else
980 write_enn (own_buf);
981
982 return;
983 }
984
985 if (the_target->qxfer_spu != NULL
986 && strncmp ("qXfer:spu:read:", own_buf, 15) == 0)
987 {
988 char *annex;
989 int n;
990 unsigned int len;
991 CORE_ADDR ofs;
992 unsigned char *spu_buf;
993
994 require_running (own_buf);
995 strcpy (own_buf, "E00");
996 if (decode_xfer_read (own_buf + 15, &annex, &ofs, &len) < 0)
997 return;
998 if (len > PBUFSIZ - 2)
999 len = PBUFSIZ - 2;
1000 spu_buf = malloc (len + 1);
1001 if (!spu_buf)
1002 return;
1003
1004 n = (*the_target->qxfer_spu) (annex, spu_buf, NULL, ofs, len + 1);
1005 if (n < 0)
1006 write_enn (own_buf);
1007 else if (n > len)
1008 *new_packet_len_p = write_qxfer_response (own_buf, spu_buf, len, 1);
1009 else
1010 *new_packet_len_p = write_qxfer_response (own_buf, spu_buf, n, 0);
1011
1012 free (spu_buf);
1013 return;
1014 }
1015
1016 if (the_target->qxfer_spu != NULL
1017 && strncmp ("qXfer:spu:write:", own_buf, 16) == 0)
1018 {
1019 char *annex;
1020 int n;
1021 unsigned int len;
1022 CORE_ADDR ofs;
1023 unsigned char *spu_buf;
1024
1025 require_running (own_buf);
1026 strcpy (own_buf, "E00");
1027 spu_buf = malloc (packet_len - 15);
1028 if (!spu_buf)
1029 return;
1030 if (decode_xfer_write (own_buf + 16, packet_len - 16, &annex,
1031 &ofs, &len, spu_buf) < 0)
1032 {
1033 free (spu_buf);
1034 return;
1035 }
1036
1037 n = (*the_target->qxfer_spu)
1038 (annex, NULL, (unsigned const char *)spu_buf, ofs, len);
1039 if (n < 0)
1040 write_enn (own_buf);
1041 else
1042 sprintf (own_buf, "%x", n);
1043
1044 free (spu_buf);
1045 return;
1046 }
1047
1048 if (the_target->read_auxv != NULL
1049 && strncmp ("qXfer:auxv:read:", own_buf, 16) == 0)
1050 {
1051 unsigned char *data;
1052 int n;
1053 CORE_ADDR ofs;
1054 unsigned int len;
1055 char *annex;
1056
1057 require_running (own_buf);
1058
1059 /* Reject any annex; grab the offset and length. */
1060 if (decode_xfer_read (own_buf + 16, &annex, &ofs, &len) < 0
1061 || annex[0] != '\0')
1062 {
1063 strcpy (own_buf, "E00");
1064 return;
1065 }
1066
1067 /* Read one extra byte, as an indicator of whether there is
1068 more. */
1069 if (len > PBUFSIZ - 2)
1070 len = PBUFSIZ - 2;
1071 data = malloc (len + 1);
1072 if (data == NULL)
1073 {
1074 write_enn (own_buf);
1075 return;
1076 }
1077 n = (*the_target->read_auxv) (ofs, data, len + 1);
1078 if (n < 0)
1079 write_enn (own_buf);
1080 else if (n > len)
1081 *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
1082 else
1083 *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
1084
1085 free (data);
1086
1087 return;
1088 }
1089
1090 if (strncmp ("qXfer:features:read:", own_buf, 20) == 0)
1091 {
1092 CORE_ADDR ofs;
1093 unsigned int len, total_len;
1094 const char *document;
1095 char *annex;
1096
1097 require_running (own_buf);
1098
1099 /* Grab the annex, offset, and length. */
1100 if (decode_xfer_read (own_buf + 20, &annex, &ofs, &len) < 0)
1101 {
1102 strcpy (own_buf, "E00");
1103 return;
1104 }
1105
1106 /* Now grab the correct annex. */
1107 document = get_features_xml (annex);
1108 if (document == NULL)
1109 {
1110 strcpy (own_buf, "E00");
1111 return;
1112 }
1113
1114 total_len = strlen (document);
1115 if (len > PBUFSIZ - 2)
1116 len = PBUFSIZ - 2;
1117
1118 if (ofs > total_len)
1119 write_enn (own_buf);
1120 else if (len < total_len - ofs)
1121 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
1122 len, 1);
1123 else
1124 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
1125 total_len - ofs, 0);
1126
1127 return;
1128 }
1129
1130 if (strncmp ("qXfer:libraries:read:", own_buf, 21) == 0)
1131 {
1132 CORE_ADDR ofs;
1133 unsigned int len, total_len;
1134 char *document, *p;
1135 struct inferior_list_entry *dll_ptr;
1136 char *annex;
1137
1138 require_running (own_buf);
1139
1140 /* Reject any annex; grab the offset and length. */
1141 if (decode_xfer_read (own_buf + 21, &annex, &ofs, &len) < 0
1142 || annex[0] != '\0')
1143 {
1144 strcpy (own_buf, "E00");
1145 return;
1146 }
1147
1148 /* Over-estimate the necessary memory. Assume that every character
1149 in the library name must be escaped. */
1150 total_len = 64;
1151 for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)
1152 total_len += 128 + 6 * strlen (((struct dll_info *) dll_ptr)->name);
1153
1154 document = malloc (total_len);
1155 if (document == NULL)
1156 {
1157 write_enn (own_buf);
1158 return;
1159 }
1160 strcpy (document, "<library-list>\n");
1161 p = document + strlen (document);
1162
1163 for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)
1164 {
1165 struct dll_info *dll = (struct dll_info *) dll_ptr;
1166 char *name;
1167
1168 strcpy (p, " <library name=\"");
1169 p = p + strlen (p);
1170 name = xml_escape_text (dll->name);
1171 strcpy (p, name);
1172 free (name);
1173 p = p + strlen (p);
1174 strcpy (p, "\"><segment address=\"");
1175 p = p + strlen (p);
1176 sprintf (p, "0x%lx", (long) dll->base_addr);
1177 p = p + strlen (p);
1178 strcpy (p, "\"/></library>\n");
1179 p = p + strlen (p);
1180 }
1181
1182 strcpy (p, "</library-list>\n");
1183
1184 total_len = strlen (document);
1185 if (len > PBUFSIZ - 2)
1186 len = PBUFSIZ - 2;
1187
1188 if (ofs > total_len)
1189 write_enn (own_buf);
1190 else if (len < total_len - ofs)
1191 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
1192 len, 1);
1193 else
1194 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
1195 total_len - ofs, 0);
1196
1197 free (document);
1198 return;
1199 }
1200
1201 if (the_target->qxfer_osdata != NULL
1202 && strncmp ("qXfer:osdata:read:", own_buf, 18) == 0)
1203 {
1204 char *annex;
1205 int n;
1206 unsigned int len;
1207 CORE_ADDR ofs;
1208 unsigned char *workbuf;
1209
1210 strcpy (own_buf, "E00");
1211 if (decode_xfer_read (own_buf + 18, &annex, &ofs, &len) < 0)
1212 return;
1213 if (len > PBUFSIZ - 2)
1214 len = PBUFSIZ - 2;
1215 workbuf = malloc (len + 1);
1216 if (!workbuf)
1217 return;
1218
1219 n = (*the_target->qxfer_osdata) (annex, workbuf, NULL, ofs, len + 1);
1220 if (n < 0)
1221 write_enn (own_buf);
1222 else if (n > len)
1223 *new_packet_len_p = write_qxfer_response (own_buf, workbuf, len, 1);
1224 else
1225 *new_packet_len_p = write_qxfer_response (own_buf, workbuf, n, 0);
1226
1227 free (workbuf);
1228 return;
1229 }
1230
1231 if (the_target->qxfer_siginfo != NULL
1232 && strncmp ("qXfer:siginfo:read:", own_buf, 19) == 0)
1233 {
1234 unsigned char *data;
1235 int n;
1236 CORE_ADDR ofs;
1237 unsigned int len;
1238 char *annex;
1239
1240 require_running (own_buf);
1241
1242 /* Reject any annex; grab the offset and length. */
1243 if (decode_xfer_read (own_buf + 19, &annex, &ofs, &len) < 0
1244 || annex[0] != '\0')
1245 {
1246 strcpy (own_buf, "E00");
1247 return;
1248 }
1249
1250 /* Read one extra byte, as an indicator of whether there is
1251 more. */
1252 if (len > PBUFSIZ - 2)
1253 len = PBUFSIZ - 2;
1254 data = malloc (len + 1);
1255 if (!data)
1256 return;
1257 n = (*the_target->qxfer_siginfo) (annex, data, NULL, ofs, len + 1);
1258 if (n < 0)
1259 write_enn (own_buf);
1260 else if (n > len)
1261 *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
1262 else
1263 *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
1264
1265 free (data);
1266 return;
1267 }
1268
1269 if (the_target->qxfer_siginfo != NULL
1270 && strncmp ("qXfer:siginfo:write:", own_buf, 20) == 0)
1271 {
1272 char *annex;
1273 int n;
1274 unsigned int len;
1275 CORE_ADDR ofs;
1276 unsigned char *data;
1277
1278 require_running (own_buf);
1279
1280 strcpy (own_buf, "E00");
1281 data = malloc (packet_len - 19);
1282 if (!data)
1283 return;
1284 if (decode_xfer_write (own_buf + 20, packet_len - 20, &annex,
1285 &ofs, &len, data) < 0)
1286 {
1287 free (data);
1288 return;
1289 }
1290
1291 n = (*the_target->qxfer_siginfo)
1292 (annex, NULL, (unsigned const char *)data, ofs, len);
1293 if (n < 0)
1294 write_enn (own_buf);
1295 else
1296 sprintf (own_buf, "%x", n);
1297
1298 free (data);
1299 return;
1300 }
1301
1302 if (strncmp ("qXfer:threads:read:", own_buf, 19) == 0)
1303 {
1304 unsigned char *data;
1305 int n;
1306 CORE_ADDR ofs;
1307 unsigned int len;
1308 char *annex;
1309
1310 require_running (own_buf);
1311
1312 /* Reject any annex; grab the offset and length. */
1313 if (decode_xfer_read (own_buf + 19, &annex, &ofs, &len) < 0
1314 || annex[0] != '\0')
1315 {
1316 strcpy (own_buf, "E00");
1317 return;
1318 }
1319
1320 /* Read one extra byte, as an indicator of whether there is
1321 more. */
1322 if (len > PBUFSIZ - 2)
1323 len = PBUFSIZ - 2;
1324 data = malloc (len + 1);
1325 if (!data)
1326 return;
1327 n = handle_threads_qxfer (annex, data, ofs, len + 1);
1328 if (n < 0)
1329 write_enn (own_buf);
1330 else if (n > len)
1331 *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
1332 else
1333 *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
1334
1335 free (data);
1336 return;
1337 }
1338
1339 if (strncmp ("qXfer:statictrace:read:", own_buf,
1340 sizeof ("qXfer:statictrace:read:") -1) == 0)
1341 {
1342 unsigned char *data;
1343 CORE_ADDR ofs;
1344 unsigned int len;
1345 char *annex;
1346 ULONGEST nbytes;
1347
1348 require_running (own_buf);
1349
1350 if (current_traceframe == -1)
1351 {
1352 write_enn (own_buf);
1353 return;
1354 }
1355
1356 /* Reject any annex; grab the offset and length. */
1357 if (decode_xfer_read (own_buf + sizeof ("qXfer:statictrace:read:") -1,
1358 &annex, &ofs, &len) < 0
1359 || annex[0] != '\0')
1360 {
1361 strcpy (own_buf, "E00");
1362 return;
1363 }
1364
1365 /* Read one extra byte, as an indicator of whether there is
1366 more. */
1367 if (len > PBUFSIZ - 2)
1368 len = PBUFSIZ - 2;
1369 data = malloc (len + 1);
1370 if (!data)
1371 return;
1372
1373 if (traceframe_read_sdata (current_traceframe, ofs,
1374 data, len + 1, &nbytes))
1375 write_enn (own_buf);
1376 else if (nbytes > len)
1377 *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
1378 else
1379 *new_packet_len_p = write_qxfer_response (own_buf, data, nbytes, 0);
1380
1381 free (data);
1382 return;
1383 }
1384
1385 /* Protocol features query. */
1386 if (strncmp ("qSupported", own_buf, 10) == 0
1387 && (own_buf[10] == ':' || own_buf[10] == '\0'))
1388 {
1389 char *p = &own_buf[10];
1390 int gdb_supports_qRelocInsn = 0;
1391
1392 /* Start processing qSupported packet. */
1393 target_process_qsupported (NULL);
1394
1395 /* Process each feature being provided by GDB. The first
1396 feature will follow a ':', and latter features will follow
1397 ';'. */
1398 if (*p == ':')
1399 {
1400 char **qsupported = NULL;
1401 int count = 0;
1402 int i;
1403
1404 /* Two passes, to avoid nested strtok calls in
1405 target_process_qsupported. */
1406 for (p = strtok (p + 1, ";");
1407 p != NULL;
1408 p = strtok (NULL, ";"))
1409 {
1410 count++;
1411 qsupported = xrealloc (qsupported, count * sizeof (char *));
1412 qsupported[count - 1] = xstrdup (p);
1413 }
1414
1415 for (i = 0; i < count; i++)
1416 {
1417 p = qsupported[i];
1418 if (strcmp (p, "multiprocess+") == 0)
1419 {
1420 /* GDB supports and wants multi-process support if
1421 possible. */
1422 if (target_supports_multi_process ())
1423 multi_process = 1;
1424 }
1425 else if (strcmp (p, "qRelocInsn+") == 0)
1426 {
1427 /* GDB supports relocate instruction requests. */
1428 gdb_supports_qRelocInsn = 1;
1429 }
1430 else
1431 target_process_qsupported (p);
1432
1433 free (p);
1434 }
1435
1436 free (qsupported);
1437 }
1438
1439 sprintf (own_buf, "PacketSize=%x;QPassSignals+", PBUFSIZ - 1);
1440
1441 /* We do not have any hook to indicate whether the target backend
1442 supports qXfer:libraries:read, so always report it. */
1443 strcat (own_buf, ";qXfer:libraries:read+");
1444
1445 if (the_target->read_auxv != NULL)
1446 strcat (own_buf, ";qXfer:auxv:read+");
1447
1448 if (the_target->qxfer_spu != NULL)
1449 strcat (own_buf, ";qXfer:spu:read+;qXfer:spu:write+");
1450
1451 if (the_target->qxfer_siginfo != NULL)
1452 strcat (own_buf, ";qXfer:siginfo:read+;qXfer:siginfo:write+");
1453
1454 /* We always report qXfer:features:read, as targets may
1455 install XML files on a subsequent call to arch_setup.
1456 If we reported to GDB on startup that we don't support
1457 qXfer:feature:read at all, we will never be re-queried. */
1458 strcat (own_buf, ";qXfer:features:read+");
1459
1460 if (transport_is_reliable)
1461 strcat (own_buf, ";QStartNoAckMode+");
1462
1463 if (the_target->qxfer_osdata != NULL)
1464 strcat (own_buf, ";qXfer:osdata:read+");
1465
1466 if (target_supports_multi_process ())
1467 strcat (own_buf, ";multiprocess+");
1468
1469 if (target_supports_non_stop ())
1470 strcat (own_buf, ";QNonStop+");
1471
1472 strcat (own_buf, ";qXfer:threads:read+");
1473
1474 if (target_supports_tracepoints ())
1475 {
1476 strcat (own_buf, ";ConditionalTracepoints+");
1477 strcat (own_buf, ";TraceStateVariables+");
1478 strcat (own_buf, ";TracepointSource+");
1479 strcat (own_buf, ";DisconnectedTracing+");
1480 if (gdb_supports_qRelocInsn && target_supports_fast_tracepoints ())
1481 strcat (own_buf, ";FastTracepoints+");
1482 strcat (own_buf, ";StaticTracepoints+");
1483 strcat (own_buf, ";qXfer:statictrace:read+");
1484 }
1485
1486 return;
1487 }
1488
1489 /* Thread-local storage support. */
1490 if (the_target->get_tls_address != NULL
1491 && strncmp ("qGetTLSAddr:", own_buf, 12) == 0)
1492 {
1493 char *p = own_buf + 12;
1494 CORE_ADDR parts[2], address = 0;
1495 int i, err;
1496 ptid_t ptid = null_ptid;
1497
1498 require_running (own_buf);
1499
1500 for (i = 0; i < 3; i++)
1501 {
1502 char *p2;
1503 int len;
1504
1505 if (p == NULL)
1506 break;
1507
1508 p2 = strchr (p, ',');
1509 if (p2)
1510 {
1511 len = p2 - p;
1512 p2++;
1513 }
1514 else
1515 {
1516 len = strlen (p);
1517 p2 = NULL;
1518 }
1519
1520 if (i == 0)
1521 ptid = read_ptid (p, NULL);
1522 else
1523 decode_address (&parts[i - 1], p, len);
1524 p = p2;
1525 }
1526
1527 if (p != NULL || i < 3)
1528 err = 1;
1529 else
1530 {
1531 struct thread_info *thread = find_thread_ptid (ptid);
1532
1533 if (thread == NULL)
1534 err = 2;
1535 else
1536 err = the_target->get_tls_address (thread, parts[0], parts[1],
1537 &address);
1538 }
1539
1540 if (err == 0)
1541 {
1542 strcpy (own_buf, paddress(address));
1543 return;
1544 }
1545 else if (err > 0)
1546 {
1547 write_enn (own_buf);
1548 return;
1549 }
1550
1551 /* Otherwise, pretend we do not understand this packet. */
1552 }
1553
1554 /* Windows OS Thread Information Block address support. */
1555 if (the_target->get_tib_address != NULL
1556 && strncmp ("qGetTIBAddr:", own_buf, 12) == 0)
1557 {
1558 char *annex;
1559 int n;
1560 CORE_ADDR tlb;
1561 ptid_t ptid = read_ptid (own_buf + 12, &annex);
1562
1563 n = (*the_target->get_tib_address) (ptid, &tlb);
1564 if (n == 1)
1565 {
1566 strcpy (own_buf, paddress(tlb));
1567 return;
1568 }
1569 else if (n == 0)
1570 {
1571 write_enn (own_buf);
1572 return;
1573 }
1574 return;
1575 }
1576
1577 /* Handle "monitor" commands. */
1578 if (strncmp ("qRcmd,", own_buf, 6) == 0)
1579 {
1580 char *mon = malloc (PBUFSIZ);
1581 int len = strlen (own_buf + 6);
1582
1583 if (mon == NULL)
1584 {
1585 write_enn (own_buf);
1586 return;
1587 }
1588
1589 if ((len % 2) != 0 || unhexify (mon, own_buf + 6, len / 2) != len / 2)
1590 {
1591 write_enn (own_buf);
1592 free (mon);
1593 return;
1594 }
1595 mon[len / 2] = '\0';
1596
1597 write_ok (own_buf);
1598
1599 if (the_target->handle_monitor_command == NULL
1600 || (*the_target->handle_monitor_command) (mon) == 0)
1601 /* Default processing. */
1602 handle_monitor_command (mon);
1603
1604 free (mon);
1605 return;
1606 }
1607
1608 if (strncmp ("qSearch:memory:", own_buf, sizeof ("qSearch:memory:") - 1) == 0)
1609 {
1610 require_running (own_buf);
1611 handle_search_memory (own_buf, packet_len);
1612 return;
1613 }
1614
1615 if (strcmp (own_buf, "qAttached") == 0
1616 || strncmp (own_buf, "qAttached:", sizeof ("qAttached:") - 1) == 0)
1617 {
1618 struct process_info *process;
1619
1620 if (own_buf[sizeof ("qAttached") - 1])
1621 {
1622 int pid = strtoul (own_buf + sizeof ("qAttached:") - 1, NULL, 16);
1623 process = (struct process_info *)
1624 find_inferior_id (&all_processes, pid_to_ptid (pid));
1625 }
1626 else
1627 {
1628 require_running (own_buf);
1629 process = current_process ();
1630 }
1631
1632 if (process == NULL)
1633 {
1634 write_enn (own_buf);
1635 return;
1636 }
1637
1638 strcpy (own_buf, process->attached ? "1" : "0");
1639 return;
1640 }
1641
1642 if (strncmp ("qCRC:", own_buf, 5) == 0)
1643 {
1644 /* CRC check (compare-section). */
1645 char *comma;
1646 CORE_ADDR base;
1647 int len;
1648 unsigned long long crc;
1649
1650 require_running (own_buf);
1651 base = strtoul (own_buf + 5, &comma, 16);
1652 if (*comma++ != ',')
1653 {
1654 write_enn (own_buf);
1655 return;
1656 }
1657 len = strtoul (comma, NULL, 16);
1658 crc = crc32 (base, len, 0xffffffff);
1659 /* Check for memory failure. */
1660 if (crc == (unsigned long long) -1)
1661 {
1662 write_enn (own_buf);
1663 return;
1664 }
1665 sprintf (own_buf, "C%lx", (unsigned long) crc);
1666 return;
1667 }
1668
1669 if (target_supports_tracepoints () && handle_tracepoint_query (own_buf))
1670 return;
1671
1672 /* Otherwise we didn't know what packet it was. Say we didn't
1673 understand it. */
1674 own_buf[0] = 0;
1675 }
1676
1677 /* Parse vCont packets. */
1678 void
1679 handle_v_cont (char *own_buf)
1680 {
1681 char *p, *q;
1682 int n = 0, i = 0;
1683 struct thread_resume *resume_info;
1684 struct thread_resume default_action = {{0}};
1685
1686 /* Count the number of semicolons in the packet. There should be one
1687 for every action. */
1688 p = &own_buf[5];
1689 while (p)
1690 {
1691 n++;
1692 p++;
1693 p = strchr (p, ';');
1694 }
1695
1696 resume_info = malloc (n * sizeof (resume_info[0]));
1697 if (resume_info == NULL)
1698 goto err;
1699
1700 p = &own_buf[5];
1701 while (*p)
1702 {
1703 p++;
1704
1705 if (p[0] == 's' || p[0] == 'S')
1706 resume_info[i].kind = resume_step;
1707 else if (p[0] == 'c' || p[0] == 'C')
1708 resume_info[i].kind = resume_continue;
1709 else if (p[0] == 't')
1710 resume_info[i].kind = resume_stop;
1711 else
1712 goto err;
1713
1714 if (p[0] == 'S' || p[0] == 'C')
1715 {
1716 int sig;
1717 sig = strtol (p + 1, &q, 16);
1718 if (p == q)
1719 goto err;
1720 p = q;
1721
1722 if (!target_signal_to_host_p (sig))
1723 goto err;
1724 resume_info[i].sig = target_signal_to_host (sig);
1725 }
1726 else
1727 {
1728 resume_info[i].sig = 0;
1729 p = p + 1;
1730 }
1731
1732 if (p[0] == 0)
1733 {
1734 resume_info[i].thread = minus_one_ptid;
1735 default_action = resume_info[i];
1736
1737 /* Note: we don't increment i here, we'll overwrite this entry
1738 the next time through. */
1739 }
1740 else if (p[0] == ':')
1741 {
1742 ptid_t ptid = read_ptid (p + 1, &q);
1743
1744 if (p == q)
1745 goto err;
1746 p = q;
1747 if (p[0] != ';' && p[0] != 0)
1748 goto err;
1749
1750 resume_info[i].thread = ptid;
1751
1752 i++;
1753 }
1754 }
1755
1756 if (i < n)
1757 resume_info[i] = default_action;
1758
1759 /* Still used in occasional places in the backend. */
1760 if (n == 1
1761 && !ptid_equal (resume_info[0].thread, minus_one_ptid)
1762 && resume_info[0].kind != resume_stop)
1763 cont_thread = resume_info[0].thread;
1764 else
1765 cont_thread = minus_one_ptid;
1766 set_desired_inferior (0);
1767
1768 if (!non_stop)
1769 enable_async_io ();
1770
1771 (*the_target->resume) (resume_info, n);
1772
1773 free (resume_info);
1774
1775 if (non_stop)
1776 write_ok (own_buf);
1777 else
1778 {
1779 last_ptid = mywait (minus_one_ptid, &last_status, 0, 1);
1780 prepare_resume_reply (own_buf, last_ptid, &last_status);
1781 disable_async_io ();
1782
1783 if (last_status.kind == TARGET_WAITKIND_EXITED
1784 || last_status.kind == TARGET_WAITKIND_SIGNALLED)
1785 mourn_inferior (find_process_pid (ptid_get_pid (last_ptid)));
1786 }
1787 return;
1788
1789 err:
1790 write_enn (own_buf);
1791 free (resume_info);
1792 return;
1793 }
1794
1795 /* Attach to a new program. Return 1 if successful, 0 if failure. */
1796 int
1797 handle_v_attach (char *own_buf)
1798 {
1799 int pid;
1800
1801 pid = strtol (own_buf + 8, NULL, 16);
1802 if (pid != 0 && attach_inferior (pid) == 0)
1803 {
1804 /* Don't report shared library events after attaching, even if
1805 some libraries are preloaded. GDB will always poll the
1806 library list. Avoids the "stopped by shared library event"
1807 notice on the GDB side. */
1808 dlls_changed = 0;
1809
1810 if (non_stop)
1811 {
1812 /* In non-stop, we don't send a resume reply. Stop events
1813 will follow up using the normal notification
1814 mechanism. */
1815 write_ok (own_buf);
1816 }
1817 else
1818 prepare_resume_reply (own_buf, last_ptid, &last_status);
1819
1820 return 1;
1821 }
1822 else
1823 {
1824 write_enn (own_buf);
1825 return 0;
1826 }
1827 }
1828
1829 /* Run a new program. Return 1 if successful, 0 if failure. */
1830 static int
1831 handle_v_run (char *own_buf)
1832 {
1833 char *p, *next_p, **new_argv;
1834 int i, new_argc;
1835
1836 new_argc = 0;
1837 for (p = own_buf + strlen ("vRun;"); p && *p; p = strchr (p, ';'))
1838 {
1839 p++;
1840 new_argc++;
1841 }
1842
1843 new_argv = calloc (new_argc + 2, sizeof (char *));
1844 if (new_argv == NULL)
1845 {
1846 write_enn (own_buf);
1847 return 0;
1848 }
1849
1850 i = 0;
1851 for (p = own_buf + strlen ("vRun;"); *p; p = next_p)
1852 {
1853 next_p = strchr (p, ';');
1854 if (next_p == NULL)
1855 next_p = p + strlen (p);
1856
1857 if (i == 0 && p == next_p)
1858 new_argv[i] = NULL;
1859 else
1860 {
1861 /* FIXME: Fail request if out of memory instead of dying. */
1862 new_argv[i] = xmalloc (1 + (next_p - p) / 2);
1863 unhexify (new_argv[i], p, (next_p - p) / 2);
1864 new_argv[i][(next_p - p) / 2] = '\0';
1865 }
1866
1867 if (*next_p)
1868 next_p++;
1869 i++;
1870 }
1871 new_argv[i] = NULL;
1872
1873 if (new_argv[0] == NULL)
1874 {
1875 /* GDB didn't specify a program to run. Use the program from the
1876 last run with the new argument list. */
1877
1878 if (program_argv == NULL)
1879 {
1880 /* FIXME: new_argv memory leak */
1881 write_enn (own_buf);
1882 return 0;
1883 }
1884
1885 new_argv[0] = strdup (program_argv[0]);
1886 if (new_argv[0] == NULL)
1887 {
1888 /* FIXME: new_argv memory leak */
1889 write_enn (own_buf);
1890 return 0;
1891 }
1892 }
1893
1894 /* Free the old argv and install the new one. */
1895 freeargv (program_argv);
1896 program_argv = new_argv;
1897
1898 start_inferior (program_argv);
1899 if (last_status.kind == TARGET_WAITKIND_STOPPED)
1900 {
1901 prepare_resume_reply (own_buf, last_ptid, &last_status);
1902
1903 /* In non-stop, sending a resume reply doesn't set the general
1904 thread, but GDB assumes a vRun sets it (this is so GDB can
1905 query which is the main thread of the new inferior. */
1906 if (non_stop)
1907 general_thread = last_ptid;
1908
1909 return 1;
1910 }
1911 else
1912 {
1913 write_enn (own_buf);
1914 return 0;
1915 }
1916 }
1917
1918 /* Kill process. Return 1 if successful, 0 if failure. */
1919 int
1920 handle_v_kill (char *own_buf)
1921 {
1922 int pid;
1923 char *p = &own_buf[6];
1924 if (multi_process)
1925 pid = strtol (p, NULL, 16);
1926 else
1927 pid = signal_pid;
1928 if (pid != 0 && kill_inferior (pid) == 0)
1929 {
1930 last_status.kind = TARGET_WAITKIND_SIGNALLED;
1931 last_status.value.sig = TARGET_SIGNAL_KILL;
1932 last_ptid = pid_to_ptid (pid);
1933 discard_queued_stop_replies (pid);
1934 write_ok (own_buf);
1935 return 1;
1936 }
1937 else
1938 {
1939 write_enn (own_buf);
1940 return 0;
1941 }
1942 }
1943
1944 /* Handle a 'vStopped' packet. */
1945 static void
1946 handle_v_stopped (char *own_buf)
1947 {
1948 /* If we're waiting for GDB to acknowledge a pending stop reply,
1949 consider that done. */
1950 if (notif_queue)
1951 {
1952 struct vstop_notif *head;
1953
1954 if (remote_debug)
1955 fprintf (stderr, "vStopped: acking %s\n",
1956 target_pid_to_str (notif_queue->ptid));
1957
1958 head = notif_queue;
1959 notif_queue = notif_queue->next;
1960 free (head);
1961 }
1962
1963 /* Push another stop reply, or if there are no more left, an OK. */
1964 send_next_stop_reply (own_buf);
1965 }
1966
1967 /* Handle all of the extended 'v' packets. */
1968 void
1969 handle_v_requests (char *own_buf, int packet_len, int *new_packet_len)
1970 {
1971 if (!disable_packet_vCont)
1972 {
1973 if (strncmp (own_buf, "vCont;", 6) == 0)
1974 {
1975 require_running (own_buf);
1976 handle_v_cont (own_buf);
1977 return;
1978 }
1979
1980 if (strncmp (own_buf, "vCont?", 6) == 0)
1981 {
1982 strcpy (own_buf, "vCont;c;C;s;S;t");
1983 return;
1984 }
1985 }
1986
1987 if (strncmp (own_buf, "vFile:", 6) == 0
1988 && handle_vFile (own_buf, packet_len, new_packet_len))
1989 return;
1990
1991 if (strncmp (own_buf, "vAttach;", 8) == 0)
1992 {
1993 if (!multi_process && target_running ())
1994 {
1995 fprintf (stderr, "Already debugging a process\n");
1996 write_enn (own_buf);
1997 return;
1998 }
1999 handle_v_attach (own_buf);
2000 return;
2001 }
2002
2003 if (strncmp (own_buf, "vRun;", 5) == 0)
2004 {
2005 if (!multi_process && target_running ())
2006 {
2007 fprintf (stderr, "Already debugging a process\n");
2008 write_enn (own_buf);
2009 return;
2010 }
2011 handle_v_run (own_buf);
2012 return;
2013 }
2014
2015 if (strncmp (own_buf, "vKill;", 6) == 0)
2016 {
2017 if (!target_running ())
2018 {
2019 fprintf (stderr, "No process to kill\n");
2020 write_enn (own_buf);
2021 return;
2022 }
2023 handle_v_kill (own_buf);
2024 return;
2025 }
2026
2027 if (strncmp (own_buf, "vStopped", 8) == 0)
2028 {
2029 handle_v_stopped (own_buf);
2030 return;
2031 }
2032
2033 /* Otherwise we didn't know what packet it was. Say we didn't
2034 understand it. */
2035 own_buf[0] = 0;
2036 return;
2037 }
2038
2039 /* Resume inferior and wait for another event. In non-stop mode,
2040 don't really wait here, but return immediatelly to the event
2041 loop. */
2042 static void
2043 myresume (char *own_buf, int step, int sig)
2044 {
2045 struct thread_resume resume_info[2];
2046 int n = 0;
2047 int valid_cont_thread;
2048
2049 set_desired_inferior (0);
2050
2051 valid_cont_thread = (!ptid_equal (cont_thread, null_ptid)
2052 && !ptid_equal (cont_thread, minus_one_ptid));
2053
2054 if (step || sig || valid_cont_thread)
2055 {
2056 resume_info[0].thread
2057 = ((struct inferior_list_entry *) current_inferior)->id;
2058 if (step)
2059 resume_info[0].kind = resume_step;
2060 else
2061 resume_info[0].kind = resume_continue;
2062 resume_info[0].sig = sig;
2063 n++;
2064 }
2065
2066 if (!valid_cont_thread)
2067 {
2068 resume_info[n].thread = minus_one_ptid;
2069 resume_info[n].kind = resume_continue;
2070 resume_info[n].sig = 0;
2071 n++;
2072 }
2073
2074 if (!non_stop)
2075 enable_async_io ();
2076
2077 (*the_target->resume) (resume_info, n);
2078
2079 if (non_stop)
2080 write_ok (own_buf);
2081 else
2082 {
2083 last_ptid = mywait (minus_one_ptid, &last_status, 0, 1);
2084 prepare_resume_reply (own_buf, last_ptid, &last_status);
2085 disable_async_io ();
2086
2087 if (last_status.kind == TARGET_WAITKIND_EXITED
2088 || last_status.kind == TARGET_WAITKIND_SIGNALLED)
2089 mourn_inferior (find_process_pid (ptid_get_pid (last_ptid)));
2090 }
2091 }
2092
2093 /* Callback for for_each_inferior. Make a new stop reply for each
2094 stopped thread. */
2095
2096 static int
2097 queue_stop_reply_callback (struct inferior_list_entry *entry, void *arg)
2098 {
2099 struct thread_info *thread = (struct thread_info *) entry;
2100
2101 /* For now, assume targets that don't have this callback also don't
2102 manage the thread's last_status field. */
2103 if (the_target->thread_stopped == NULL)
2104 {
2105 struct target_waitstatus status;
2106
2107 status.kind = TARGET_WAITKIND_STOPPED;
2108 status.value.sig = TARGET_SIGNAL_TRAP;
2109
2110 /* Pass the last stop reply back to GDB, but don't notify
2111 yet. */
2112 queue_stop_reply (entry->id, &thread->last_status);
2113 }
2114 else
2115 {
2116 if (thread_stopped (thread))
2117 {
2118 if (debug_threads)
2119 fprintf (stderr, "Reporting thread %s as already stopped with %s\n",
2120 target_pid_to_str (entry->id),
2121 target_waitstatus_to_string (&thread->last_status));
2122
2123 /* Pass the last stop reply back to GDB, but don't notify
2124 yet. */
2125 queue_stop_reply (entry->id, &thread->last_status);
2126 }
2127 }
2128
2129 return 0;
2130 }
2131
2132 /* Set this inferior LWP's state as "want-stopped". We won't resume
2133 this LWP until the client gives us another action for it. */
2134
2135 static void
2136 gdb_wants_thread_stopped (struct inferior_list_entry *entry)
2137 {
2138 struct thread_info *thread = (struct thread_info *) entry;
2139
2140 thread->last_resume_kind = resume_stop;
2141
2142 if (thread->last_status.kind == TARGET_WAITKIND_IGNORE)
2143 {
2144 thread->last_status.kind = TARGET_WAITKIND_STOPPED;
2145 thread->last_status.value.sig = TARGET_SIGNAL_0;
2146 }
2147 }
2148
2149 /* Set all threads' states as "want-stopped". */
2150
2151 static void
2152 gdb_wants_all_threads_stopped (void)
2153 {
2154 for_each_inferior (&all_threads, gdb_wants_thread_stopped);
2155 }
2156
2157 /* Clear the gdb_detached flag of every process. */
2158
2159 static void
2160 gdb_reattached_process (struct inferior_list_entry *entry)
2161 {
2162 struct process_info *process = (struct process_info *) entry;
2163
2164 process->gdb_detached = 0;
2165 }
2166
2167 /* Status handler for the '?' packet. */
2168
2169 static void
2170 handle_status (char *own_buf)
2171 {
2172 /* GDB is connected, don't forward events to the target anymore. */
2173 for_each_inferior (&all_processes, gdb_reattached_process);
2174
2175 /* In non-stop mode, we must send a stop reply for each stopped
2176 thread. In all-stop mode, just send one for the first stopped
2177 thread we find. */
2178
2179 if (non_stop)
2180 {
2181 discard_queued_stop_replies (-1);
2182 find_inferior (&all_threads, queue_stop_reply_callback, NULL);
2183
2184 /* The first is sent immediatly. OK is sent if there is no
2185 stopped thread, which is the same handling of the vStopped
2186 packet (by design). */
2187 send_next_stop_reply (own_buf);
2188 }
2189 else
2190 {
2191 pause_all (0);
2192 stabilize_threads ();
2193 gdb_wants_all_threads_stopped ();
2194
2195 if (all_threads.head)
2196 {
2197 struct target_waitstatus status;
2198
2199 status.kind = TARGET_WAITKIND_STOPPED;
2200 status.value.sig = TARGET_SIGNAL_TRAP;
2201 prepare_resume_reply (own_buf,
2202 all_threads.head->id, &status);
2203 }
2204 else
2205 strcpy (own_buf, "W00");
2206 }
2207 }
2208
2209 static void
2210 gdbserver_version (void)
2211 {
2212 printf ("GNU gdbserver %s%s\n"
2213 "Copyright (C) 2010 Free Software Foundation, Inc.\n"
2214 "gdbserver is free software, covered by the GNU General Public License.\n"
2215 "This gdbserver was configured as \"%s\"\n",
2216 PKGVERSION, version, host_name);
2217 }
2218
2219 static void
2220 gdbserver_usage (FILE *stream)
2221 {
2222 fprintf (stream, "Usage:\tgdbserver [OPTIONS] COMM PROG [ARGS ...]\n"
2223 "\tgdbserver [OPTIONS] --attach COMM PID\n"
2224 "\tgdbserver [OPTIONS] --multi COMM\n"
2225 "\n"
2226 "COMM may either be a tty device (for serial debugging), or \n"
2227 "HOST:PORT to listen for a TCP connection.\n"
2228 "\n"
2229 "Options:\n"
2230 " --debug Enable general debugging output.\n"
2231 " --remote-debug Enable remote protocol debugging output.\n"
2232 " --version Display version information and exit.\n"
2233 " --wrapper WRAPPER -- Run WRAPPER to start new programs.\n");
2234 if (REPORT_BUGS_TO[0] && stream == stdout)
2235 fprintf (stream, "Report bugs to \"%s\".\n", REPORT_BUGS_TO);
2236 }
2237
2238 static void
2239 gdbserver_show_disableable (FILE *stream)
2240 {
2241 fprintf (stream, "Disableable packets:\n"
2242 " vCont \tAll vCont packets\n"
2243 " qC \tQuerying the current thread\n"
2244 " qfThreadInfo\tThread listing\n"
2245 " Tthread \tPassing the thread specifier in the T stop reply packet\n"
2246 " threads \tAll of the above\n");
2247 }
2248
2249
2250 #undef require_running
2251 #define require_running(BUF) \
2252 if (!target_running ()) \
2253 { \
2254 write_enn (BUF); \
2255 break; \
2256 }
2257
2258 static int
2259 first_thread_of (struct inferior_list_entry *entry, void *args)
2260 {
2261 int pid = * (int *) args;
2262
2263 if (ptid_get_pid (entry->id) == pid)
2264 return 1;
2265
2266 return 0;
2267 }
2268
2269 static void
2270 kill_inferior_callback (struct inferior_list_entry *entry)
2271 {
2272 struct process_info *process = (struct process_info *) entry;
2273 int pid = ptid_get_pid (process->head.id);
2274
2275 kill_inferior (pid);
2276 discard_queued_stop_replies (pid);
2277 }
2278
2279 /* Callback for for_each_inferior to detach or kill the inferior,
2280 depending on whether we attached to it or not.
2281 We inform the user whether we're detaching or killing the process
2282 as this is only called when gdbserver is about to exit. */
2283
2284 static void
2285 detach_or_kill_inferior_callback (struct inferior_list_entry *entry)
2286 {
2287 struct process_info *process = (struct process_info *) entry;
2288 int pid = ptid_get_pid (process->head.id);
2289
2290 if (process->attached)
2291 detach_inferior (pid);
2292 else
2293 kill_inferior (pid);
2294
2295 discard_queued_stop_replies (pid);
2296 }
2297
2298 /* for_each_inferior callback for detach_or_kill_for_exit to print
2299 the pids of started inferiors. */
2300
2301 static void
2302 print_started_pid (struct inferior_list_entry *entry)
2303 {
2304 struct process_info *process = (struct process_info *) entry;
2305
2306 if (! process->attached)
2307 {
2308 int pid = ptid_get_pid (process->head.id);
2309 fprintf (stderr, " %d", pid);
2310 }
2311 }
2312
2313 /* for_each_inferior callback for detach_or_kill_for_exit to print
2314 the pids of attached inferiors. */
2315
2316 static void
2317 print_attached_pid (struct inferior_list_entry *entry)
2318 {
2319 struct process_info *process = (struct process_info *) entry;
2320
2321 if (process->attached)
2322 {
2323 int pid = ptid_get_pid (process->head.id);
2324 fprintf (stderr, " %d", pid);
2325 }
2326 }
2327
2328 /* Call this when exiting gdbserver with possible inferiors that need
2329 to be killed or detached from. */
2330
2331 static void
2332 detach_or_kill_for_exit (void)
2333 {
2334 /* First print a list of the inferiors we will be killing/detaching.
2335 This is to assist the user, for example, in case the inferior unexpectedly
2336 dies after we exit: did we screw up or did the inferior exit on its own?
2337 Having this info will save some head-scratching. */
2338
2339 if (have_started_inferiors_p ())
2340 {
2341 fprintf (stderr, "Killing process(es):");
2342 for_each_inferior (&all_processes, print_started_pid);
2343 fprintf (stderr, "\n");
2344 }
2345 if (have_attached_inferiors_p ())
2346 {
2347 fprintf (stderr, "Detaching process(es):");
2348 for_each_inferior (&all_processes, print_attached_pid);
2349 fprintf (stderr, "\n");
2350 }
2351
2352 /* Now we can kill or detach the inferiors. */
2353
2354 for_each_inferior (&all_processes, detach_or_kill_inferior_callback);
2355 }
2356
2357 static void
2358 join_inferiors_callback (struct inferior_list_entry *entry)
2359 {
2360 struct process_info *process = (struct process_info *) entry;
2361
2362 /* If we are attached, then we can exit. Otherwise, we need to hang
2363 around doing nothing, until the child is gone. */
2364 if (!process->attached)
2365 join_inferior (ptid_get_pid (process->head.id));
2366 }
2367
2368 int
2369 main (int argc, char *argv[])
2370 {
2371 int bad_attach;
2372 int pid;
2373 char *arg_end, *port;
2374 char **next_arg = &argv[1];
2375 int multi_mode = 0;
2376 int attach = 0;
2377 int was_running;
2378
2379 while (*next_arg != NULL && **next_arg == '-')
2380 {
2381 if (strcmp (*next_arg, "--version") == 0)
2382 {
2383 gdbserver_version ();
2384 exit (0);
2385 }
2386 else if (strcmp (*next_arg, "--help") == 0)
2387 {
2388 gdbserver_usage (stdout);
2389 exit (0);
2390 }
2391 else if (strcmp (*next_arg, "--attach") == 0)
2392 attach = 1;
2393 else if (strcmp (*next_arg, "--multi") == 0)
2394 multi_mode = 1;
2395 else if (strcmp (*next_arg, "--wrapper") == 0)
2396 {
2397 next_arg++;
2398
2399 wrapper_argv = next_arg;
2400 while (*next_arg != NULL && strcmp (*next_arg, "--") != 0)
2401 next_arg++;
2402
2403 if (next_arg == wrapper_argv || *next_arg == NULL)
2404 {
2405 gdbserver_usage (stderr);
2406 exit (1);
2407 }
2408
2409 /* Consume the "--". */
2410 *next_arg = NULL;
2411 }
2412 else if (strcmp (*next_arg, "--debug") == 0)
2413 debug_threads = 1;
2414 else if (strcmp (*next_arg, "--remote-debug") == 0)
2415 remote_debug = 1;
2416 else if (strcmp (*next_arg, "--disable-packet") == 0)
2417 {
2418 gdbserver_show_disableable (stdout);
2419 exit (0);
2420 }
2421 else if (strncmp (*next_arg,
2422 "--disable-packet=",
2423 sizeof ("--disable-packet=") - 1) == 0)
2424 {
2425 char *packets, *tok;
2426
2427 packets = *next_arg += sizeof ("--disable-packet=") - 1;
2428 for (tok = strtok (packets, ",");
2429 tok != NULL;
2430 tok = strtok (NULL, ","))
2431 {
2432 if (strcmp ("vCont", tok) == 0)
2433 disable_packet_vCont = 1;
2434 else if (strcmp ("Tthread", tok) == 0)
2435 disable_packet_Tthread = 1;
2436 else if (strcmp ("qC", tok) == 0)
2437 disable_packet_qC = 1;
2438 else if (strcmp ("qfThreadInfo", tok) == 0)
2439 disable_packet_qfThreadInfo = 1;
2440 else if (strcmp ("threads", tok) == 0)
2441 {
2442 disable_packet_vCont = 1;
2443 disable_packet_Tthread = 1;
2444 disable_packet_qC = 1;
2445 disable_packet_qfThreadInfo = 1;
2446 }
2447 else
2448 {
2449 fprintf (stderr, "Don't know how to disable \"%s\".\n\n",
2450 tok);
2451 gdbserver_show_disableable (stderr);
2452 exit (1);
2453 }
2454 }
2455 }
2456 else
2457 {
2458 fprintf (stderr, "Unknown argument: %s\n", *next_arg);
2459 exit (1);
2460 }
2461
2462 next_arg++;
2463 continue;
2464 }
2465
2466 if (setjmp (toplevel))
2467 {
2468 fprintf (stderr, "Exiting\n");
2469 exit (1);
2470 }
2471
2472 port = *next_arg;
2473 next_arg++;
2474 if (port == NULL || (!attach && !multi_mode && *next_arg == NULL))
2475 {
2476 gdbserver_usage (stderr);
2477 exit (1);
2478 }
2479
2480 bad_attach = 0;
2481 pid = 0;
2482
2483 /* --attach used to come after PORT, so allow it there for
2484 compatibility. */
2485 if (*next_arg != NULL && strcmp (*next_arg, "--attach") == 0)
2486 {
2487 attach = 1;
2488 next_arg++;
2489 }
2490
2491 if (attach
2492 && (*next_arg == NULL
2493 || (*next_arg)[0] == '\0'
2494 || (pid = strtoul (*next_arg, &arg_end, 0)) == 0
2495 || *arg_end != '\0'
2496 || next_arg[1] != NULL))
2497 bad_attach = 1;
2498
2499 if (bad_attach)
2500 {
2501 gdbserver_usage (stderr);
2502 exit (1);
2503 }
2504
2505 initialize_inferiors ();
2506 initialize_async_io ();
2507 initialize_low ();
2508 if (target_supports_tracepoints ())
2509 initialize_tracepoint ();
2510
2511 own_buf = xmalloc (PBUFSIZ + 1);
2512 mem_buf = xmalloc (PBUFSIZ);
2513
2514 if (pid == 0 && *next_arg != NULL)
2515 {
2516 int i, n;
2517
2518 n = argc - (next_arg - argv);
2519 program_argv = xmalloc (sizeof (char *) * (n + 1));
2520 for (i = 0; i < n; i++)
2521 program_argv[i] = xstrdup (next_arg[i]);
2522 program_argv[i] = NULL;
2523
2524 /* Wait till we are at first instruction in program. */
2525 start_inferior (program_argv);
2526
2527 /* We are now (hopefully) stopped at the first instruction of
2528 the target process. This assumes that the target process was
2529 successfully created. */
2530 }
2531 else if (pid != 0)
2532 {
2533 if (attach_inferior (pid) == -1)
2534 error ("Attaching not supported on this target");
2535
2536 /* Otherwise succeeded. */
2537 }
2538 else
2539 {
2540 last_status.kind = TARGET_WAITKIND_EXITED;
2541 last_status.value.integer = 0;
2542 last_ptid = minus_one_ptid;
2543 }
2544
2545 /* Don't report shared library events on the initial connection,
2546 even if some libraries are preloaded. Avoids the "stopped by
2547 shared library event" notice on gdb side. */
2548 dlls_changed = 0;
2549
2550 if (setjmp (toplevel))
2551 {
2552 detach_or_kill_for_exit ();
2553 exit (1);
2554 }
2555
2556 if (last_status.kind == TARGET_WAITKIND_EXITED
2557 || last_status.kind == TARGET_WAITKIND_SIGNALLED)
2558 was_running = 0;
2559 else
2560 was_running = 1;
2561
2562 if (!was_running && !multi_mode)
2563 {
2564 fprintf (stderr, "No program to debug. GDBserver exiting.\n");
2565 exit (1);
2566 }
2567
2568 while (1)
2569 {
2570 noack_mode = 0;
2571 multi_process = 0;
2572 /* Be sure we're out of tfind mode. */
2573 current_traceframe = -1;
2574
2575 remote_open (port);
2576
2577 if (setjmp (toplevel) != 0)
2578 {
2579 /* An error occurred. */
2580 if (response_needed)
2581 {
2582 write_enn (own_buf);
2583 putpkt (own_buf);
2584 }
2585 }
2586
2587 /* Wait for events. This will return when all event sources are
2588 removed from the event loop. */
2589 start_event_loop ();
2590
2591 /* If an exit was requested (using the "monitor exit" command),
2592 terminate now. The only other way to get here is for
2593 getpkt to fail; close the connection and reopen it at the
2594 top of the loop. */
2595
2596 if (exit_requested)
2597 {
2598 detach_or_kill_for_exit ();
2599 exit (0);
2600 }
2601
2602 fprintf (stderr,
2603 "Remote side has terminated connection. "
2604 "GDBserver will reopen the connection.\n");
2605
2606 if (tracing)
2607 {
2608 if (disconnected_tracing)
2609 {
2610 /* Try to enable non-stop/async mode, so we we can both
2611 wait for an async socket accept, and handle async
2612 target events simultaneously. There's also no point
2613 either in having the target always stop all threads,
2614 when we're going to pass signals down without
2615 informing GDB. */
2616 if (!non_stop)
2617 {
2618 if (start_non_stop (1))
2619 non_stop = 1;
2620
2621 /* Detaching implicitly resumes all threads; simply
2622 disconnecting does not. */
2623 }
2624 }
2625 else
2626 {
2627 fprintf (stderr,
2628 "Disconnected tracing disabled; stopping trace run.\n");
2629 stop_tracing ();
2630 }
2631 }
2632 }
2633 }
2634
2635 /* Event loop callback that handles a serial event. The first byte in
2636 the serial buffer gets us here. We expect characters to arrive at
2637 a brisk pace, so we read the rest of the packet with a blocking
2638 getpkt call. */
2639
2640 static int
2641 process_serial_event (void)
2642 {
2643 char ch;
2644 int i = 0;
2645 int signal;
2646 unsigned int len;
2647 CORE_ADDR mem_addr;
2648 int pid;
2649 unsigned char sig;
2650 int packet_len;
2651 int new_packet_len = -1;
2652
2653 /* Used to decide when gdbserver should exit in
2654 multi-mode/remote. */
2655 static int have_ran = 0;
2656
2657 if (!have_ran)
2658 have_ran = target_running ();
2659
2660 disable_async_io ();
2661
2662 response_needed = 0;
2663 packet_len = getpkt (own_buf);
2664 if (packet_len <= 0)
2665 {
2666 remote_close ();
2667 /* Force an event loop break. */
2668 return -1;
2669 }
2670 response_needed = 1;
2671
2672 i = 0;
2673 ch = own_buf[i++];
2674 switch (ch)
2675 {
2676 case 'q':
2677 handle_query (own_buf, packet_len, &new_packet_len);
2678 break;
2679 case 'Q':
2680 handle_general_set (own_buf);
2681 break;
2682 case 'D':
2683 require_running (own_buf);
2684
2685 if (multi_process)
2686 {
2687 i++; /* skip ';' */
2688 pid = strtol (&own_buf[i], NULL, 16);
2689 }
2690 else
2691 pid =
2692 ptid_get_pid (((struct inferior_list_entry *) current_inferior)->id);
2693
2694 if (tracing && disconnected_tracing)
2695 {
2696 struct thread_resume resume_info;
2697 struct process_info *process = find_process_pid (pid);
2698
2699 if (process == NULL)
2700 {
2701 write_enn (own_buf);
2702 break;
2703 }
2704
2705 fprintf (stderr,
2706 "Disconnected tracing in effect, "
2707 "leaving gdbserver attached to the process\n");
2708
2709 /* Make sure we're in non-stop/async mode, so we we can both
2710 wait for an async socket accept, and handle async target
2711 events simultaneously. There's also no point either in
2712 having the target stop all threads, when we're going to
2713 pass signals down without informing GDB. */
2714 if (!non_stop)
2715 {
2716 if (debug_threads)
2717 fprintf (stderr, "Forcing non-stop mode\n");
2718
2719 non_stop = 1;
2720 start_non_stop (1);
2721 }
2722
2723 process->gdb_detached = 1;
2724
2725 /* Detaching implicitly resumes all threads. */
2726 resume_info.thread = minus_one_ptid;
2727 resume_info.kind = resume_continue;
2728 resume_info.sig = 0;
2729 (*the_target->resume) (&resume_info, 1);
2730
2731 write_ok (own_buf);
2732 break; /* from switch/case */
2733 }
2734
2735 fprintf (stderr, "Detaching from process %d\n", pid);
2736 stop_tracing ();
2737 if (detach_inferior (pid) != 0)
2738 write_enn (own_buf);
2739 else
2740 {
2741 discard_queued_stop_replies (pid);
2742 write_ok (own_buf);
2743
2744 if (extended_protocol)
2745 {
2746 /* Treat this like a normal program exit. */
2747 last_status.kind = TARGET_WAITKIND_EXITED;
2748 last_status.value.integer = 0;
2749 last_ptid = pid_to_ptid (pid);
2750
2751 current_inferior = NULL;
2752 }
2753 else
2754 {
2755 putpkt (own_buf);
2756 remote_close ();
2757
2758 /* If we are attached, then we can exit. Otherwise, we
2759 need to hang around doing nothing, until the child is
2760 gone. */
2761 for_each_inferior (&all_processes,
2762 join_inferiors_callback);
2763 exit (0);
2764 }
2765 }
2766 break;
2767 case '!':
2768 extended_protocol = 1;
2769 write_ok (own_buf);
2770 break;
2771 case '?':
2772 handle_status (own_buf);
2773 break;
2774 case 'H':
2775 if (own_buf[1] == 'c' || own_buf[1] == 'g' || own_buf[1] == 's')
2776 {
2777 ptid_t gdb_id, thread_id;
2778 int pid;
2779
2780 require_running (own_buf);
2781
2782 gdb_id = read_ptid (&own_buf[2], NULL);
2783
2784 pid = ptid_get_pid (gdb_id);
2785
2786 if (ptid_equal (gdb_id, null_ptid)
2787 || ptid_equal (gdb_id, minus_one_ptid))
2788 thread_id = null_ptid;
2789 else if (pid != 0
2790 && ptid_equal (pid_to_ptid (pid),
2791 gdb_id))
2792 {
2793 struct thread_info *thread =
2794 (struct thread_info *) find_inferior (&all_threads,
2795 first_thread_of,
2796 &pid);
2797 if (!thread)
2798 {
2799 write_enn (own_buf);
2800 break;
2801 }
2802
2803 thread_id = ((struct inferior_list_entry *)thread)->id;
2804 }
2805 else
2806 {
2807 thread_id = gdb_id_to_thread_id (gdb_id);
2808 if (ptid_equal (thread_id, null_ptid))
2809 {
2810 write_enn (own_buf);
2811 break;
2812 }
2813 }
2814
2815 if (own_buf[1] == 'g')
2816 {
2817 if (ptid_equal (thread_id, null_ptid))
2818 {
2819 /* GDB is telling us to choose any thread. Check if
2820 the currently selected thread is still valid. If
2821 it is not, select the first available. */
2822 struct thread_info *thread =
2823 (struct thread_info *) find_inferior_id (&all_threads,
2824 general_thread);
2825 if (thread == NULL)
2826 thread_id = all_threads.head->id;
2827 }
2828
2829 general_thread = thread_id;
2830 set_desired_inferior (1);
2831 }
2832 else if (own_buf[1] == 'c')
2833 cont_thread = thread_id;
2834 else if (own_buf[1] == 's')
2835 step_thread = thread_id;
2836
2837 write_ok (own_buf);
2838 }
2839 else
2840 {
2841 /* Silently ignore it so that gdb can extend the protocol
2842 without compatibility headaches. */
2843 own_buf[0] = '\0';
2844 }
2845 break;
2846 case 'g':
2847 require_running (own_buf);
2848 if (current_traceframe >= 0)
2849 {
2850 struct regcache *regcache = new_register_cache ();
2851
2852 if (fetch_traceframe_registers (current_traceframe,
2853 regcache, -1) == 0)
2854 registers_to_string (regcache, own_buf);
2855 else
2856 write_enn (own_buf);
2857 free_register_cache (regcache);
2858 }
2859 else
2860 {
2861 struct regcache *regcache;
2862
2863 set_desired_inferior (1);
2864 regcache = get_thread_regcache (current_inferior, 1);
2865 registers_to_string (regcache, own_buf);
2866 }
2867 break;
2868 case 'G':
2869 require_running (own_buf);
2870 if (current_traceframe >= 0)
2871 write_enn (own_buf);
2872 else
2873 {
2874 struct regcache *regcache;
2875
2876 set_desired_inferior (1);
2877 regcache = get_thread_regcache (current_inferior, 1);
2878 registers_from_string (regcache, &own_buf[1]);
2879 write_ok (own_buf);
2880 }
2881 break;
2882 case 'm':
2883 require_running (own_buf);
2884 decode_m_packet (&own_buf[1], &mem_addr, &len);
2885 if (read_memory (mem_addr, mem_buf, len) == 0)
2886 convert_int_to_ascii (mem_buf, own_buf, len);
2887 else
2888 write_enn (own_buf);
2889 break;
2890 case 'M':
2891 require_running (own_buf);
2892 decode_M_packet (&own_buf[1], &mem_addr, &len, &mem_buf);
2893 if (write_memory (mem_addr, mem_buf, len) == 0)
2894 write_ok (own_buf);
2895 else
2896 write_enn (own_buf);
2897 break;
2898 case 'X':
2899 require_running (own_buf);
2900 if (decode_X_packet (&own_buf[1], packet_len - 1,
2901 &mem_addr, &len, &mem_buf) < 0
2902 || write_memory (mem_addr, mem_buf, len) != 0)
2903 write_enn (own_buf);
2904 else
2905 write_ok (own_buf);
2906 break;
2907 case 'C':
2908 require_running (own_buf);
2909 convert_ascii_to_int (own_buf + 1, &sig, 1);
2910 if (target_signal_to_host_p (sig))
2911 signal = target_signal_to_host (sig);
2912 else
2913 signal = 0;
2914 myresume (own_buf, 0, signal);
2915 break;
2916 case 'S':
2917 require_running (own_buf);
2918 convert_ascii_to_int (own_buf + 1, &sig, 1);
2919 if (target_signal_to_host_p (sig))
2920 signal = target_signal_to_host (sig);
2921 else
2922 signal = 0;
2923 myresume (own_buf, 1, signal);
2924 break;
2925 case 'c':
2926 require_running (own_buf);
2927 signal = 0;
2928 myresume (own_buf, 0, signal);
2929 break;
2930 case 's':
2931 require_running (own_buf);
2932 signal = 0;
2933 myresume (own_buf, 1, signal);
2934 break;
2935 case 'Z': /* insert_ ... */
2936 /* Fallthrough. */
2937 case 'z': /* remove_ ... */
2938 {
2939 char *lenptr;
2940 char *dataptr;
2941 CORE_ADDR addr = strtoul (&own_buf[3], &lenptr, 16);
2942 int len = strtol (lenptr + 1, &dataptr, 16);
2943 char type = own_buf[1];
2944 int res;
2945 const int insert = ch == 'Z';
2946
2947 /* Default to unrecognized/unsupported. */
2948 res = 1;
2949 switch (type)
2950 {
2951 case '0': /* software-breakpoint */
2952 case '1': /* hardware-breakpoint */
2953 case '2': /* write watchpoint */
2954 case '3': /* read watchpoint */
2955 case '4': /* access watchpoint */
2956 require_running (own_buf);
2957 if (insert && the_target->insert_point != NULL)
2958 res = (*the_target->insert_point) (type, addr, len);
2959 else if (!insert && the_target->remove_point != NULL)
2960 res = (*the_target->remove_point) (type, addr, len);
2961 break;
2962 default:
2963 break;
2964 }
2965
2966 if (res == 0)
2967 write_ok (own_buf);
2968 else if (res == 1)
2969 /* Unsupported. */
2970 own_buf[0] = '\0';
2971 else
2972 write_enn (own_buf);
2973 break;
2974 }
2975 case 'k':
2976 response_needed = 0;
2977 if (!target_running ())
2978 /* The packet we received doesn't make sense - but we can't
2979 reply to it, either. */
2980 return 0;
2981
2982 fprintf (stderr, "Killing all inferiors\n");
2983 for_each_inferior (&all_processes, kill_inferior_callback);
2984
2985 /* When using the extended protocol, we wait with no program
2986 running. The traditional protocol will exit instead. */
2987 if (extended_protocol)
2988 {
2989 last_status.kind = TARGET_WAITKIND_EXITED;
2990 last_status.value.sig = TARGET_SIGNAL_KILL;
2991 return 0;
2992 }
2993 else
2994 exit (0);
2995
2996 case 'T':
2997 {
2998 ptid_t gdb_id, thread_id;
2999
3000 require_running (own_buf);
3001
3002 gdb_id = read_ptid (&own_buf[1], NULL);
3003 thread_id = gdb_id_to_thread_id (gdb_id);
3004 if (ptid_equal (thread_id, null_ptid))
3005 {
3006 write_enn (own_buf);
3007 break;
3008 }
3009
3010 if (mythread_alive (thread_id))
3011 write_ok (own_buf);
3012 else
3013 write_enn (own_buf);
3014 }
3015 break;
3016 case 'R':
3017 response_needed = 0;
3018
3019 /* Restarting the inferior is only supported in the extended
3020 protocol. */
3021 if (extended_protocol)
3022 {
3023 if (target_running ())
3024 for_each_inferior (&all_processes,
3025 kill_inferior_callback);
3026 fprintf (stderr, "GDBserver restarting\n");
3027
3028 /* Wait till we are at 1st instruction in prog. */
3029 if (program_argv != NULL)
3030 start_inferior (program_argv);
3031 else
3032 {
3033 last_status.kind = TARGET_WAITKIND_EXITED;
3034 last_status.value.sig = TARGET_SIGNAL_KILL;
3035 }
3036 return 0;
3037 }
3038 else
3039 {
3040 /* It is a request we don't understand. Respond with an
3041 empty packet so that gdb knows that we don't support this
3042 request. */
3043 own_buf[0] = '\0';
3044 break;
3045 }
3046 case 'v':
3047 /* Extended (long) request. */
3048 handle_v_requests (own_buf, packet_len, &new_packet_len);
3049 break;
3050
3051 default:
3052 /* It is a request we don't understand. Respond with an empty
3053 packet so that gdb knows that we don't support this
3054 request. */
3055 own_buf[0] = '\0';
3056 break;
3057 }
3058
3059 if (new_packet_len != -1)
3060 putpkt_binary (own_buf, new_packet_len);
3061 else
3062 putpkt (own_buf);
3063
3064 response_needed = 0;
3065
3066 if (!extended_protocol && have_ran && !target_running ())
3067 {
3068 /* In non-stop, defer exiting until GDB had a chance to query
3069 the whole vStopped list (until it gets an OK). */
3070 if (!notif_queue)
3071 {
3072 fprintf (stderr, "GDBserver exiting\n");
3073 remote_close ();
3074 exit (0);
3075 }
3076 }
3077
3078 if (exit_requested)
3079 return -1;
3080
3081 return 0;
3082 }
3083
3084 /* Event-loop callback for serial events. */
3085
3086 int
3087 handle_serial_event (int err, gdb_client_data client_data)
3088 {
3089 if (debug_threads)
3090 fprintf (stderr, "handling possible serial event\n");
3091
3092 /* Really handle it. */
3093 if (process_serial_event () < 0)
3094 return -1;
3095
3096 /* Be sure to not change the selected inferior behind GDB's back.
3097 Important in the non-stop mode asynchronous protocol. */
3098 set_desired_inferior (1);
3099
3100 return 0;
3101 }
3102
3103 /* Event-loop callback for target events. */
3104
3105 int
3106 handle_target_event (int err, gdb_client_data client_data)
3107 {
3108 if (debug_threads)
3109 fprintf (stderr, "handling possible target event\n");
3110
3111 last_ptid = mywait (minus_one_ptid, &last_status,
3112 TARGET_WNOHANG, 1);
3113
3114 if (last_status.kind != TARGET_WAITKIND_IGNORE)
3115 {
3116 int pid = ptid_get_pid (last_ptid);
3117 struct process_info *process = find_process_pid (pid);
3118 int forward_event = !gdb_connected () || process->gdb_detached;
3119
3120 if (last_status.kind == TARGET_WAITKIND_EXITED
3121 || last_status.kind == TARGET_WAITKIND_SIGNALLED)
3122 {
3123 mark_breakpoints_out (process);
3124 mourn_inferior (process);
3125 }
3126
3127 if (forward_event)
3128 {
3129 if (!target_running ())
3130 {
3131 /* The last process exited. We're done. */
3132 exit (0);
3133 }
3134
3135 if (last_status.kind == TARGET_WAITKIND_STOPPED)
3136 {
3137 /* A thread stopped with a signal, but gdb isn't
3138 connected to handle it. Pass it down to the
3139 inferior, as if it wasn't being traced. */
3140 struct thread_resume resume_info;
3141
3142 if (debug_threads)
3143 fprintf (stderr,
3144 "GDB not connected; forwarding event %d for [%s]\n",
3145 (int) last_status.kind,
3146 target_pid_to_str (last_ptid));
3147
3148 resume_info.thread = last_ptid;
3149 resume_info.kind = resume_continue;
3150 resume_info.sig = target_signal_to_host (last_status.value.sig);
3151 (*the_target->resume) (&resume_info, 1);
3152 }
3153 else if (debug_threads)
3154 fprintf (stderr, "GDB not connected; ignoring event %d for [%s]\n",
3155 (int) last_status.kind,
3156 target_pid_to_str (last_ptid));
3157 }
3158 else
3159 {
3160 /* Something interesting. Tell GDB about it. */
3161 push_event (last_ptid, &last_status);
3162 }
3163 }
3164
3165 /* Be sure to not change the selected inferior behind GDB's back.
3166 Important in the non-stop mode asynchronous protocol. */
3167 set_desired_inferior (1);
3168
3169 return 0;
3170 }
This page took 0.125337 seconds and 4 git commands to generate.