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