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