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