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