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