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