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