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