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