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