]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/gdbserver/server.c
C++ify remote notification code
[thirdparty/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
YQ
45#include "common/selftest.h"
46
f8a4e119
SM
47#define require_running_or_return(BUF) \
48 if (!target_running ()) \
49 { \
50 write_enn (BUF); \
51 return; \
52 }
53
54#define require_running_or_break(BUF) \
55 if (!target_running ()) \
56 { \
57 write_enn (BUF); \
58 break; \
59 }
60
b4987c95
SDJ
61/* String containing the current directory (what getwd would return). */
62
63char *current_directory;
64
2090129c
SDJ
65/* The environment to pass to the inferior when creating it. */
66
9a6c7d9c 67static gdb_environ our_environ;
2090129c
SDJ
68
69/* Start the inferior using a shell. */
70
71/* We always try to start the inferior using a shell. */
72
73int startup_with_shell = 1;
a9fa9f7d 74
0d62e5e8
DJ
75int server_waiting;
76
17b1509a 77static int extended_protocol;
2d717e4f
DJ
78static int response_needed;
79static int exit_requested;
80
03f2bd59
JK
81/* --once: Exit after the first connection has closed. */
82int run_once;
83
f2faf941
PA
84/* Whether to report TARGET_WAITKING_NO_RESUMED events. */
85static int report_no_resumed;
86
bd99dc85 87int non_stop;
03583c20 88
25e3c82c
SDJ
89static struct {
90 /* Set the PROGRAM_PATH. Here we adjust the path of the provided
91 binary if needed. */
92 void set (gdb::unique_xmalloc_ptr<char> &&path)
93 {
94 m_path = std::move (path);
95
96 /* Make sure we're using the absolute path of the inferior when
97 creating it. */
98 if (!contains_dir_separator (m_path.get ()))
99 {
100 int reg_file_errno;
101
102 /* Check if the file is in our CWD. If it is, then we prefix
103 its name with CURRENT_DIRECTORY. Otherwise, we leave the
104 name as-is because we'll try searching for it in $PATH. */
105 if (is_regular_file (m_path.get (), &reg_file_errno))
106 m_path = gdb_abspath (m_path.get ());
107 }
108 }
109
110 /* Return the PROGRAM_PATH. */
111 char *get ()
112 { return m_path.get (); }
113
114private:
115 /* The program name, adjusted if needed. */
116 gdb::unique_xmalloc_ptr<char> m_path;
117} program_path;
2090129c
SDJ
118static std::vector<char *> program_args;
119static std::string wrapper_argv;
2d717e4f 120
a9fa9f7d
DJ
121/* The PID of the originally created or attached inferior. Used to
122 send signals to the process when GDB sends us an asynchronous interrupt
123 (user hitting Control-C in the client), and to wait for the child to exit
124 when no longer debugging it. */
125
a1928bad 126unsigned long signal_pid;
a9fa9f7d 127
ec56be1b
PA
128/* Set if you want to disable optional thread related packets support
129 in gdbserver, for the sake of testing GDB against stubs that don't
130 support them. */
131int disable_packet_vCont;
132int disable_packet_Tthread;
133int disable_packet_qC;
134int disable_packet_qfThreadInfo;
135
bd99dc85
PA
136static unsigned char *mem_buf;
137
14a00470
YQ
138/* A sub-class of 'struct notif_event' for stop, holding information
139 relative to a single stop reply. We keep a queue of these to
140 push to GDB in non-stop mode. */
141
bd99dc85
PA
142struct vstop_notif
143{
14a00470 144 struct notif_event base;
bd99dc85
PA
145
146 /* Thread or process that got the event. */
95954743 147 ptid_t ptid;
bd99dc85
PA
148
149 /* Event info. */
150 struct target_waitstatus status;
151};
152
f4abbc16
MM
153/* The current btrace configuration. This is gdbserver's mirror of GDB's
154 btrace configuration. */
155static struct btrace_config current_btrace_conf;
156
14a00470 157DEFINE_QUEUE_P (notif_event_p);
bd99dc85 158
c12a5089
SC
159/* The client remote protocol state. */
160
161static client_state g_client_state;
162
163client_state &
164get_client_state ()
165{
166 client_state &cs = g_client_state;
167 return cs;
168}
169
170
bd99dc85
PA
171/* Put a stop reply to the stop reply queue. */
172
173static void
95954743 174queue_stop_reply (ptid_t ptid, struct target_waitstatus *status)
bd99dc85 175{
8d749320 176 struct vstop_notif *new_notif = XNEW (struct vstop_notif);
bd99dc85 177
bd99dc85
PA
178 new_notif->ptid = ptid;
179 new_notif->status = *status;
180
14a00470 181 notif_event_enque (&notif_stop, (struct notif_event *) new_notif);
bd99dc85
PA
182}
183
14a00470 184static int
465a859e
PA
185remove_all_on_match_ptid (QUEUE (notif_event_p) *q,
186 QUEUE_ITER (notif_event_p) *iter,
187 struct notif_event *event,
188 void *data)
bd99dc85 189{
465a859e
PA
190 ptid_t filter_ptid = *(ptid_t *) data;
191 struct vstop_notif *vstop_event = (struct vstop_notif *) event;
d20a8ad9 192
26a57c92 193 if (vstop_event->ptid.matches (filter_ptid))
bd99dc85 194 {
14a00470
YQ
195 if (q->free_func != NULL)
196 q->free_func (event);
197
198 QUEUE_remove_elem (notif_event_p, q, iter);
bd99dc85 199 }
14a00470
YQ
200
201 return 1;
bd99dc85
PA
202}
203
465a859e 204/* See server.h. */
bd99dc85 205
465a859e
PA
206void
207discard_queued_stop_replies (ptid_t ptid)
bd99dc85 208{
14a00470 209 QUEUE_iterate (notif_event_p, notif_stop.queue,
465a859e 210 remove_all_on_match_ptid, &ptid);
bd99dc85
PA
211}
212
bd99dc85 213static void
14a00470 214vstop_notif_reply (struct notif_event *event, char *own_buf)
bd99dc85 215{
14a00470
YQ
216 struct vstop_notif *vstop = (struct vstop_notif *) event;
217
218 prepare_resume_reply (own_buf, vstop->ptid, &vstop->status);
bd99dc85
PA
219}
220
5a04c4cf
PA
221/* QUEUE_iterate callback helper for in_queued_stop_replies. */
222
223static int
224in_queued_stop_replies_ptid (QUEUE (notif_event_p) *q,
225 QUEUE_ITER (notif_event_p) *iter,
226 struct notif_event *event,
227 void *data)
228{
229 ptid_t filter_ptid = *(ptid_t *) data;
230 struct vstop_notif *vstop_event = (struct vstop_notif *) event;
231
26a57c92 232 if (vstop_event->ptid.matches (filter_ptid))
5a04c4cf
PA
233 return 0;
234
235 /* Don't resume fork children that GDB does not know about yet. */
236 if ((vstop_event->status.kind == TARGET_WAITKIND_FORKED
237 || vstop_event->status.kind == TARGET_WAITKIND_VFORKED)
26a57c92 238 && vstop_event->status.value.related_pid.matches (filter_ptid))
5a04c4cf
PA
239 return 0;
240
241 return 1;
242}
243
244/* See server.h. */
245
246int
247in_queued_stop_replies (ptid_t ptid)
248{
249 return !QUEUE_iterate (notif_event_p, notif_stop.queue,
250 in_queued_stop_replies_ptid, &ptid);
251}
252
14a00470
YQ
253struct notif_server notif_stop =
254{
255 "vStopped", "Stop", NULL, vstop_notif_reply,
256};
257
2d717e4f
DJ
258static int
259target_running (void)
260{
649ebbca 261 return get_first_thread () != NULL;
2d717e4f
DJ
262}
263
2090129c 264/* See common/common-inferior.h. */
ccd213ac 265
2090129c
SDJ
266const char *
267get_exec_wrapper ()
268{
269 return !wrapper_argv.empty () ? wrapper_argv.c_str () : NULL;
270}
eb97750b 271
2090129c 272/* See common/common-inferior.h. */
eb97750b 273
2090129c
SDJ
274char *
275get_exec_file (int err)
276{
25e3c82c 277 if (err && program_path.get () == NULL)
2090129c 278 error (_("No executable file specified."));
ccd213ac 279
25e3c82c 280 return program_path.get ();
2090129c 281}
5b1c542e 282
2090129c 283/* See server.h. */
d20a8ad9 284
9a6c7d9c 285gdb_environ *
2090129c
SDJ
286get_environ ()
287{
9a6c7d9c 288 return &our_environ;
c906108c
SS
289}
290
45b7b345 291static int
5b1c542e 292attach_inferior (int pid)
45b7b345 293{
c12a5089 294 client_state &cs = get_client_state ();
45b7b345
DJ
295 /* myattach should return -1 if attaching is unsupported,
296 0 if it succeeded, and call error() otherwise. */
a9fa9f7d 297
df0da8a2
AH
298 if (find_process_pid (pid) != nullptr)
299 error ("Already attached to process %d\n", pid);
300
45b7b345
DJ
301 if (myattach (pid) != 0)
302 return -1;
303
6910d122 304 fprintf (stderr, "Attached; pid = %d\n", pid);
b80864fb 305 fflush (stderr);
6910d122 306
a9fa9f7d
DJ
307 /* FIXME - It may be that we should get the SIGNAL_PID from the
308 attach function, so that it can be the main thread instead of
309 whichever we were told to attach to. */
310 signal_pid = pid;
311
bd99dc85
PA
312 if (!non_stop)
313 {
f2907e49 314 cs.last_ptid = mywait (ptid_t (pid), &cs.last_status, 0, 0);
bd99dc85
PA
315
316 /* GDB knows to ignore the first SIGSTOP after attaching to a running
317 process using the "attach" command, but this is different; it's
318 just using "target remote". Pretend it's just starting up. */
c12a5089
SC
319 if (cs.last_status.kind == TARGET_WAITKIND_STOPPED
320 && cs.last_status.value.sig == GDB_SIGNAL_STOP)
321 cs.last_status.value.sig = GDB_SIGNAL_TRAP;
d20a8ad9 322
0bfdf32f 323 current_thread->last_resume_kind = resume_stop;
c12a5089 324 current_thread->last_status = cs.last_status;
bd99dc85 325 }
9db87ebd 326
45b7b345
DJ
327 return 0;
328}
329
c906108c 330extern int remote_debug;
ce3a066d 331
0876f84a
DJ
332/* Decode a qXfer read request. Return 0 if everything looks OK,
333 or -1 otherwise. */
334
335static int
d08aafef 336decode_xfer_read (char *buf, CORE_ADDR *ofs, unsigned int *len)
0876f84a 337{
d08aafef
PA
338 /* After the read marker and annex, qXfer looks like a
339 traditional 'm' packet. */
340 decode_m_packet (buf, ofs, len);
341
342 return 0;
343}
344
345static int
346decode_xfer (char *buf, char **object, char **rw, char **annex, char **offset)
347{
348 /* Extract and NUL-terminate the object. */
349 *object = buf;
350 while (*buf && *buf != ':')
351 buf++;
352 if (*buf == '\0')
353 return -1;
354 *buf++ = 0;
355
356 /* Extract and NUL-terminate the read/write action. */
357 *rw = buf;
358 while (*buf && *buf != ':')
359 buf++;
360 if (*buf == '\0')
361 return -1;
362 *buf++ = 0;
363
0876f84a
DJ
364 /* Extract and NUL-terminate the annex. */
365 *annex = buf;
366 while (*buf && *buf != ':')
367 buf++;
368 if (*buf == '\0')
369 return -1;
370 *buf++ = 0;
371
d08aafef 372 *offset = buf;
0876f84a
DJ
373 return 0;
374}
375
376/* Write the response to a successful qXfer read. Returns the
377 length of the (binary) data stored in BUF, corresponding
378 to as much of DATA/LEN as we could fit. IS_MORE controls
379 the first character of the response. */
380static int
f98cd059 381write_qxfer_response (char *buf, const gdb_byte *data, int len, int is_more)
0876f84a
DJ
382{
383 int out_len;
384
385 if (is_more)
386 buf[0] = 'm';
387 else
388 buf[0] = 'l';
389
124e13d9
SM
390 return remote_escape_output (data, len, 1, (unsigned char *) buf + 1,
391 &out_len, PBUFSIZ - 2) + 1;
0876f84a
DJ
392}
393
f4abbc16 394/* Handle btrace enabling in BTS format. */
9accd112 395
9ee23a85 396static void
f4abbc16 397handle_btrace_enable_bts (struct thread_info *thread)
9accd112
MM
398{
399 if (thread->btrace != NULL)
9ee23a85 400 error (_("Btrace already enabled."));
9accd112 401
f4abbc16 402 current_btrace_conf.format = BTRACE_FORMAT_BTS;
9c80ecd6 403 thread->btrace = target_enable_btrace (thread->id, &current_btrace_conf);
9accd112
MM
404}
405
bc504a31 406/* Handle btrace enabling in Intel Processor Trace format. */
b20a6524 407
9ee23a85 408static void
b20a6524
MM
409handle_btrace_enable_pt (struct thread_info *thread)
410{
411 if (thread->btrace != NULL)
9ee23a85 412 error (_("Btrace already enabled."));
b20a6524
MM
413
414 current_btrace_conf.format = BTRACE_FORMAT_PT;
9c80ecd6 415 thread->btrace = target_enable_btrace (thread->id, &current_btrace_conf);
b20a6524
MM
416}
417
9accd112
MM
418/* Handle btrace disabling. */
419
9ee23a85 420static void
9accd112
MM
421handle_btrace_disable (struct thread_info *thread)
422{
423
424 if (thread->btrace == NULL)
9ee23a85 425 error (_("Branch tracing not enabled."));
9accd112
MM
426
427 if (target_disable_btrace (thread->btrace) != 0)
9ee23a85 428 error (_("Could not disable branch tracing."));
9accd112
MM
429
430 thread->btrace = NULL;
9accd112
MM
431}
432
433/* Handle the "Qbtrace" packet. */
434
435static int
436handle_btrace_general_set (char *own_buf)
437{
c12a5089 438 client_state &cs = get_client_state ();
9accd112 439 struct thread_info *thread;
9accd112
MM
440 char *op;
441
61012eef 442 if (!startswith (own_buf, "Qbtrace:"))
9accd112
MM
443 return 0;
444
445 op = own_buf + strlen ("Qbtrace:");
446
d7e15655
TT
447 if (cs.general_thread == null_ptid
448 || cs.general_thread == minus_one_ptid)
9accd112
MM
449 {
450 strcpy (own_buf, "E.Must select a single thread.");
451 return -1;
452 }
453
c12a5089 454 thread = find_thread_ptid (cs.general_thread);
9accd112
MM
455 if (thread == NULL)
456 {
457 strcpy (own_buf, "E.No such thread.");
458 return -1;
459 }
460
9ee23a85
MM
461 TRY
462 {
463 if (strcmp (op, "bts") == 0)
464 handle_btrace_enable_bts (thread);
465 else if (strcmp (op, "pt") == 0)
466 handle_btrace_enable_pt (thread);
467 else if (strcmp (op, "off") == 0)
468 handle_btrace_disable (thread);
469 else
470 error (_("Bad Qbtrace operation. Use bts, pt, or off."));
471
472 write_ok (own_buf);
473 }
474 CATCH (exception, RETURN_MASK_ERROR)
475 {
476 sprintf (own_buf, "E.%s", exception.message);
477 }
478 END_CATCH
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
b1223e78
MM
1878 TRY
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
MM
1883 }
1884 CATCH (exception, RETURN_MASK_ERROR)
969c39fb 1885 {
c12a5089 1886 sprintf (cs.own_buf, "E.%s", exception.message);
b1223e78 1887 result = -1;
969c39fb 1888 }
b1223e78
MM
1889 END_CATCH
1890
1891 if (result != 0)
1892 return -3;
9accd112
MM
1893 }
1894 else if (offset > cache.used_size)
1895 {
1896 buffer_free (&cache);
1897 return -3;
1898 }
1899
1900 if (len > cache.used_size - offset)
1901 len = cache.used_size - offset;
1902
1903 memcpy (readbuf, cache.buffer + offset, len);
1904
1905 return len;
1906}
1907
f4abbc16
MM
1908/* Handle qXfer:btrace-conf:read. */
1909
1910static int
1911handle_qxfer_btrace_conf (const char *annex,
1912 gdb_byte *readbuf, const gdb_byte *writebuf,
1913 ULONGEST offset, LONGEST len)
1914{
c12a5089 1915 client_state &cs = get_client_state ();
f4abbc16
MM
1916 static struct buffer cache;
1917 struct thread_info *thread;
1918 int result;
1919
b1223e78 1920 if (writebuf != NULL)
f4abbc16
MM
1921 return -2;
1922
f0db101d 1923 if (annex[0] != '\0')
f4abbc16
MM
1924 return -1;
1925
d7e15655
TT
1926 if (cs.general_thread == null_ptid
1927 || cs.general_thread == minus_one_ptid)
f4abbc16 1928 {
c12a5089 1929 strcpy (cs.own_buf, "E.Must select a single thread.");
f4abbc16
MM
1930 return -3;
1931 }
1932
c12a5089 1933 thread = find_thread_ptid (cs.general_thread);
f4abbc16
MM
1934 if (thread == NULL)
1935 {
c12a5089 1936 strcpy (cs.own_buf, "E.No such thread.");
f4abbc16
MM
1937 return -3;
1938 }
1939
1940 if (thread->btrace == NULL)
1941 {
c12a5089 1942 strcpy (cs.own_buf, "E.Btrace not enabled.");
f4abbc16
MM
1943 return -3;
1944 }
1945
1946 if (offset == 0)
1947 {
1948 buffer_free (&cache);
1949
b1223e78
MM
1950 TRY
1951 {
1952 result = target_read_btrace_conf (thread->btrace, &cache);
1953 if (result != 0)
c12a5089 1954 memcpy (cs.own_buf, cache.buffer, cache.used_size);
b1223e78
MM
1955 }
1956 CATCH (exception, RETURN_MASK_ERROR)
f4abbc16 1957 {
c12a5089 1958 sprintf (cs.own_buf, "E.%s", exception.message);
b1223e78 1959 result = -1;
f4abbc16 1960 }
b1223e78
MM
1961 END_CATCH
1962
1963 if (result != 0)
1964 return -3;
f4abbc16
MM
1965 }
1966 else if (offset > cache.used_size)
1967 {
1968 buffer_free (&cache);
1969 return -3;
1970 }
1971
1972 if (len > cache.used_size - offset)
1973 len = cache.used_size - offset;
1974
1975 memcpy (readbuf, cache.buffer + offset, len);
1976
1977 return len;
1978}
1979
d08aafef
PA
1980static const struct qxfer qxfer_packets[] =
1981 {
1982 { "auxv", handle_qxfer_auxv },
9accd112 1983 { "btrace", handle_qxfer_btrace },
f4abbc16 1984 { "btrace-conf", handle_qxfer_btrace_conf },
e57f1de3 1985 { "exec-file", handle_qxfer_exec_file},
78d85199 1986 { "fdpic", handle_qxfer_fdpic},
d08aafef
PA
1987 { "features", handle_qxfer_features },
1988 { "libraries", handle_qxfer_libraries },
2268b414 1989 { "libraries-svr4", handle_qxfer_libraries_svr4 },
d08aafef
PA
1990 { "osdata", handle_qxfer_osdata },
1991 { "siginfo", handle_qxfer_siginfo },
1992 { "spu", handle_qxfer_spu },
1993 { "statictrace", handle_qxfer_statictrace },
1994 { "threads", handle_qxfer_threads },
b3b9301e 1995 { "traceframe-info", handle_qxfer_traceframe_info },
d08aafef
PA
1996 };
1997
1998static int
1999handle_qxfer (char *own_buf, int packet_len, int *new_packet_len_p)
2000{
2001 int i;
2002 char *object;
2003 char *rw;
2004 char *annex;
2005 char *offset;
2006
61012eef 2007 if (!startswith (own_buf, "qXfer:"))
d08aafef
PA
2008 return 0;
2009
2010 /* Grab the object, r/w and annex. */
2011 if (decode_xfer (own_buf + 6, &object, &rw, &annex, &offset) < 0)
2012 {
2013 write_enn (own_buf);
2014 return 1;
2015 }
2016
2017 for (i = 0;
2018 i < sizeof (qxfer_packets) / sizeof (qxfer_packets[0]);
2019 i++)
2020 {
2021 const struct qxfer *q = &qxfer_packets[i];
2022
2023 if (strcmp (object, q->object) == 0)
2024 {
2025 if (strcmp (rw, "read") == 0)
2026 {
2027 unsigned char *data;
2028 int n;
2029 CORE_ADDR ofs;
2030 unsigned int len;
2031
2032 /* Grab the offset and length. */
2033 if (decode_xfer_read (offset, &ofs, &len) < 0)
2034 {
2035 write_enn (own_buf);
2036 return 1;
2037 }
2038
2039 /* Read one extra byte, as an indicator of whether there is
2040 more. */
2041 if (len > PBUFSIZ - 2)
2042 len = PBUFSIZ - 2;
224c3ddb 2043 data = (unsigned char *) malloc (len + 1);
d08aafef
PA
2044 if (data == NULL)
2045 {
2046 write_enn (own_buf);
2047 return 1;
2048 }
2049 n = (*q->xfer) (annex, data, NULL, ofs, len + 1);
2050 if (n == -2)
2051 {
2052 free (data);
2053 return 0;
2054 }
5cc22e4c
MM
2055 else if (n == -3)
2056 {
2057 /* Preserve error message. */
2058 }
d08aafef
PA
2059 else if (n < 0)
2060 write_enn (own_buf);
2061 else if (n > len)
2062 *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
2063 else
2064 *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
2065
2066 free (data);
2067 return 1;
2068 }
2069 else if (strcmp (rw, "write") == 0)
2070 {
2071 int n;
2072 unsigned int len;
2073 CORE_ADDR ofs;
2074 unsigned char *data;
2075
2076 strcpy (own_buf, "E00");
224c3ddb 2077 data = (unsigned char *) malloc (packet_len - (offset - own_buf));
d08aafef
PA
2078 if (data == NULL)
2079 {
2080 write_enn (own_buf);
2081 return 1;
2082 }
2083 if (decode_xfer_write (offset, packet_len - (offset - own_buf),
2084 &ofs, &len, data) < 0)
2085 {
2086 free (data);
2087 write_enn (own_buf);
2088 return 1;
2089 }
2090
2091 n = (*q->xfer) (annex, NULL, data, ofs, len);
2092 if (n == -2)
2093 {
2094 free (data);
2095 return 0;
2096 }
5cc22e4c
MM
2097 else if (n == -3)
2098 {
2099 /* Preserve error message. */
2100 }
d08aafef
PA
2101 else if (n < 0)
2102 write_enn (own_buf);
2103 else
2104 sprintf (own_buf, "%x", n);
dc146f7c 2105
d08aafef
PA
2106 free (data);
2107 return 1;
2108 }
dc146f7c 2109
d08aafef
PA
2110 return 0;
2111 }
2112 }
dc146f7c 2113
d08aafef 2114 return 0;
dc146f7c
VP
2115}
2116
30ba68cb
MS
2117/* Compute 32 bit CRC from inferior memory.
2118
2119 On success, return 32 bit CRC.
2120 On failure, return (unsigned long long) -1. */
2121
2122static unsigned long long
2123crc32 (CORE_ADDR base, int len, unsigned int crc)
2124{
30ba68cb
MS
2125 while (len--)
2126 {
2127 unsigned char byte = 0;
2128
2129 /* Return failure if memory read fails. */
2130 if (read_inferior_memory (base, &byte, 1) != 0)
2131 return (unsigned long long) -1;
2132
65da7f14 2133 crc = xcrc32 (&byte, 1, crc);
30ba68cb
MS
2134 base++;
2135 }
2136 return (unsigned long long) crc;
2137}
2138
043c3577
MM
2139/* Add supported btrace packets to BUF. */
2140
2141static void
2142supported_btrace_packets (char *buf)
2143{
de6242d3
MM
2144 strcat (buf, ";Qbtrace:bts+");
2145 strcat (buf, ";Qbtrace-conf:bts:size+");
2146 strcat (buf, ";Qbtrace:pt+");
2147 strcat (buf, ";Qbtrace-conf:pt:size+");
043c3577
MM
2148 strcat (buf, ";Qbtrace:off+");
2149 strcat (buf, ";qXfer:btrace:read+");
f4abbc16 2150 strcat (buf, ";qXfer:btrace-conf:read+");
043c3577
MM
2151}
2152
ce3a066d 2153/* Handle all of the extended 'q' packets. */
d08aafef 2154
5b3da067 2155static void
0e7f50da 2156handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
ce3a066d 2157{
c12a5089 2158 client_state &cs = get_client_state ();
9c80ecd6 2159 static std::list<thread_info *>::const_iterator thread_iter;
0d62e5e8 2160
bb63802a 2161 /* Reply the current thread id. */
db42f210 2162 if (strcmp ("qC", own_buf) == 0 && !disable_packet_qC)
bb63802a 2163 {
124aceb4 2164 ptid_t ptid;
f8a4e119 2165 require_running_or_return (own_buf);
bd99dc85 2166
c12a5089
SC
2167 if (cs.general_thread != null_ptid && cs.general_thread != minus_one_ptid)
2168 ptid = cs.general_thread;
bd99dc85
PA
2169 else
2170 {
9c80ecd6
SM
2171 thread_iter = all_threads.begin ();
2172 ptid = (*thread_iter)->id;
bd99dc85
PA
2173 }
2174
95954743
PA
2175 sprintf (own_buf, "QC");
2176 own_buf += 2;
124aceb4 2177 write_ptid (own_buf, ptid);
bb63802a
UW
2178 return;
2179 }
2180
ce3a066d
DJ
2181 if (strcmp ("qSymbol::", own_buf) == 0)
2182 {
34c65914
PA
2183 struct thread_info *save_thread = current_thread;
2184
2185 /* For qSymbol, GDB only changes the current thread if the
2186 previous current thread was of a different process. So if
2187 the previous thread is gone, we need to pick another one of
2188 the same process. This can happen e.g., if we followed an
2189 exec in a non-leader thread. */
2190 if (current_thread == NULL)
2191 {
2192 current_thread
e99b03dc 2193 = find_any_thread_of_pid (cs.general_thread.pid ());
34c65914
PA
2194
2195 /* Just in case, if we didn't find a thread, then bail out
2196 instead of crashing. */
2197 if (current_thread == NULL)
2198 {
2199 write_enn (own_buf);
2200 current_thread = save_thread;
2201 return;
2202 }
2203 }
2204
d3bbe7a0
PA
2205 /* GDB is suggesting new symbols have been loaded. This may
2206 mean a new shared library has been detected as loaded, so
2207 take the opportunity to check if breakpoints we think are
2208 inserted, still are. Note that it isn't guaranteed that
2209 we'll see this when a shared library is loaded, and nor will
2210 we see this for unloads (although breakpoints in unloaded
2211 libraries shouldn't trigger), as GDB may not find symbols for
2212 the library at all. We also re-validate breakpoints when we
2213 see a second GDB breakpoint for the same address, and or when
2214 we access breakpoint shadows. */
2215 validate_breakpoints ();
2216
fa593d66
PA
2217 if (target_supports_tracepoints ())
2218 tracepoint_look_up_symbols ();
2219
f0db101d 2220 if (current_thread != NULL && the_target->look_up_symbols != NULL)
2f2893d9
DJ
2221 (*the_target->look_up_symbols) ();
2222
34c65914
PA
2223 current_thread = save_thread;
2224
ce3a066d
DJ
2225 strcpy (own_buf, "OK");
2226 return;
2227 }
2228
db42f210 2229 if (!disable_packet_qfThreadInfo)
0d62e5e8 2230 {
db42f210 2231 if (strcmp ("qfThreadInfo", own_buf) == 0)
0d62e5e8 2232 {
f8a4e119 2233 require_running_or_return (own_buf);
9c80ecd6 2234 thread_iter = all_threads.begin ();
95954743
PA
2235
2236 *own_buf++ = 'm';
9c80ecd6
SM
2237 ptid_t ptid = (*thread_iter)->id;
2238 write_ptid (own_buf, ptid);
2239 thread_iter++;
0d62e5e8
DJ
2240 return;
2241 }
db42f210
PA
2242
2243 if (strcmp ("qsThreadInfo", own_buf) == 0)
0d62e5e8 2244 {
f8a4e119 2245 require_running_or_return (own_buf);
9c80ecd6 2246 if (thread_iter != all_threads.end ())
db42f210 2247 {
95954743 2248 *own_buf++ = 'm';
9c80ecd6
SM
2249 ptid_t ptid = (*thread_iter)->id;
2250 write_ptid (own_buf, ptid);
2251 thread_iter++;
db42f210
PA
2252 return;
2253 }
2254 else
2255 {
2256 sprintf (own_buf, "l");
2257 return;
2258 }
0d62e5e8
DJ
2259 }
2260 }
aa691b87 2261
52fb6437
NS
2262 if (the_target->read_offsets != NULL
2263 && strcmp ("qOffsets", own_buf) == 0)
2264 {
2265 CORE_ADDR text, data;
2d717e4f 2266
f8a4e119 2267 require_running_or_return (own_buf);
52fb6437
NS
2268 if (the_target->read_offsets (&text, &data))
2269 sprintf (own_buf, "Text=%lX;Data=%lX;Bss=%lX",
2270 (long)text, (long)data, (long)data);
2271 else
2272 write_enn (own_buf);
1b3f6016 2273
52fb6437
NS
2274 return;
2275 }
2276
be2a5f71 2277 /* Protocol features query. */
61012eef 2278 if (startswith (own_buf, "qSupported")
be2a5f71
DJ
2279 && (own_buf[10] == ':' || own_buf[10] == '\0'))
2280 {
95954743 2281 char *p = &own_buf[10];
fa593d66 2282 int gdb_supports_qRelocInsn = 0;
95954743
PA
2283
2284 /* Process each feature being provided by GDB. The first
2285 feature will follow a ':', and latter features will follow
2286 ';'. */
2287 if (*p == ':')
d149dd1d
PA
2288 {
2289 char **qsupported = NULL;
2290 int count = 0;
06e03fff 2291 int unknown = 0;
d149dd1d
PA
2292 int i;
2293
2294 /* Two passes, to avoid nested strtok calls in
2295 target_process_qsupported. */
2296 for (p = strtok (p + 1, ";");
2297 p != NULL;
2298 p = strtok (NULL, ";"))
2299 {
2300 count++;
224c3ddb 2301 qsupported = XRESIZEVEC (char *, qsupported, count);
d149dd1d
PA
2302 qsupported[count - 1] = xstrdup (p);
2303 }
2304
2305 for (i = 0; i < count; i++)
2306 {
2307 p = qsupported[i];
2308 if (strcmp (p, "multiprocess+") == 0)
2309 {
2310 /* GDB supports and wants multi-process support if
2311 possible. */
2312 if (target_supports_multi_process ())
c12a5089 2313 cs.multi_process = 1;
d149dd1d 2314 }
fa593d66
PA
2315 else if (strcmp (p, "qRelocInsn+") == 0)
2316 {
2317 /* GDB supports relocate instruction requests. */
2318 gdb_supports_qRelocInsn = 1;
2319 }
1ec68e26
PA
2320 else if (strcmp (p, "swbreak+") == 0)
2321 {
2322 /* GDB wants us to report whether a trap is caused
2323 by a software breakpoint and for us to handle PC
2324 adjustment if necessary on this target. */
2325 if (target_supports_stopped_by_sw_breakpoint ())
c12a5089 2326 cs.swbreak_feature = 1;
1ec68e26
PA
2327 }
2328 else if (strcmp (p, "hwbreak+") == 0)
2329 {
2330 /* GDB wants us to report whether a trap is caused
2331 by a hardware breakpoint. */
2332 if (target_supports_stopped_by_hw_breakpoint ())
c12a5089 2333 cs.hwbreak_feature = 1;
1ec68e26 2334 }
89245bc0
DB
2335 else if (strcmp (p, "fork-events+") == 0)
2336 {
2337 /* GDB supports and wants fork events if possible. */
2338 if (target_supports_fork_events ())
c12a5089 2339 cs.report_fork_events = 1;
89245bc0
DB
2340 }
2341 else if (strcmp (p, "vfork-events+") == 0)
2342 {
2343 /* GDB supports and wants vfork events if possible. */
2344 if (target_supports_vfork_events ())
c12a5089 2345 cs.report_vfork_events = 1;
89245bc0 2346 }
7c5d0fad 2347 else if (strcmp (p, "exec-events+") == 0)
94585166
DB
2348 {
2349 /* GDB supports and wants exec events if possible. */
2350 if (target_supports_exec_events ())
c12a5089 2351 cs.report_exec_events = 1;
94585166 2352 }
750ce8d1 2353 else if (strcmp (p, "vContSupported+") == 0)
c12a5089 2354 cs.vCont_supported = 1;
65706a29
PA
2355 else if (strcmp (p, "QThreadEvents+") == 0)
2356 ;
f2faf941
PA
2357 else if (strcmp (p, "no-resumed+") == 0)
2358 {
2359 /* GDB supports and wants TARGET_WAITKIND_NO_RESUMED
2360 events. */
2361 report_no_resumed = 1;
2362 }
d149dd1d 2363 else
06e03fff
PA
2364 {
2365 /* Move the unknown features all together. */
2366 qsupported[i] = NULL;
2367 qsupported[unknown] = p;
2368 unknown++;
2369 }
d149dd1d
PA
2370 }
2371
06e03fff
PA
2372 /* Give the target backend a chance to process the unknown
2373 features. */
2374 target_process_qsupported (qsupported, unknown);
2375
2376 for (i = 0; i < count; i++)
2377 free (qsupported[i]);
d149dd1d
PA
2378 free (qsupported);
2379 }
95954743 2380
9b224c5e 2381 sprintf (own_buf,
0a2dde4a
SDJ
2382 "PacketSize=%x;QPassSignals+;QProgramSignals+;"
2383 "QStartupWithShell+;QEnvironmentHexEncoded+;"
bc3b087d
SDJ
2384 "QEnvironmentReset+;QEnvironmentUnset+;"
2385 "QSetWorkingDir+",
9b224c5e 2386 PBUFSIZ - 1);
0876f84a 2387
82075af2
JS
2388 if (target_supports_catch_syscall ())
2389 strcat (own_buf, ";QCatchSyscalls+");
2390
2268b414 2391 if (the_target->qxfer_libraries_svr4 != NULL)
b1fbec62
GB
2392 strcat (own_buf, ";qXfer:libraries-svr4:read+"
2393 ";augmented-libraries-svr4-read+");
2268b414
JK
2394 else
2395 {
2396 /* We do not have any hook to indicate whether the non-SVR4 target
2397 backend supports qXfer:libraries:read, so always report it. */
2398 strcat (own_buf, ";qXfer:libraries:read+");
2399 }
255e7678 2400
0876f84a 2401 if (the_target->read_auxv != NULL)
9f2e1e63 2402 strcat (own_buf, ";qXfer:auxv:read+");
2d717e4f 2403
0e7f50da
UW
2404 if (the_target->qxfer_spu != NULL)
2405 strcat (own_buf, ";qXfer:spu:read+;qXfer:spu:write+");
0876f84a 2406
4aa995e1
PA
2407 if (the_target->qxfer_siginfo != NULL)
2408 strcat (own_buf, ";qXfer:siginfo:read+;qXfer:siginfo:write+");
2409
78d85199
YQ
2410 if (the_target->read_loadmap != NULL)
2411 strcat (own_buf, ";qXfer:fdpic:read+");
2412
221c031f
UW
2413 /* We always report qXfer:features:read, as targets may
2414 install XML files on a subsequent call to arch_setup.
2415 If we reported to GDB on startup that we don't support
2416 qXfer:feature:read at all, we will never be re-queried. */
2417 strcat (own_buf, ";qXfer:features:read+");
23181151 2418
c12a5089 2419 if (cs.transport_is_reliable)
a6f3e723 2420 strcat (own_buf, ";QStartNoAckMode+");
07e059b5
VP
2421
2422 if (the_target->qxfer_osdata != NULL)
1b3f6016 2423 strcat (own_buf, ";qXfer:osdata:read+");
07e059b5 2424
cf8fd78b
PA
2425 if (target_supports_multi_process ())
2426 strcat (own_buf, ";multiprocess+");
95954743 2427
89245bc0
DB
2428 if (target_supports_fork_events ())
2429 strcat (own_buf, ";fork-events+");
2430
2431 if (target_supports_vfork_events ())
2432 strcat (own_buf, ";vfork-events+");
2433
94585166
DB
2434 if (target_supports_exec_events ())
2435 strcat (own_buf, ";exec-events+");
2436
bd99dc85
PA
2437 if (target_supports_non_stop ())
2438 strcat (own_buf, ";QNonStop+");
2439
03583c20
UW
2440 if (target_supports_disable_randomization ())
2441 strcat (own_buf, ";QDisableRandomization+");
2442
dc146f7c
VP
2443 strcat (own_buf, ";qXfer:threads:read+");
2444
219f2f23
PA
2445 if (target_supports_tracepoints ())
2446 {
2447 strcat (own_buf, ";ConditionalTracepoints+");
2448 strcat (own_buf, ";TraceStateVariables+");
2449 strcat (own_buf, ";TracepointSource+");
8336d594 2450 strcat (own_buf, ";DisconnectedTracing+");
fa593d66
PA
2451 if (gdb_supports_qRelocInsn && target_supports_fast_tracepoints ())
2452 strcat (own_buf, ";FastTracepoints+");
0fb4aa4b 2453 strcat (own_buf, ";StaticTracepoints+");
1e4d1764 2454 strcat (own_buf, ";InstallInTrace+");
0fb4aa4b 2455 strcat (own_buf, ";qXfer:statictrace:read+");
b3b9301e 2456 strcat (own_buf, ";qXfer:traceframe-info:read+");
d248b706 2457 strcat (own_buf, ";EnableDisableTracepoints+");
f6f899bf 2458 strcat (own_buf, ";QTBuffer:size+");
3065dfb6 2459 strcat (own_buf, ";tracenz+");
219f2f23
PA
2460 }
2461
bd2b2909
AT
2462 if (target_supports_hardware_single_step ()
2463 || target_supports_software_single_step () )
70b90b91 2464 {
70b90b91
YQ
2465 strcat (own_buf, ";ConditionalBreakpoints+");
2466 }
d3ce09f5 2467 strcat (own_buf, ";BreakpointCommands+");
9f3a5c85 2468
d1feda86
YQ
2469 if (target_supports_agent ())
2470 strcat (own_buf, ";QAgent+");
2471
043c3577 2472 supported_btrace_packets (own_buf);
9accd112 2473
1ec68e26
PA
2474 if (target_supports_stopped_by_sw_breakpoint ())
2475 strcat (own_buf, ";swbreak+");
2476
2477 if (target_supports_stopped_by_hw_breakpoint ())
2478 strcat (own_buf, ";hwbreak+");
2479
e57f1de3
GB
2480 if (the_target->pid_to_exec_file != NULL)
2481 strcat (own_buf, ";qXfer:exec-file:read+");
2482
750ce8d1
YQ
2483 strcat (own_buf, ";vContSupported+");
2484
65706a29
PA
2485 strcat (own_buf, ";QThreadEvents+");
2486
f2faf941
PA
2487 strcat (own_buf, ";no-resumed+");
2488
14d2069a
GB
2489 /* Reinitialize components as needed for the new connection. */
2490 hostio_handle_new_gdb_connection ();
de0d863e
DB
2491 target_handle_new_gdb_connection ();
2492
be2a5f71
DJ
2493 return;
2494 }
2495
dae5f5cf
DJ
2496 /* Thread-local storage support. */
2497 if (the_target->get_tls_address != NULL
61012eef 2498 && startswith (own_buf, "qGetTLSAddr:"))
dae5f5cf
DJ
2499 {
2500 char *p = own_buf + 12;
5b1c542e 2501 CORE_ADDR parts[2], address = 0;
dae5f5cf 2502 int i, err;
95954743 2503 ptid_t ptid = null_ptid;
dae5f5cf 2504
f8a4e119 2505 require_running_or_return (own_buf);
2d717e4f 2506
dae5f5cf
DJ
2507 for (i = 0; i < 3; i++)
2508 {
2509 char *p2;
2510 int len;
2511
2512 if (p == NULL)
2513 break;
2514
2515 p2 = strchr (p, ',');
2516 if (p2)
2517 {
2518 len = p2 - p;
2519 p2++;
2520 }
2521 else
2522 {
2523 len = strlen (p);
2524 p2 = NULL;
2525 }
2526
5b1c542e 2527 if (i == 0)
95954743 2528 ptid = read_ptid (p, NULL);
5b1c542e
PA
2529 else
2530 decode_address (&parts[i - 1], p, len);
dae5f5cf
DJ
2531 p = p2;
2532 }
2533
2534 if (p != NULL || i < 3)
2535 err = 1;
2536 else
2537 {
e09875d4 2538 struct thread_info *thread = find_thread_ptid (ptid);
dae5f5cf
DJ
2539
2540 if (thread == NULL)
2541 err = 2;
2542 else
5b1c542e 2543 err = the_target->get_tls_address (thread, parts[0], parts[1],
dae5f5cf
DJ
2544 &address);
2545 }
2546
2547 if (err == 0)
2548 {
c6f46ca0 2549 strcpy (own_buf, paddress(address));
dae5f5cf
DJ
2550 return;
2551 }
2552 else if (err > 0)
2553 {
2554 write_enn (own_buf);
2555 return;
2556 }
2557
2558 /* Otherwise, pretend we do not understand this packet. */
2559 }
2560
711e434b
PM
2561 /* Windows OS Thread Information Block address support. */
2562 if (the_target->get_tib_address != NULL
61012eef 2563 && startswith (own_buf, "qGetTIBAddr:"))
711e434b 2564 {
256642e8 2565 const char *annex;
711e434b
PM
2566 int n;
2567 CORE_ADDR tlb;
2568 ptid_t ptid = read_ptid (own_buf + 12, &annex);
2569
2570 n = (*the_target->get_tib_address) (ptid, &tlb);
2571 if (n == 1)
2572 {
c6f46ca0 2573 strcpy (own_buf, paddress(tlb));
711e434b
PM
2574 return;
2575 }
2576 else if (n == 0)
2577 {
2578 write_enn (own_buf);
2579 return;
2580 }
2581 return;
2582 }
2583
c74d0ad8 2584 /* Handle "monitor" commands. */
61012eef 2585 if (startswith (own_buf, "qRcmd,"))
c74d0ad8 2586 {
224c3ddb 2587 char *mon = (char *) malloc (PBUFSIZ);
c74d0ad8
DJ
2588 int len = strlen (own_buf + 6);
2589
aef93bd7
DE
2590 if (mon == NULL)
2591 {
2592 write_enn (own_buf);
2593 return;
2594 }
2595
ff0e980e
TT
2596 if ((len % 2) != 0
2597 || hex2bin (own_buf + 6, (gdb_byte *) mon, len / 2) != len / 2)
c74d0ad8
DJ
2598 {
2599 write_enn (own_buf);
2600 free (mon);
2601 return;
2602 }
2603 mon[len / 2] = '\0';
2604
2605 write_ok (own_buf);
2606
cdbfd419
PP
2607 if (the_target->handle_monitor_command == NULL
2608 || (*the_target->handle_monitor_command) (mon) == 0)
2609 /* Default processing. */
d73f2619 2610 handle_monitor_command (mon, own_buf);
c74d0ad8
DJ
2611
2612 free (mon);
2613 return;
2614 }
2615
61012eef 2616 if (startswith (own_buf, "qSearch:memory:"))
08388c79 2617 {
f8a4e119 2618 require_running_or_return (own_buf);
08388c79
DE
2619 handle_search_memory (own_buf, packet_len);
2620 return;
2621 }
2622
95954743 2623 if (strcmp (own_buf, "qAttached") == 0
61012eef 2624 || startswith (own_buf, "qAttached:"))
0b16c5cf 2625 {
95954743
PA
2626 struct process_info *process;
2627
2628 if (own_buf[sizeof ("qAttached") - 1])
2629 {
2630 int pid = strtoul (own_buf + sizeof ("qAttached:") - 1, NULL, 16);
9179355e 2631 process = find_process_pid (pid);
95954743
PA
2632 }
2633 else
2634 {
f8a4e119 2635 require_running_or_return (own_buf);
95954743
PA
2636 process = current_process ();
2637 }
2638
2639 if (process == NULL)
2640 {
2641 write_enn (own_buf);
2642 return;
2643 }
2644
2645 strcpy (own_buf, process->attached ? "1" : "0");
0b16c5cf
PA
2646 return;
2647 }
2648
61012eef 2649 if (startswith (own_buf, "qCRC:"))
30ba68cb
MS
2650 {
2651 /* CRC check (compare-section). */
256642e8 2652 const char *comma;
aca22551 2653 ULONGEST base;
30ba68cb
MS
2654 int len;
2655 unsigned long long crc;
2656
f8a4e119 2657 require_running_or_return (own_buf);
aca22551 2658 comma = unpack_varlen_hex (own_buf + 5, &base);
30ba68cb
MS
2659 if (*comma++ != ',')
2660 {
2661 write_enn (own_buf);
2662 return;
2663 }
2664 len = strtoul (comma, NULL, 16);
2665 crc = crc32 (base, len, 0xffffffff);
2666 /* Check for memory failure. */
2667 if (crc == (unsigned long long) -1)
2668 {
2669 write_enn (own_buf);
2670 return;
2671 }
2672 sprintf (own_buf, "C%lx", (unsigned long) crc);
2673 return;
2674 }
2675
d08aafef
PA
2676 if (handle_qxfer (own_buf, packet_len, new_packet_len_p))
2677 return;
2678
219f2f23
PA
2679 if (target_supports_tracepoints () && handle_tracepoint_query (own_buf))
2680 return;
2681
ce3a066d
DJ
2682 /* Otherwise we didn't know what packet it was. Say we didn't
2683 understand it. */
2684 own_buf[0] = 0;
2685}
2686
ce1a5b52 2687static void gdb_wants_all_threads_stopped (void);
b7ea362b
PA
2688static void resume (struct thread_resume *actions, size_t n);
2689
649ebbca
DE
2690/* The callback that is passed to visit_actioned_threads. */
2691typedef int (visit_actioned_threads_callback_ftype)
2692 (const struct thread_resume *, struct thread_info *);
2693
b7ea362b
PA
2694/* Call CALLBACK for any thread to which ACTIONS applies to. Returns
2695 true if CALLBACK returns true. Returns false if no matching thread
649ebbca 2696 is found or CALLBACK results false.
eaddb425 2697 Note: This function is itself a callback for find_thread. */
b7ea362b 2698
eaddb425
SM
2699static bool
2700visit_actioned_threads (thread_info *thread,
2701 const struct thread_resume *actions,
2702 size_t num_actions,
2703 visit_actioned_threads_callback_ftype *callback)
b7ea362b 2704{
eaddb425 2705 for (size_t i = 0; i < num_actions; i++)
b7ea362b 2706 {
649ebbca 2707 const struct thread_resume *action = &actions[i];
b7ea362b 2708
d7e15655
TT
2709 if (action->thread == minus_one_ptid
2710 || action->thread == thread->id
e99b03dc 2711 || ((action->thread.pid ()
9c80ecd6 2712 == thread->id.pid ())
e38504b3 2713 && action->thread.lwp () == -1))
b7ea362b 2714 {
649ebbca 2715 if ((*callback) (action, thread))
eaddb425 2716 return true;
b7ea362b
PA
2717 }
2718 }
2719
eaddb425 2720 return false;
b7ea362b
PA
2721}
2722
2723/* Callback for visit_actioned_threads. If the thread has a pending
2724 status to report, report it now. */
2725
2726static int
2727handle_pending_status (const struct thread_resume *resumption,
2728 struct thread_info *thread)
2729{
c12a5089 2730 client_state &cs = get_client_state ();
b7ea362b
PA
2731 if (thread->status_pending_p)
2732 {
2733 thread->status_pending_p = 0;
2734
c12a5089
SC
2735 cs.last_status = thread->last_status;
2736 cs.last_ptid = thread->id;
2737 prepare_resume_reply (cs.own_buf, cs.last_ptid, &cs.last_status);
b7ea362b
PA
2738 return 1;
2739 }
2740 return 0;
2741}
ce1a5b52 2742
64386c31 2743/* Parse vCont packets. */
5b3da067 2744static void
5b1c542e 2745handle_v_cont (char *own_buf)
64386c31 2746{
256642e8 2747 const char *p;
64386c31 2748 int n = 0, i = 0;
2bd7c093 2749 struct thread_resume *resume_info;
436252de 2750 struct thread_resume default_action { null_ptid };
64386c31
DJ
2751
2752 /* Count the number of semicolons in the packet. There should be one
2753 for every action. */
2754 p = &own_buf[5];
2755 while (p)
2756 {
2757 n++;
2758 p++;
2759 p = strchr (p, ';');
2760 }
2bd7c093 2761
224c3ddb 2762 resume_info = (struct thread_resume *) malloc (n * sizeof (resume_info[0]));
aef93bd7
DE
2763 if (resume_info == NULL)
2764 goto err;
64386c31 2765
64386c31 2766 p = &own_buf[5];
64386c31
DJ
2767 while (*p)
2768 {
2769 p++;
2770
c2d6af84
PA
2771 memset (&resume_info[i], 0, sizeof resume_info[i]);
2772
64386c31 2773 if (p[0] == 's' || p[0] == 'S')
bd99dc85 2774 resume_info[i].kind = resume_step;
c2d6af84
PA
2775 else if (p[0] == 'r')
2776 resume_info[i].kind = resume_step;
64386c31 2777 else if (p[0] == 'c' || p[0] == 'C')
bd99dc85
PA
2778 resume_info[i].kind = resume_continue;
2779 else if (p[0] == 't')
2780 resume_info[i].kind = resume_stop;
64386c31
DJ
2781 else
2782 goto err;
2783
2784 if (p[0] == 'S' || p[0] == 'C')
2785 {
256642e8
PA
2786 char *q;
2787 int sig = strtol (p + 1, &q, 16);
64386c31
DJ
2788 if (p == q)
2789 goto err;
2790 p = q;
2791
e053fbc4 2792 if (!gdb_signal_to_host_p ((enum gdb_signal) sig))
64386c31 2793 goto err;
e053fbc4 2794 resume_info[i].sig = gdb_signal_to_host ((enum gdb_signal) sig);
64386c31 2795 }
c2d6af84
PA
2796 else if (p[0] == 'r')
2797 {
6740dc9c 2798 ULONGEST addr;
c2d6af84 2799
6740dc9c
PA
2800 p = unpack_varlen_hex (p + 1, &addr);
2801 resume_info[i].step_range_start = addr;
c2d6af84 2802
6740dc9c
PA
2803 if (*p != ',')
2804 goto err;
c2d6af84 2805
6740dc9c
PA
2806 p = unpack_varlen_hex (p + 1, &addr);
2807 resume_info[i].step_range_end = addr;
c2d6af84 2808 }
64386c31
DJ
2809 else
2810 {
64386c31
DJ
2811 p = p + 1;
2812 }
2813
2814 if (p[0] == 0)
2815 {
95954743 2816 resume_info[i].thread = minus_one_ptid;
64386c31
DJ
2817 default_action = resume_info[i];
2818
2819 /* Note: we don't increment i here, we'll overwrite this entry
2820 the next time through. */
2821 }
2822 else if (p[0] == ':')
2823 {
256642e8 2824 const char *q;
95954743 2825 ptid_t ptid = read_ptid (p + 1, &q);
a06660f7 2826
64386c31
DJ
2827 if (p == q)
2828 goto err;
2829 p = q;
2830 if (p[0] != ';' && p[0] != 0)
2831 goto err;
2832
95954743 2833 resume_info[i].thread = ptid;
a06660f7 2834
64386c31
DJ
2835 i++;
2836 }
2837 }
2838
2bd7c093
PA
2839 if (i < n)
2840 resume_info[i] = default_action;
64386c31 2841
b7ea362b
PA
2842 resume (resume_info, n);
2843 free (resume_info);
2844 return;
2845
2846err:
2847 write_enn (own_buf);
2848 free (resume_info);
2849 return;
2850}
2851
2852/* Resume target with ACTIONS, an array of NUM_ACTIONS elements. */
2853
2854static void
2855resume (struct thread_resume *actions, size_t num_actions)
2856{
c12a5089 2857 client_state &cs = get_client_state ();
bd99dc85 2858 if (!non_stop)
b7ea362b
PA
2859 {
2860 /* Check if among the threads that GDB wants actioned, there's
2861 one with a pending status to report. If so, skip actually
2862 resuming/stopping and report the pending event
2863 immediately. */
649ebbca 2864
eaddb425
SM
2865 thread_info *thread_with_status = find_thread ([&] (thread_info *thread)
2866 {
2867 return visit_actioned_threads (thread, actions, num_actions,
2868 handle_pending_status);
2869 });
2870
2871 if (thread_with_status != NULL)
b7ea362b 2872 return;
bd99dc85 2873
b7ea362b
PA
2874 enable_async_io ();
2875 }
64386c31 2876
b7ea362b 2877 (*the_target->resume) (actions, num_actions);
64386c31 2878
bd99dc85 2879 if (non_stop)
c12a5089 2880 write_ok (cs.own_buf);
bd99dc85
PA
2881 else
2882 {
c12a5089 2883 cs.last_ptid = mywait (minus_one_ptid, &cs.last_status, 0, 1);
ce1a5b52 2884
c12a5089 2885 if (cs.last_status.kind == TARGET_WAITKIND_NO_RESUMED
f2faf941 2886 && !report_no_resumed)
fa96cb38 2887 {
f2faf941
PA
2888 /* The client does not support this stop reply. At least
2889 return error. */
c12a5089 2890 sprintf (cs.own_buf, "E.No unwaited-for children left.");
fa96cb38
PA
2891 disable_async_io ();
2892 return;
2893 }
2894
c12a5089
SC
2895 if (cs.last_status.kind != TARGET_WAITKIND_EXITED
2896 && cs.last_status.kind != TARGET_WAITKIND_SIGNALLED
2897 && cs.last_status.kind != TARGET_WAITKIND_NO_RESUMED)
2898 current_thread->last_status = cs.last_status;
d20a8ad9 2899
ce1a5b52
PA
2900 /* From the client's perspective, all-stop mode always stops all
2901 threads implicitly (and the target backend has already done
2902 so by now). Tag all threads as "want-stopped", so we don't
2903 resume them implicitly without the client telling us to. */
2904 gdb_wants_all_threads_stopped ();
c12a5089 2905 prepare_resume_reply (cs.own_buf, cs.last_ptid, &cs.last_status);
bd99dc85 2906 disable_async_io ();
6bd31874 2907
c12a5089
SC
2908 if (cs.last_status.kind == TARGET_WAITKIND_EXITED
2909 || cs.last_status.kind == TARGET_WAITKIND_SIGNALLED)
2910 target_mourn_inferior (cs.last_ptid);
bd99dc85 2911 }
64386c31
DJ
2912}
2913
2d717e4f 2914/* Attach to a new program. Return 1 if successful, 0 if failure. */
5b3da067 2915static int
5b1c542e 2916handle_v_attach (char *own_buf)
2d717e4f 2917{
c12a5089 2918 client_state &cs = get_client_state ();
2d717e4f
DJ
2919 int pid;
2920
2921 pid = strtol (own_buf + 8, NULL, 16);
5b1c542e 2922 if (pid != 0 && attach_inferior (pid) == 0)
2d717e4f 2923 {
aeba519e
PA
2924 /* Don't report shared library events after attaching, even if
2925 some libraries are preloaded. GDB will always poll the
2926 library list. Avoids the "stopped by shared library event"
2927 notice on the GDB side. */
2928 dlls_changed = 0;
bd99dc85
PA
2929
2930 if (non_stop)
2931 {
2932 /* In non-stop, we don't send a resume reply. Stop events
2933 will follow up using the normal notification
2934 mechanism. */
2935 write_ok (own_buf);
2936 }
2937 else
c12a5089 2938 prepare_resume_reply (own_buf, cs.last_ptid, &cs.last_status);
bd99dc85 2939
2d717e4f
DJ
2940 return 1;
2941 }
2942 else
2943 {
2944 write_enn (own_buf);
2945 return 0;
2946 }
2947}
2948
2949/* Run a new program. Return 1 if successful, 0 if failure. */
2950static int
5b1c542e 2951handle_v_run (char *own_buf)
2d717e4f 2952{
c12a5089 2953 client_state &cs = get_client_state ();
7c5ded6a
SDJ
2954 char *p, *next_p;
2955 std::vector<char *> new_argv;
2090129c 2956 char *new_program_name = NULL;
2d717e4f
DJ
2957 int i, new_argc;
2958
2959 new_argc = 0;
2960 for (p = own_buf + strlen ("vRun;"); p && *p; p = strchr (p, ';'))
2961 {
2962 p++;
2963 new_argc++;
2964 }
2965
7c5ded6a 2966 for (i = 0, p = own_buf + strlen ("vRun;"); *p; p = next_p, ++i)
2d717e4f
DJ
2967 {
2968 next_p = strchr (p, ';');
2969 if (next_p == NULL)
2970 next_p = p + strlen (p);
2971
2972 if (i == 0 && p == next_p)
7c5ded6a
SDJ
2973 {
2974 /* No program specified. */
2090129c
SDJ
2975 new_program_name = NULL;
2976 }
2977 else if (p == next_p)
2978 {
2979 /* Empty argument. */
2980 new_argv.push_back (xstrdup ("''"));
7c5ded6a 2981 }
2d717e4f
DJ
2982 else
2983 {
7c5ded6a 2984 size_t len = (next_p - p) / 2;
2090129c 2985 /* ARG is the unquoted argument received via the RSP. */
7c5ded6a 2986 char *arg = (char *) xmalloc (len + 1);
2090129c
SDJ
2987 /* FULL_ARGS will contain the quoted version of ARG. */
2988 char *full_arg = (char *) xmalloc ((len + 1) * 2);
2989 /* These are pointers used to navigate the strings above. */
2990 char *tmp_arg = arg;
2991 char *tmp_full_arg = full_arg;
2992 int need_quote = 0;
7c5ded6a
SDJ
2993
2994 hex2bin (p, (gdb_byte *) arg, len);
2995 arg[len] = '\0';
2d717e4f 2996
2090129c
SDJ
2997 while (*tmp_arg != '\0')
2998 {
2999 switch (*tmp_arg)
3000 {
3001 case '\n':
3002 /* Quote \n. */
3003 *tmp_full_arg = '\'';
3004 ++tmp_full_arg;
3005 need_quote = 1;
3006 break;
3007
3008 case '\'':
3009 /* Quote single quote. */
3010 *tmp_full_arg = '\\';
3011 ++tmp_full_arg;
3012 break;
3013
3014 default:
3015 break;
3016 }
3017
3018 *tmp_full_arg = *tmp_arg;
3019 ++tmp_full_arg;
3020 ++tmp_arg;
3021 }
3022
3023 if (need_quote)
3024 *tmp_full_arg++ = '\'';
3025
3026 /* Finish FULL_ARG and push it into the vector containing
3027 the argv. */
3028 *tmp_full_arg = '\0';
3029 if (i == 0)
3030 new_program_name = full_arg;
3031 else
3032 new_argv.push_back (full_arg);
3033 xfree (arg);
3034 }
2d717e4f
DJ
3035 if (*next_p)
3036 next_p++;
2d717e4f 3037 }
7c5ded6a 3038 new_argv.push_back (NULL);
2d717e4f 3039
2090129c 3040 if (new_program_name == NULL)
2d717e4f 3041 {
f142445f
DJ
3042 /* GDB didn't specify a program to run. Use the program from the
3043 last run with the new argument list. */
25e3c82c 3044 if (program_path.get () == NULL)
2d717e4f
DJ
3045 {
3046 write_enn (own_buf);
7c5ded6a 3047 free_vector_argv (new_argv);
2d717e4f
DJ
3048 return 0;
3049 }
2090129c
SDJ
3050 }
3051 else
25e3c82c 3052 program_path.set (gdb::unique_xmalloc_ptr<char> (new_program_name));
f142445f 3053
aef93bd7 3054 /* Free the old argv and install the new one. */
2090129c
SDJ
3055 free_vector_argv (program_args);
3056 program_args = new_argv;
3057
25e3c82c 3058 create_inferior (program_path.get (), program_args);
2d717e4f 3059
c12a5089 3060 if (cs.last_status.kind == TARGET_WAITKIND_STOPPED)
2d717e4f 3061 {
c12a5089 3062 prepare_resume_reply (own_buf, cs.last_ptid, &cs.last_status);
bd99dc85
PA
3063
3064 /* In non-stop, sending a resume reply doesn't set the general
3065 thread, but GDB assumes a vRun sets it (this is so GDB can
3066 query which is the main thread of the new inferior. */
3067 if (non_stop)
c12a5089 3068 cs.general_thread = cs.last_ptid;
bd99dc85 3069
2d717e4f
DJ
3070 return 1;
3071 }
3072 else
3073 {
3074 write_enn (own_buf);
3075 return 0;
3076 }
3077}
3078
95954743 3079/* Kill process. Return 1 if successful, 0 if failure. */
5b3da067 3080static int
95954743
PA
3081handle_v_kill (char *own_buf)
3082{
c12a5089 3083 client_state &cs = get_client_state ();
95954743
PA
3084 int pid;
3085 char *p = &own_buf[6];
c12a5089 3086 if (cs.multi_process)
0f54c268
PM
3087 pid = strtol (p, NULL, 16);
3088 else
3089 pid = signal_pid;
a780ef4f
PA
3090
3091 process_info *proc = find_process_pid (pid);
3092
3093 if (proc != nullptr && kill_inferior (proc) == 0)
95954743 3094 {
c12a5089
SC
3095 cs.last_status.kind = TARGET_WAITKIND_SIGNALLED;
3096 cs.last_status.value.sig = GDB_SIGNAL_KILL;
f2907e49 3097 cs.last_ptid = ptid_t (pid);
c12a5089 3098 discard_queued_stop_replies (cs.last_ptid);
95954743
PA
3099 write_ok (own_buf);
3100 return 1;
3101 }
3102 else
3103 {
3104 write_enn (own_buf);
3105 return 0;
3106 }
3107}
3108
64386c31 3109/* Handle all of the extended 'v' packets. */
28170b88 3110void
5b1c542e 3111handle_v_requests (char *own_buf, int packet_len, int *new_packet_len)
64386c31 3112{
c12a5089 3113 client_state &cs = get_client_state ();
db42f210 3114 if (!disable_packet_vCont)
64386c31 3115 {
de979965
PA
3116 if (strcmp (own_buf, "vCtrlC") == 0)
3117 {
3118 (*the_target->request_interrupt) ();
3119 write_ok (own_buf);
3120 return;
3121 }
3122
61012eef 3123 if (startswith (own_buf, "vCont;"))
db42f210 3124 {
5b1c542e 3125 handle_v_cont (own_buf);
db42f210
PA
3126 return;
3127 }
64386c31 3128
61012eef 3129 if (startswith (own_buf, "vCont?"))
db42f210 3130 {
750ce8d1
YQ
3131 strcpy (own_buf, "vCont;c;C;t");
3132
21536b36
YQ
3133 if (target_supports_hardware_single_step ()
3134 || target_supports_software_single_step ()
c12a5089 3135 || !cs.vCont_supported)
750ce8d1 3136 {
21536b36
YQ
3137 /* If target supports single step either by hardware or by
3138 software, add actions s and S to the list of supported
3139 actions. On the other hand, if GDB doesn't request the
3140 supported vCont actions in qSupported packet, add s and
3141 S to the list too. */
750ce8d1
YQ
3142 own_buf = own_buf + strlen (own_buf);
3143 strcpy (own_buf, ";s;S");
3144 }
3145
c2d6af84
PA
3146 if (target_supports_range_stepping ())
3147 {
3148 own_buf = own_buf + strlen (own_buf);
3149 strcpy (own_buf, ";r");
3150 }
db42f210
PA
3151 return;
3152 }
64386c31
DJ
3153 }
3154
61012eef 3155 if (startswith (own_buf, "vFile:")
a6b151f1
DJ
3156 && handle_vFile (own_buf, packet_len, new_packet_len))
3157 return;
3158
61012eef 3159 if (startswith (own_buf, "vAttach;"))
2d717e4f 3160 {
c12a5089 3161 if ((!extended_protocol || !cs.multi_process) && target_running ())
2d717e4f 3162 {
fd96d250
PA
3163 fprintf (stderr, "Already debugging a process\n");
3164 write_enn (own_buf);
3165 return;
2d717e4f 3166 }
5b1c542e 3167 handle_v_attach (own_buf);
2d717e4f
DJ
3168 return;
3169 }
3170
61012eef 3171 if (startswith (own_buf, "vRun;"))
2d717e4f 3172 {
c12a5089 3173 if ((!extended_protocol || !cs.multi_process) && target_running ())
2d717e4f 3174 {
fd96d250
PA
3175 fprintf (stderr, "Already debugging a process\n");
3176 write_enn (own_buf);
3177 return;
2d717e4f 3178 }
5b1c542e 3179 handle_v_run (own_buf);
2d717e4f
DJ
3180 return;
3181 }
3182
61012eef 3183 if (startswith (own_buf, "vKill;"))
95954743
PA
3184 {
3185 if (!target_running ())
3186 {
3187 fprintf (stderr, "No process to kill\n");
3188 write_enn (own_buf);
3189 return;
3190 }
3191 handle_v_kill (own_buf);
3192 return;
3193 }
3194
14a00470
YQ
3195 if (handle_notif_ack (own_buf, packet_len))
3196 return;
bd99dc85 3197
64386c31
DJ
3198 /* Otherwise we didn't know what packet it was. Say we didn't
3199 understand it. */
3200 own_buf[0] = 0;
3201 return;
3202}
3203
0bfdf32f 3204/* Resume thread and wait for another event. In non-stop mode,
bd99dc85
PA
3205 don't really wait here, but return immediatelly to the event
3206 loop. */
1fd7cdc2 3207static void
5b1c542e 3208myresume (char *own_buf, int step, int sig)
64386c31 3209{
c12a5089 3210 client_state &cs = get_client_state ();
64386c31
DJ
3211 struct thread_resume resume_info[2];
3212 int n = 0;
2bd7c093 3213 int valid_cont_thread;
a20d5e98 3214
d7e15655
TT
3215 valid_cont_thread = (cs.cont_thread != null_ptid
3216 && cs.cont_thread != minus_one_ptid);
2bd7c093
PA
3217
3218 if (step || sig || valid_cont_thread)
64386c31 3219 {
fbd5db48 3220 resume_info[0].thread = current_ptid;
bd99dc85
PA
3221 if (step)
3222 resume_info[0].kind = resume_step;
3223 else
3224 resume_info[0].kind = resume_continue;
64386c31 3225 resume_info[0].sig = sig;
64386c31
DJ
3226 n++;
3227 }
2bd7c093
PA
3228
3229 if (!valid_cont_thread)
3230 {
95954743 3231 resume_info[n].thread = minus_one_ptid;
bd99dc85 3232 resume_info[n].kind = resume_continue;
2bd7c093
PA
3233 resume_info[n].sig = 0;
3234 n++;
3235 }
64386c31 3236
b7ea362b 3237 resume (resume_info, n);
bd99dc85
PA
3238}
3239
f0045347 3240/* Callback for for_each_thread. Make a new stop reply for each
bd99dc85
PA
3241 stopped thread. */
3242
99078d34
SM
3243static void
3244queue_stop_reply_callback (thread_info *thread)
bd99dc85 3245{
8336d594
PA
3246 /* For now, assume targets that don't have this callback also don't
3247 manage the thread's last_status field. */
3248 if (the_target->thread_stopped == NULL)
95954743 3249 {
8d749320 3250 struct vstop_notif *new_notif = XNEW (struct vstop_notif);
14a00470 3251
9c80ecd6 3252 new_notif->ptid = thread->id;
14a00470 3253 new_notif->status = thread->last_status;
8336d594
PA
3254 /* Pass the last stop reply back to GDB, but don't notify
3255 yet. */
14a00470
YQ
3256 notif_event_enque (&notif_stop,
3257 (struct notif_event *) new_notif);
8336d594
PA
3258 }
3259 else
3260 {
3261 if (thread_stopped (thread))
3262 {
3263 if (debug_threads)
3360c0bf 3264 {
23fdd69e 3265 std::string status_string
3360c0bf
LM
3266 = target_waitstatus_to_string (&thread->last_status);
3267
87ce2a04 3268 debug_printf ("Reporting thread %s as already stopped with %s\n",
9c80ecd6 3269 target_pid_to_str (thread->id),
23fdd69e 3270 status_string.c_str ());
3360c0bf 3271 }
8336d594 3272
d20a8ad9
PA
3273 gdb_assert (thread->last_status.kind != TARGET_WAITKIND_IGNORE);
3274
8336d594
PA
3275 /* Pass the last stop reply back to GDB, but don't notify
3276 yet. */
9c80ecd6 3277 queue_stop_reply (thread->id, &thread->last_status);
8336d594 3278 }
95954743 3279 }
64386c31
DJ
3280}
3281
ce1a5b52
PA
3282/* Set this inferior threads's state as "want-stopped". We won't
3283 resume this thread until the client gives us another action for
3284 it. */
8336d594
PA
3285
3286static void
9c80ecd6 3287gdb_wants_thread_stopped (thread_info *thread)
8336d594 3288{
8336d594
PA
3289 thread->last_resume_kind = resume_stop;
3290
3291 if (thread->last_status.kind == TARGET_WAITKIND_IGNORE)
3292 {
ce1a5b52
PA
3293 /* Most threads are stopped implicitly (all-stop); tag that with
3294 signal 0. */
8336d594 3295 thread->last_status.kind = TARGET_WAITKIND_STOPPED;
a493e3e2 3296 thread->last_status.value.sig = GDB_SIGNAL_0;
8336d594
PA
3297 }
3298}
3299
3300/* Set all threads' states as "want-stopped". */
3301
3302static void
3303gdb_wants_all_threads_stopped (void)
3304{
f0045347 3305 for_each_thread (gdb_wants_thread_stopped);
8336d594
PA
3306}
3307
f0045347 3308/* Callback for for_each_thread. If the thread is stopped with an
b7ea362b
PA
3309 interesting event, mark it as having a pending event. */
3310
3311static void
9c80ecd6 3312set_pending_status_callback (thread_info *thread)
b7ea362b 3313{
b7ea362b
PA
3314 if (thread->last_status.kind != TARGET_WAITKIND_STOPPED
3315 || (thread->last_status.value.sig != GDB_SIGNAL_0
3316 /* A breakpoint, watchpoint or finished step from a previous
3317 GDB run isn't considered interesting for a new GDB run.
3318 If we left those pending, the new GDB could consider them
3319 random SIGTRAPs. This leaves out real async traps. We'd
3320 have to peek into the (target-specific) siginfo to
3321 distinguish those. */
3322 && thread->last_status.value.sig != GDB_SIGNAL_TRAP))
3323 thread->status_pending_p = 1;
3324}
3325
5b1c542e
PA
3326/* Status handler for the '?' packet. */
3327
3328static void
3329handle_status (char *own_buf)
3330{
c12a5089
SC
3331 client_state &cs = get_client_state ();
3332
8336d594 3333 /* GDB is connected, don't forward events to the target anymore. */
9179355e
SM
3334 for_each_process ([] (process_info *process) {
3335 process->gdb_detached = 0;
3336 });
bd99dc85
PA
3337
3338 /* In non-stop mode, we must send a stop reply for each stopped
3339 thread. In all-stop mode, just send one for the first stopped
3340 thread we find. */
3341
3342 if (non_stop)
3343 {
99078d34 3344 for_each_thread (queue_stop_reply_callback);
bd99dc85
PA
3345
3346 /* The first is sent immediatly. OK is sent if there is no
3347 stopped thread, which is the same handling of the vStopped
3348 packet (by design). */
c12a5089 3349 notif_write_event (&notif_stop, cs.own_buf);
bd99dc85 3350 }
5b1c542e 3351 else
bd99dc85 3352 {
9c80ecd6 3353 thread_info *thread = NULL;
b7ea362b 3354
7984d532 3355 pause_all (0);
fa593d66 3356 stabilize_threads ();
8336d594
PA
3357 gdb_wants_all_threads_stopped ();
3358
b7ea362b
PA
3359 /* We can only report one status, but we might be coming out of
3360 non-stop -- if more than one thread is stopped with
3361 interesting events, leave events for the threads we're not
3362 reporting now pending. They'll be reported the next time the
3363 threads are resumed. Start by marking all interesting events
3364 as pending. */
f0045347 3365 for_each_thread (set_pending_status_callback);
b7ea362b
PA
3366
3367 /* Prefer the last thread that reported an event to GDB (even if
3368 that was a GDB_SIGNAL_TRAP). */
c12a5089
SC
3369 if (cs.last_status.kind != TARGET_WAITKIND_IGNORE
3370 && cs.last_status.kind != TARGET_WAITKIND_EXITED
3371 && cs.last_status.kind != TARGET_WAITKIND_SIGNALLED)
3372 thread = find_thread_ptid (cs.last_ptid);
b7ea362b
PA
3373
3374 /* If the last event thread is not found for some reason, look
3375 for some other thread that might have an event to report. */
3376 if (thread == NULL)
da4ae14a 3377 thread = find_thread ([] (thread_info *thr_arg)
99078d34 3378 {
da4ae14a 3379 return thr_arg->status_pending_p;
99078d34 3380 });
b7ea362b
PA
3381
3382 /* If we're still out of luck, simply pick the first thread in
3383 the thread list. */
3384 if (thread == NULL)
9c80ecd6 3385 thread = get_first_thread ();
b7ea362b
PA
3386
3387 if (thread != NULL)
8336d594 3388 {
b7ea362b
PA
3389 struct thread_info *tp = (struct thread_info *) thread;
3390
3391 /* We're reporting this event, so it's no longer
3392 pending. */
3393 tp->status_pending_p = 0;
3394
3395 /* GDB assumes the current thread is the thread we're
3396 reporting the status for. */
c12a5089 3397 cs.general_thread = thread->id;
f557a88a 3398 set_desired_thread ();
8336d594 3399
b7ea362b 3400 gdb_assert (tp->last_status.kind != TARGET_WAITKIND_IGNORE);
9c80ecd6 3401 prepare_resume_reply (own_buf, tp->id, &tp->last_status);
8336d594 3402 }
bd99dc85
PA
3403 else
3404 strcpy (own_buf, "W00");
3405 }
5b1c542e
PA
3406}
3407
dd24457d
DJ
3408static void
3409gdbserver_version (void)
3410{
c16158bc 3411 printf ("GNU gdbserver %s%s\n"
66d91b39 3412 "Copyright (C) 2019 Free Software Foundation, Inc.\n"
493e2a69
MS
3413 "gdbserver is free software, covered by the "
3414 "GNU General Public License.\n"
dd24457d 3415 "This gdbserver was configured as \"%s\"\n",
c16158bc 3416 PKGVERSION, version, host_name);
dd24457d
DJ
3417}
3418
0bc68c49 3419static void
c16158bc 3420gdbserver_usage (FILE *stream)
0bc68c49 3421{
c16158bc
JM
3422 fprintf (stream, "Usage:\tgdbserver [OPTIONS] COMM PROG [ARGS ...]\n"
3423 "\tgdbserver [OPTIONS] --attach COMM PID\n"
3424 "\tgdbserver [OPTIONS] --multi COMM\n"
3425 "\n"
41f98f02
PA
3426 "COMM may either be a tty device (for serial debugging),\n"
3427 "HOST:PORT to listen for a TCP connection, or '-' or 'stdio' to use \n"
3428 "stdin/stdout of gdbserver.\n"
3429 "PROG is the executable program. ARGS are arguments passed to inferior.\n"
3430 "PID is the process ID to attach to, when --attach is specified.\n"
3431 "\n"
3432 "Operating modes:\n"
3433 "\n"
3434 " --attach Attach to running process PID.\n"
3435 " --multi Start server without a specific program, and\n"
3436 " only quit when explicitly commanded.\n"
3437 " --once Exit after the first connection has closed.\n"
3438 " --help Print this message and then exit.\n"
3439 " --version Display version information and exit.\n"
3440 "\n"
3441 "Other options:\n"
3442 "\n"
3443 " --wrapper WRAPPER -- Run WRAPPER to start new programs.\n"
3444 " --disable-randomization\n"
3445 " Run PROG with address space randomization disabled.\n"
3446 " --no-disable-randomization\n"
3447 " Don't disable address space randomization when\n"
3448 " starting PROG.\n"
aefd8b33
SDJ
3449 " --startup-with-shell\n"
3450 " Start PROG using a shell. I.e., execs a shell that\n"
3451 " then execs PROG. (default)\n"
3452 " --no-startup-with-shell\n"
3453 " Exec PROG directly instead of using a shell.\n"
3454 " Disables argument globbing and variable substitution\n"
3455 " on UNIX-like systems.\n"
41f98f02
PA
3456 "\n"
3457 "Debug options:\n"
c16158bc 3458 "\n"
62709adf 3459 " --debug Enable general debugging output.\n"
87ce2a04
DE
3460 " --debug-format=opt1[,opt2,...]\n"
3461 " Specify extra content in debugging output.\n"
3462 " Options:\n"
3463 " all\n"
3464 " none\n"
87ce2a04 3465 " timestamp\n"
62709adf 3466 " --remote-debug Enable remote protocol debugging output.\n"
41f98f02
PA
3467 " --disable-packet=opt1[,opt2,...]\n"
3468 " Disable support for RSP packets or features.\n"
3469 " Options:\n"
3470 " vCont, Tthread, qC, qfThreadInfo and \n"
3471 " threads (disable all threading packets).\n"
3472 "\n"
3473 "For more information, consult the GDB manual (available as on-line \n"
3474 "info or a printed manual).\n");
c16158bc
JM
3475 if (REPORT_BUGS_TO[0] && stream == stdout)
3476 fprintf (stream, "Report bugs to \"%s\".\n", REPORT_BUGS_TO);
0bc68c49
DJ
3477}
3478
db42f210
PA
3479static void
3480gdbserver_show_disableable (FILE *stream)
3481{
3482 fprintf (stream, "Disableable packets:\n"
3483 " vCont \tAll vCont packets\n"
3484 " qC \tQuerying the current thread\n"
3485 " qfThreadInfo\tThread listing\n"
493e2a69
MS
3486 " Tthread \tPassing the thread specifier in the "
3487 "T stop reply packet\n"
db42f210
PA
3488 " threads \tAll of the above\n");
3489}
3490
95954743 3491static void
9179355e 3492kill_inferior_callback (process_info *process)
95954743 3493{
a780ef4f
PA
3494 kill_inferior (process);
3495 discard_queued_stop_replies (ptid_t (process->pid));
95954743
PA
3496}
3497
9f767825
DE
3498/* Call this when exiting gdbserver with possible inferiors that need
3499 to be killed or detached from. */
3500
3501static void
3502detach_or_kill_for_exit (void)
3503{
3504 /* First print a list of the inferiors we will be killing/detaching.
3505 This is to assist the user, for example, in case the inferior unexpectedly
3506 dies after we exit: did we screw up or did the inferior exit on its own?
3507 Having this info will save some head-scratching. */
3508
3509 if (have_started_inferiors_p ())
3510 {
3511 fprintf (stderr, "Killing process(es):");
9179355e
SM
3512
3513 for_each_process ([] (process_info *process) {
3514 if (!process->attached)
3515 fprintf (stderr, " %d", process->pid);
3516 });
3517
9f767825
DE
3518 fprintf (stderr, "\n");
3519 }
3520 if (have_attached_inferiors_p ())
3521 {
3522 fprintf (stderr, "Detaching process(es):");
9179355e
SM
3523
3524 for_each_process ([] (process_info *process) {
3525 if (process->attached)
3526 fprintf (stderr, " %d", process->pid);
3527 });
3528
9f767825
DE
3529 fprintf (stderr, "\n");
3530 }
3531
3532 /* Now we can kill or detach the inferiors. */
9179355e
SM
3533 for_each_process ([] (process_info *process) {
3534 int pid = process->pid;
3535
3536 if (process->attached)
ef2ddb33 3537 detach_inferior (process);
9179355e 3538 else
a780ef4f 3539 kill_inferior (process);
9f767825 3540
f2907e49 3541 discard_queued_stop_replies (ptid_t (pid));
9179355e 3542 });
9f767825
DE
3543}
3544
860789c7
GB
3545/* Value that will be passed to exit(3) when gdbserver exits. */
3546static int exit_code;
3547
3548/* Cleanup version of detach_or_kill_for_exit. */
3549
3550static void
3551detach_or_kill_for_exit_cleanup (void *ignore)
3552{
860789c7 3553
492d29ea 3554 TRY
860789c7
GB
3555 {
3556 detach_or_kill_for_exit ();
3557 }
3558
492d29ea 3559 CATCH (exception, RETURN_MASK_ALL)
860789c7
GB
3560 {
3561 fflush (stdout);
3562 fprintf (stderr, "Detach or kill failed: %s\n", exception.message);
3563 exit_code = 1;
3564 }
492d29ea 3565 END_CATCH
860789c7
GB
3566}
3567
3568/* Main function. This is called by the real "main" function,
3569 wrapped in a TRY_CATCH that handles any uncaught exceptions. */
3570
3571static void ATTRIBUTE_NORETURN
3572captured_main (int argc, char *argv[])
c906108c 3573{
0729219d
DJ
3574 int bad_attach;
3575 int pid;
fb32b4f7
PA
3576 char *arg_end;
3577 const char *port = NULL;
2d717e4f 3578 char **next_arg = &argv[1];
89dc0afd
JK
3579 volatile int multi_mode = 0;
3580 volatile int attach = 0;
2d717e4f 3581 int was_running;
6d580b63 3582 bool selftest = false;
605fd3c6 3583#if GDB_SELF_TEST
1526853e 3584 const char *selftest_filter = NULL;
605fd3c6 3585#endif
c906108c 3586
b4987c95 3587 current_directory = getcwd (NULL, 0);
c12a5089
SC
3588 client_state &cs = get_client_state ();
3589
b4987c95
SDJ
3590 if (current_directory == NULL)
3591 {
81561546 3592 error (_("Could not find current working directory: %s"),
b4987c95
SDJ
3593 safe_strerror (errno));
3594 }
3595
2d717e4f 3596 while (*next_arg != NULL && **next_arg == '-')
dd24457d 3597 {
2d717e4f
DJ
3598 if (strcmp (*next_arg, "--version") == 0)
3599 {
3600 gdbserver_version ();
3601 exit (0);
3602 }
3603 else if (strcmp (*next_arg, "--help") == 0)
3604 {
c16158bc 3605 gdbserver_usage (stdout);
2d717e4f
DJ
3606 exit (0);
3607 }
3608 else if (strcmp (*next_arg, "--attach") == 0)
3609 attach = 1;
3610 else if (strcmp (*next_arg, "--multi") == 0)
3611 multi_mode = 1;
ccd213ac
DJ
3612 else if (strcmp (*next_arg, "--wrapper") == 0)
3613 {
7c5ded6a
SDJ
3614 char **tmp;
3615
ccd213ac
DJ
3616 next_arg++;
3617
7c5ded6a 3618 tmp = next_arg;
ccd213ac 3619 while (*next_arg != NULL && strcmp (*next_arg, "--") != 0)
7c5ded6a 3620 {
2090129c
SDJ
3621 wrapper_argv += *next_arg;
3622 wrapper_argv += ' ';
7c5ded6a
SDJ
3623 next_arg++;
3624 }
ccd213ac 3625
2090129c
SDJ
3626 if (!wrapper_argv.empty ())
3627 {
3628 /* Erase the last whitespace. */
3629 wrapper_argv.erase (wrapper_argv.end () - 1);
3630 }
3631
7c5ded6a 3632 if (next_arg == tmp || *next_arg == NULL)
ccd213ac 3633 {
c16158bc 3634 gdbserver_usage (stderr);
ccd213ac
DJ
3635 exit (1);
3636 }
3637
3638 /* Consume the "--". */
3639 *next_arg = NULL;
3640 }
2d717e4f
DJ
3641 else if (strcmp (*next_arg, "--debug") == 0)
3642 debug_threads = 1;
61012eef 3643 else if (startswith (*next_arg, "--debug-format="))
87ce2a04 3644 {
2cc05030 3645 std::string error_msg
87ce2a04
DE
3646 = parse_debug_format_options ((*next_arg)
3647 + sizeof ("--debug-format=") - 1, 0);
3648
2cc05030 3649 if (!error_msg.empty ())
87ce2a04 3650 {
2cc05030 3651 fprintf (stderr, "%s", error_msg.c_str ());
87ce2a04
DE
3652 exit (1);
3653 }
3654 }
62709adf
PA
3655 else if (strcmp (*next_arg, "--remote-debug") == 0)
3656 remote_debug = 1;
db42f210
PA
3657 else if (strcmp (*next_arg, "--disable-packet") == 0)
3658 {
3659 gdbserver_show_disableable (stdout);
3660 exit (0);
3661 }
61012eef 3662 else if (startswith (*next_arg, "--disable-packet="))
db42f210
PA
3663 {
3664 char *packets, *tok;
3665
3666 packets = *next_arg += sizeof ("--disable-packet=") - 1;
3667 for (tok = strtok (packets, ",");
3668 tok != NULL;
3669 tok = strtok (NULL, ","))
3670 {
3671 if (strcmp ("vCont", tok) == 0)
3672 disable_packet_vCont = 1;
3673 else if (strcmp ("Tthread", tok) == 0)
3674 disable_packet_Tthread = 1;
3675 else if (strcmp ("qC", tok) == 0)
3676 disable_packet_qC = 1;
3677 else if (strcmp ("qfThreadInfo", tok) == 0)
3678 disable_packet_qfThreadInfo = 1;
3679 else if (strcmp ("threads", tok) == 0)
3680 {
3681 disable_packet_vCont = 1;
3682 disable_packet_Tthread = 1;
3683 disable_packet_qC = 1;
3684 disable_packet_qfThreadInfo = 1;
3685 }
3686 else
3687 {
3688 fprintf (stderr, "Don't know how to disable \"%s\".\n\n",
3689 tok);
3690 gdbserver_show_disableable (stderr);
3691 exit (1);
3692 }
3693 }
3694 }
e0f9f062
DE
3695 else if (strcmp (*next_arg, "-") == 0)
3696 {
3697 /* "-" specifies a stdio connection and is a form of port
3698 specification. */
fb32b4f7
PA
3699 port = STDIO_CONNECTION_NAME;
3700 next_arg++;
e0f9f062
DE
3701 break;
3702 }
03583c20 3703 else if (strcmp (*next_arg, "--disable-randomization") == 0)
c12a5089 3704 cs.disable_randomization = 1;
03583c20 3705 else if (strcmp (*next_arg, "--no-disable-randomization") == 0)
c12a5089 3706 cs.disable_randomization = 0;
aefd8b33
SDJ
3707 else if (strcmp (*next_arg, "--startup-with-shell") == 0)
3708 startup_with_shell = true;
3709 else if (strcmp (*next_arg, "--no-startup-with-shell") == 0)
3710 startup_with_shell = false;
03f2bd59
JK
3711 else if (strcmp (*next_arg, "--once") == 0)
3712 run_once = 1;
6d580b63
YQ
3713 else if (strcmp (*next_arg, "--selftest") == 0)
3714 selftest = true;
1526853e
SM
3715 else if (startswith (*next_arg, "--selftest="))
3716 {
3717 selftest = true;
605fd3c6 3718#if GDB_SELF_TEST
1526853e 3719 selftest_filter = *next_arg + strlen ("--selftest=");
605fd3c6 3720#endif
1526853e 3721 }
2d717e4f
DJ
3722 else
3723 {
3724 fprintf (stderr, "Unknown argument: %s\n", *next_arg);
3725 exit (1);
3726 }
dd24457d 3727
2d717e4f
DJ
3728 next_arg++;
3729 continue;
dd24457d
DJ
3730 }
3731
fb32b4f7
PA
3732 if (port == NULL)
3733 {
3734 port = *next_arg;
3735 next_arg++;
3736 }
6d580b63
YQ
3737 if ((port == NULL || (!attach && !multi_mode && *next_arg == NULL))
3738 && !selftest)
2d717e4f 3739 {
c16158bc 3740 gdbserver_usage (stderr);
2d717e4f
DJ
3741 exit (1);
3742 }
3743
602e3198
JK
3744 /* Remember stdio descriptors. LISTEN_DESC must not be listed, it will be
3745 opened by remote_prepare. */
3746 notice_open_fds ();
3747
e379cee6 3748 save_original_signals_state (false);
f348d89a 3749
e0f9f062
DE
3750 /* We need to know whether the remote connection is stdio before
3751 starting the inferior. Inferiors created in this scenario have
3752 stdin,stdout redirected. So do this here before we call
3753 start_inferior. */
6d580b63
YQ
3754 if (port != NULL)
3755 remote_prepare (port);
e0f9f062 3756
0729219d
DJ
3757 bad_attach = 0;
3758 pid = 0;
2d717e4f
DJ
3759
3760 /* --attach used to come after PORT, so allow it there for
3761 compatibility. */
3762 if (*next_arg != NULL && strcmp (*next_arg, "--attach") == 0)
45b7b345 3763 {
2d717e4f
DJ
3764 attach = 1;
3765 next_arg++;
45b7b345
DJ
3766 }
3767
2d717e4f
DJ
3768 if (attach
3769 && (*next_arg == NULL
3770 || (*next_arg)[0] == '\0'
3771 || (pid = strtoul (*next_arg, &arg_end, 0)) == 0
3772 || *arg_end != '\0'
3773 || next_arg[1] != NULL))
3774 bad_attach = 1;
3775
3776 if (bad_attach)
dd24457d 3777 {
c16158bc 3778 gdbserver_usage (stderr);
dd24457d
DJ
3779 exit (1);
3780 }
c906108c 3781
2090129c 3782 /* Gather information about the environment. */
9a6c7d9c 3783 our_environ = gdb_environ::from_host_environ ();
2090129c 3784
a20d5e98 3785 initialize_async_io ();
4ce44c66 3786 initialize_low ();
2090129c 3787 have_job_control ();
60f662b0 3788 initialize_event_loop ();
219f2f23
PA
3789 if (target_supports_tracepoints ())
3790 initialize_tracepoint ();
465a859e 3791 initialize_notif ();
4ce44c66 3792
224c3ddb 3793 mem_buf = (unsigned char *) xmalloc (PBUFSIZ);
0a30fbc4 3794
6d580b63
YQ
3795 if (selftest)
3796 {
605fd3c6 3797#if GDB_SELF_TEST
1526853e 3798 selftests::run_tests (selftest_filter);
605fd3c6 3799#else
8ecfd7bd 3800 printf (_("Selftests have been disabled for this build.\n"));
605fd3c6 3801#endif
6d580b63
YQ
3802 throw_quit ("Quit");
3803 }
3804
2d717e4f 3805 if (pid == 0 && *next_arg != NULL)
45b7b345 3806 {
2d717e4f
DJ
3807 int i, n;
3808
3809 n = argc - (next_arg - argv);
25e3c82c 3810 program_path.set (gdb::unique_xmalloc_ptr<char> (xstrdup (next_arg[0])));
2090129c
SDJ
3811 for (i = 1; i < n; i++)
3812 program_args.push_back (xstrdup (next_arg[i]));
3813 program_args.push_back (NULL);
2d717e4f 3814
45b7b345 3815 /* Wait till we are at first instruction in program. */
25e3c82c 3816 create_inferior (program_path.get (), program_args);
c906108c 3817
c588c53c
MS
3818 /* We are now (hopefully) stopped at the first instruction of
3819 the target process. This assumes that the target process was
3820 successfully created. */
45b7b345 3821 }
2d717e4f
DJ
3822 else if (pid != 0)
3823 {
5b1c542e 3824 if (attach_inferior (pid) == -1)
2d717e4f
DJ
3825 error ("Attaching not supported on this target");
3826
3827 /* Otherwise succeeded. */
3828 }
45b7b345
DJ
3829 else
3830 {
c12a5089
SC
3831 cs.last_status.kind = TARGET_WAITKIND_EXITED;
3832 cs.last_status.value.integer = 0;
3833 cs.last_ptid = minus_one_ptid;
45b7b345 3834 }
860789c7 3835 make_cleanup (detach_or_kill_for_exit_cleanup, NULL);
c906108c 3836
311de423
PA
3837 /* Don't report shared library events on the initial connection,
3838 even if some libraries are preloaded. Avoids the "stopped by
3839 shared library event" notice on gdb side. */
3840 dlls_changed = 0;
3841
c12a5089
SC
3842 if (cs.last_status.kind == TARGET_WAITKIND_EXITED
3843 || cs.last_status.kind == TARGET_WAITKIND_SIGNALLED)
2d717e4f
DJ
3844 was_running = 0;
3845 else
3846 was_running = 1;
3847
3848 if (!was_running && !multi_mode)
860789c7 3849 error ("No program to debug");
c588c53c 3850
c906108c
SS
3851 while (1)
3852 {
c12a5089
SC
3853 cs.noack_mode = 0;
3854 cs.multi_process = 0;
3855 cs.report_fork_events = 0;
3856 cs.report_vfork_events = 0;
3857 cs.report_exec_events = 0;
8336d594 3858 /* Be sure we're out of tfind mode. */
c12a5089
SC
3859 cs.current_traceframe = -1;
3860 cs.cont_thread = null_ptid;
3861 cs.swbreak_feature = 0;
3862 cs.hwbreak_feature = 0;
3863 cs.vCont_supported = 0;
bd99dc85 3864
2d717e4f 3865 remote_open (port);
c906108c 3866
492d29ea 3867 TRY
2d717e4f 3868 {
860789c7
GB
3869 /* Wait for events. This will return when all event sources
3870 are removed from the event loop. */
3871 start_event_loop ();
2d717e4f 3872
860789c7 3873 /* If an exit was requested (using the "monitor exit"
fddedbe6
PA
3874 command), terminate now. */
3875 if (exit_requested)
3876 throw_quit ("Quit");
3877
3878 /* The only other way to get here is for getpkt to fail:
3879
3880 - If --once was specified, we're done.
bd99dc85 3881
fddedbe6
PA
3882 - If not in extended-remote mode, and we're no longer
3883 debugging anything, simply exit: GDB has disconnected
3884 after processing the last process exit.
3885
3886 - Otherwise, close the connection and reopen it at the
3887 top of the loop. */
3888 if (run_once || (!extended_protocol && !target_running ()))
860789c7 3889 throw_quit ("Quit");
bd99dc85 3890
860789c7
GB
3891 fprintf (stderr,
3892 "Remote side has terminated connection. "
3893 "GDBserver will reopen the connection.\n");
8336d594 3894
860789c7
GB
3895 /* Get rid of any pending statuses. An eventual reconnection
3896 (by the same GDB instance or another) will refresh all its
3897 state from scratch. */
465a859e 3898 discard_queued_stop_replies (minus_one_ptid);
f0045347
SM
3899 for_each_thread ([] (thread_info *thread)
3900 {
3901 thread->status_pending_p = 0;
3902 });
9939e131 3903
860789c7 3904 if (tracing)
8336d594 3905 {
860789c7 3906 if (disconnected_tracing)
8336d594 3907 {
860789c7
GB
3908 /* Try to enable non-stop/async mode, so we we can
3909 both wait for an async socket accept, and handle
3910 async target events simultaneously. There's also
3911 no point either in having the target always stop
3912 all threads, when we're going to pass signals
3913 down without informing GDB. */
3914 if (!non_stop)
3915 {
3916 if (start_non_stop (1))
3917 non_stop = 1;
3918
3919 /* Detaching implicitly resumes all threads;
3920 simply disconnecting does not. */
3921 }
3922 }
3923 else
3924 {
3925 fprintf (stderr,
3926 "Disconnected tracing disabled; "
3927 "stopping trace run.\n");
3928 stop_tracing ();
8336d594
PA
3929 }
3930 }
860789c7 3931 }
492d29ea 3932 CATCH (exception, RETURN_MASK_ERROR)
860789c7 3933 {
608a1e46
PA
3934 fflush (stdout);
3935 fprintf (stderr, "gdbserver: %s\n", exception.message);
3936
860789c7 3937 if (response_needed)
8336d594 3938 {
c12a5089
SC
3939 write_enn (cs.own_buf);
3940 putpkt (cs.own_buf);
8336d594 3941 }
608a1e46
PA
3942
3943 if (run_once)
3944 throw_quit ("Quit");
8336d594 3945 }
492d29ea 3946 END_CATCH
bd99dc85
PA
3947 }
3948}
01f9e8fa 3949
860789c7
GB
3950/* Main function. */
3951
3952int
3953main (int argc, char *argv[])
3954{
860789c7 3955
492d29ea 3956 TRY
860789c7
GB
3957 {
3958 captured_main (argc, argv);
3959 }
492d29ea 3960 CATCH (exception, RETURN_MASK_ALL)
860789c7 3961 {
492d29ea
PA
3962 if (exception.reason == RETURN_ERROR)
3963 {
3964 fflush (stdout);
3965 fprintf (stderr, "%s\n", exception.message);
3966 fprintf (stderr, "Exiting\n");
3967 exit_code = 1;
3968 }
3969
3970 exit (exit_code);
860789c7 3971 }
492d29ea 3972 END_CATCH
860789c7 3973
492d29ea 3974 gdb_assert_not_reached ("captured_main should never return");
860789c7
GB
3975}
3976
802e8e6d
PA
3977/* Process options coming from Z packets for a breakpoint. PACKET is
3978 the packet buffer. *PACKET is updated to point to the first char
3979 after the last processed option. */
9f3a5c85
LM
3980
3981static void
256642e8 3982process_point_options (struct gdb_breakpoint *bp, const char **packet)
9f3a5c85 3983{
256642e8 3984 const char *dataptr = *packet;
d3ce09f5 3985 int persist;
9f3a5c85
LM
3986
3987 /* Check if data has the correct format. */
3988 if (*dataptr != ';')
3989 return;
3990
3991 dataptr++;
3992
3993 while (*dataptr)
3994 {
d3ce09f5
SS
3995 if (*dataptr == ';')
3996 ++dataptr;
3997
3998 if (*dataptr == 'X')
9f3a5c85 3999 {
d3ce09f5 4000 /* Conditional expression. */
d171ca78 4001 if (debug_threads)
87ce2a04 4002 debug_printf ("Found breakpoint condition.\n");
802e8e6d 4003 if (!add_breakpoint_condition (bp, &dataptr))
8424cc97 4004 dataptr = strchrnul (dataptr, ';');
d3ce09f5 4005 }
61012eef 4006 else if (startswith (dataptr, "cmds:"))
d3ce09f5
SS
4007 {
4008 dataptr += strlen ("cmds:");
4009 if (debug_threads)
87ce2a04 4010 debug_printf ("Found breakpoint commands %s.\n", dataptr);
d3ce09f5
SS
4011 persist = (*dataptr == '1');
4012 dataptr += 2;
802e8e6d 4013 if (add_breakpoint_commands (bp, &dataptr, persist))
8424cc97 4014 dataptr = strchrnul (dataptr, ';');
d3ce09f5
SS
4015 }
4016 else
4017 {
d3ce09f5
SS
4018 fprintf (stderr, "Unknown token %c, ignoring.\n",
4019 *dataptr);
78a99e91 4020 /* Skip tokens until we find one that we recognize. */
8424cc97 4021 dataptr = strchrnul (dataptr, ';');
9f3a5c85 4022 }
9f3a5c85
LM
4023 }
4024 *packet = dataptr;
4025}
4026
bd99dc85
PA
4027/* Event loop callback that handles a serial event. The first byte in
4028 the serial buffer gets us here. We expect characters to arrive at
4029 a brisk pace, so we read the rest of the packet with a blocking
4030 getpkt call. */
01f9e8fa 4031
8336d594 4032static int
bd99dc85
PA
4033process_serial_event (void)
4034{
c12a5089 4035 client_state &cs = get_client_state ();
bd99dc85
PA
4036 int signal;
4037 unsigned int len;
4038 CORE_ADDR mem_addr;
4039 unsigned char sig;
4040 int packet_len;
4041 int new_packet_len = -1;
4042
bd99dc85
PA
4043 disable_async_io ();
4044
4045 response_needed = 0;
c12a5089 4046 packet_len = getpkt (cs.own_buf);
bd99dc85
PA
4047 if (packet_len <= 0)
4048 {
bd99dc85 4049 remote_close ();
8336d594
PA
4050 /* Force an event loop break. */
4051 return -1;
bd99dc85
PA
4052 }
4053 response_needed = 1;
4054
c12a5089 4055 char ch = cs.own_buf[0];
bd99dc85
PA
4056 switch (ch)
4057 {
4058 case 'q':
c12a5089 4059 handle_query (cs.own_buf, packet_len, &new_packet_len);
bd99dc85
PA
4060 break;
4061 case 'Q':
c12a5089 4062 handle_general_set (cs.own_buf);
bd99dc85
PA
4063 break;
4064 case 'D':
c12a5089 4065 handle_detach (cs.own_buf);
bd99dc85
PA
4066 break;
4067 case '!':
4068 extended_protocol = 1;
c12a5089 4069 write_ok (cs.own_buf);
bd99dc85
PA
4070 break;
4071 case '?':
c12a5089 4072 handle_status (cs.own_buf);
bd99dc85
PA
4073 break;
4074 case 'H':
c12a5089 4075 if (cs.own_buf[1] == 'c' || cs.own_buf[1] == 'g' || cs.own_buf[1] == 's')
bd99dc85 4076 {
c12a5089 4077 require_running_or_break (cs.own_buf);
95954743 4078
c12a5089 4079 ptid_t thread_id = read_ptid (&cs.own_buf[2], NULL);
95954743 4080
96cde54f 4081 if (thread_id == null_ptid || thread_id == minus_one_ptid)
95954743 4082 thread_id = null_ptid;
96cde54f 4083 else if (thread_id.is_pid ())
95954743 4084 {
96cde54f
SM
4085 /* The ptid represents a pid. */
4086 thread_info *thread = find_any_thread_of_pid (thread_id.pid ());
785922a5
SM
4087
4088 if (thread == NULL)
95954743 4089 {
c12a5089 4090 write_enn (cs.own_buf);
95954743
PA
4091 break;
4092 }
4093
9c80ecd6 4094 thread_id = thread->id;
95954743 4095 }
bd99dc85
PA
4096 else
4097 {
96cde54f
SM
4098 /* The ptid represents a lwp/tid. */
4099 if (find_thread_ptid (thread_id) == NULL)
c906108c 4100 {
c12a5089 4101 write_enn (cs.own_buf);
c906108c
SS
4102 break;
4103 }
c906108c
SS
4104 }
4105
c12a5089 4106 if (cs.own_buf[1] == 'g')
c906108c 4107 {
d7e15655 4108 if (thread_id == null_ptid)
c906108c 4109 {
bd99dc85
PA
4110 /* GDB is telling us to choose any thread. Check if
4111 the currently selected thread is still valid. If
4112 it is not, select the first available. */
c12a5089 4113 thread_info *thread = find_thread_ptid (cs.general_thread);
bd99dc85 4114 if (thread == NULL)
f0db101d 4115 thread = get_first_thread ();
9c80ecd6 4116 thread_id = thread->id;
c906108c 4117 }
bd99dc85 4118
c12a5089 4119 cs.general_thread = thread_id;
f557a88a 4120 set_desired_thread ();
f0db101d 4121 gdb_assert (current_thread != NULL);
c906108c 4122 }
c12a5089
SC
4123 else if (cs.own_buf[1] == 'c')
4124 cs.cont_thread = thread_id;
c906108c 4125
c12a5089 4126 write_ok (cs.own_buf);
bd99dc85
PA
4127 }
4128 else
4129 {
4130 /* Silently ignore it so that gdb can extend the protocol
4131 without compatibility headaches. */
c12a5089 4132 cs.own_buf[0] = '\0';
2d717e4f 4133 }
bd99dc85
PA
4134 break;
4135 case 'g':
c12a5089
SC
4136 require_running_or_break (cs.own_buf);
4137 if (cs.current_traceframe >= 0)
219f2f23 4138 {
3aee8918
PA
4139 struct regcache *regcache
4140 = new_register_cache (current_target_desc ());
219f2f23 4141
c12a5089 4142 if (fetch_traceframe_registers (cs.current_traceframe,
219f2f23 4143 regcache, -1) == 0)
c12a5089 4144 registers_to_string (regcache, cs.own_buf);
219f2f23 4145 else
c12a5089 4146 write_enn (cs.own_buf);
219f2f23
PA
4147 free_register_cache (regcache);
4148 }
4149 else
4150 {
4151 struct regcache *regcache;
4152
f557a88a 4153 if (!set_desired_thread ())
c12a5089 4154 write_enn (cs.own_buf);
f0db101d
PA
4155 else
4156 {
4157 regcache = get_thread_regcache (current_thread, 1);
c12a5089 4158 registers_to_string (regcache, cs.own_buf);
f0db101d 4159 }
219f2f23 4160 }
bd99dc85
PA
4161 break;
4162 case 'G':
c12a5089
SC
4163 require_running_or_break (cs.own_buf);
4164 if (cs.current_traceframe >= 0)
4165 write_enn (cs.own_buf);
219f2f23
PA
4166 else
4167 {
442ea881
PA
4168 struct regcache *regcache;
4169
f557a88a 4170 if (!set_desired_thread ())
c12a5089 4171 write_enn (cs.own_buf);
f0db101d
PA
4172 else
4173 {
4174 regcache = get_thread_regcache (current_thread, 1);
c12a5089
SC
4175 registers_from_string (regcache, &cs.own_buf[1]);
4176 write_ok (cs.own_buf);
f0db101d 4177 }
442ea881 4178 }
bd99dc85
PA
4179 break;
4180 case 'm':
da4ae14a
TT
4181 {
4182 require_running_or_break (cs.own_buf);
4183 decode_m_packet (&cs.own_buf[1], &mem_addr, &len);
4184 int res = gdb_read_memory (mem_addr, mem_buf, len);
4185 if (res < 0)
4186 write_enn (cs.own_buf);
4187 else
4188 bin2hex (mem_buf, cs.own_buf, res);
4189 }
bd99dc85
PA
4190 break;
4191 case 'M':
c12a5089
SC
4192 require_running_or_break (cs.own_buf);
4193 decode_M_packet (&cs.own_buf[1], &mem_addr, &len, &mem_buf);
90d74c30 4194 if (gdb_write_memory (mem_addr, mem_buf, len) == 0)
c12a5089 4195 write_ok (cs.own_buf);
bd99dc85 4196 else
c12a5089 4197 write_enn (cs.own_buf);
bd99dc85
PA
4198 break;
4199 case 'X':
c12a5089
SC
4200 require_running_or_break (cs.own_buf);
4201 if (decode_X_packet (&cs.own_buf[1], packet_len - 1,
fa593d66 4202 &mem_addr, &len, &mem_buf) < 0
90d74c30 4203 || gdb_write_memory (mem_addr, mem_buf, len) != 0)
c12a5089 4204 write_enn (cs.own_buf);
bd99dc85 4205 else
c12a5089 4206 write_ok (cs.own_buf);
bd99dc85
PA
4207 break;
4208 case 'C':
c12a5089
SC
4209 require_running_or_break (cs.own_buf);
4210 hex2bin (cs.own_buf + 1, &sig, 1);
e053fbc4
PA
4211 if (gdb_signal_to_host_p ((enum gdb_signal) sig))
4212 signal = gdb_signal_to_host ((enum gdb_signal) sig);
bd99dc85
PA
4213 else
4214 signal = 0;
c12a5089 4215 myresume (cs.own_buf, 0, signal);
bd99dc85
PA
4216 break;
4217 case 'S':
c12a5089
SC
4218 require_running_or_break (cs.own_buf);
4219 hex2bin (cs.own_buf + 1, &sig, 1);
e053fbc4
PA
4220 if (gdb_signal_to_host_p ((enum gdb_signal) sig))
4221 signal = gdb_signal_to_host ((enum gdb_signal) sig);
bd99dc85
PA
4222 else
4223 signal = 0;
c12a5089 4224 myresume (cs.own_buf, 1, signal);
bd99dc85
PA
4225 break;
4226 case 'c':
c12a5089 4227 require_running_or_break (cs.own_buf);
bd99dc85 4228 signal = 0;
c12a5089 4229 myresume (cs.own_buf, 0, signal);
bd99dc85
PA
4230 break;
4231 case 's':
c12a5089 4232 require_running_or_break (cs.own_buf);
bd99dc85 4233 signal = 0;
c12a5089 4234 myresume (cs.own_buf, 1, signal);
bd99dc85 4235 break;
c6314022
AR
4236 case 'Z': /* insert_ ... */
4237 /* Fallthrough. */
4238 case 'z': /* remove_ ... */
bd99dc85 4239 {
bd99dc85 4240 char *dataptr;
aca22551 4241 ULONGEST addr;
27165294 4242 int kind;
c12a5089 4243 char type = cs.own_buf[1];
c6314022 4244 int res;
d993e290 4245 const int insert = ch == 'Z';
c12a5089 4246 const char *p = &cs.own_buf[3];
aca22551
PA
4247
4248 p = unpack_varlen_hex (p, &addr);
27165294 4249 kind = strtol (p + 1, &dataptr, 16);
c6314022 4250
802e8e6d 4251 if (insert)
d993e290 4252 {
9aa76cd0 4253 struct gdb_breakpoint *bp;
802e8e6d 4254
27165294 4255 bp = set_gdb_breakpoint (type, addr, kind, &res);
802e8e6d 4256 if (bp != NULL)
9f3a5c85 4257 {
802e8e6d
PA
4258 res = 0;
4259
4260 /* GDB may have sent us a list of *point parameters to
4261 be evaluated on the target's side. Read such list
4262 here. If we already have a list of parameters, GDB
4263 is telling us to drop that list and use this one
4264 instead. */
0a261ed8 4265 clear_breakpoint_conditions_and_commands (bp);
256642e8
PA
4266 const char *options = dataptr;
4267 process_point_options (bp, &options);
9f3a5c85 4268 }
d993e290 4269 }
802e8e6d 4270 else
27165294 4271 res = delete_gdb_breakpoint (type, addr, kind);
bd99dc85 4272
c6314022 4273 if (res == 0)
c12a5089 4274 write_ok (cs.own_buf);
c6314022
AR
4275 else if (res == 1)
4276 /* Unsupported. */
c12a5089 4277 cs.own_buf[0] = '\0';
bd99dc85 4278 else
c12a5089 4279 write_enn (cs.own_buf);
bd99dc85
PA
4280 break;
4281 }
4282 case 'k':
4283 response_needed = 0;
4284 if (!target_running ())
95954743
PA
4285 /* The packet we received doesn't make sense - but we can't
4286 reply to it, either. */
8336d594 4287 return 0;
c906108c 4288
95954743 4289 fprintf (stderr, "Killing all inferiors\n");
9179355e
SM
4290
4291 for_each_process (kill_inferior_callback);
c906108c 4292
bd99dc85
PA
4293 /* When using the extended protocol, we wait with no program
4294 running. The traditional protocol will exit instead. */
4295 if (extended_protocol)
4296 {
c12a5089
SC
4297 cs.last_status.kind = TARGET_WAITKIND_EXITED;
4298 cs.last_status.value.sig = GDB_SIGNAL_KILL;
8336d594 4299 return 0;
bd99dc85
PA
4300 }
4301 else
8336d594
PA
4302 exit (0);
4303
bd99dc85
PA
4304 case 'T':
4305 {
c12a5089 4306 require_running_or_break (cs.own_buf);
95954743 4307
c12a5089 4308 ptid_t thread_id = read_ptid (&cs.own_buf[1], NULL);
96cde54f 4309 if (find_thread_ptid (thread_id) == NULL)
bd99dc85 4310 {
c12a5089 4311 write_enn (cs.own_buf);
bd99dc85
PA
4312 break;
4313 }
4314
4315 if (mythread_alive (thread_id))
c12a5089 4316 write_ok (cs.own_buf);
bd99dc85 4317 else
c12a5089 4318 write_enn (cs.own_buf);
bd99dc85
PA
4319 }
4320 break;
4321 case 'R':
4322 response_needed = 0;
4323
4324 /* Restarting the inferior is only supported in the extended
4325 protocol. */
4326 if (extended_protocol)
4327 {
4328 if (target_running ())
9179355e
SM
4329 for_each_process (kill_inferior_callback);
4330
bd99dc85
PA
4331 fprintf (stderr, "GDBserver restarting\n");
4332
4333 /* Wait till we are at 1st instruction in prog. */
25e3c82c 4334 if (program_path.get () != NULL)
51aee833 4335 {
25e3c82c 4336 create_inferior (program_path.get (), program_args);
2090129c 4337
c12a5089 4338 if (cs.last_status.kind == TARGET_WAITKIND_STOPPED)
51aee833
YQ
4339 {
4340 /* Stopped at the first instruction of the target
4341 process. */
c12a5089 4342 cs.general_thread = cs.last_ptid;
51aee833
YQ
4343 }
4344 else
4345 {
4346 /* Something went wrong. */
c12a5089 4347 cs.general_thread = null_ptid;
51aee833
YQ
4348 }
4349 }
bd99dc85
PA
4350 else
4351 {
c12a5089
SC
4352 cs.last_status.kind = TARGET_WAITKIND_EXITED;
4353 cs.last_status.value.sig = GDB_SIGNAL_KILL;
bd99dc85 4354 }
8336d594 4355 return 0;
c906108c
SS
4356 }
4357 else
4358 {
bd99dc85
PA
4359 /* It is a request we don't understand. Respond with an
4360 empty packet so that gdb knows that we don't support this
4361 request. */
c12a5089 4362 cs.own_buf[0] = '\0';
bd99dc85
PA
4363 break;
4364 }
4365 case 'v':
4366 /* Extended (long) request. */
c12a5089 4367 handle_v_requests (cs.own_buf, packet_len, &new_packet_len);
bd99dc85
PA
4368 break;
4369
4370 default:
4371 /* It is a request we don't understand. Respond with an empty
4372 packet so that gdb knows that we don't support this
4373 request. */
c12a5089 4374 cs.own_buf[0] = '\0';
bd99dc85
PA
4375 break;
4376 }
4377
4378 if (new_packet_len != -1)
c12a5089 4379 putpkt_binary (cs.own_buf, new_packet_len);
bd99dc85 4380 else
c12a5089 4381 putpkt (cs.own_buf);
bd99dc85
PA
4382
4383 response_needed = 0;
4384
8336d594
PA
4385 if (exit_requested)
4386 return -1;
4387
4388 return 0;
c906108c 4389}
bd99dc85
PA
4390
4391/* Event-loop callback for serial events. */
4392
8336d594 4393int
bd99dc85
PA
4394handle_serial_event (int err, gdb_client_data client_data)
4395{
4396 if (debug_threads)
87ce2a04 4397 debug_printf ("handling possible serial event\n");
bd99dc85
PA
4398
4399 /* Really handle it. */
8336d594
PA
4400 if (process_serial_event () < 0)
4401 return -1;
bd99dc85 4402
0bfdf32f 4403 /* Be sure to not change the selected thread behind GDB's back.
bd99dc85 4404 Important in the non-stop mode asynchronous protocol. */
f557a88a 4405 set_desired_thread ();
8336d594
PA
4406
4407 return 0;
bd99dc85
PA
4408}
4409
f2faf941
PA
4410/* Push a stop notification on the notification queue. */
4411
4412static void
4413push_stop_notification (ptid_t ptid, struct target_waitstatus *status)
4414{
4415 struct vstop_notif *vstop_notif = XNEW (struct vstop_notif);
4416
4417 vstop_notif->status = *status;
4418 vstop_notif->ptid = ptid;
4419 /* Push Stop notification. */
4420 notif_push (&notif_stop, (struct notif_event *) vstop_notif);
4421}
4422
bd99dc85
PA
4423/* Event-loop callback for target events. */
4424
8336d594 4425int
bd99dc85
PA
4426handle_target_event (int err, gdb_client_data client_data)
4427{
c12a5089 4428 client_state &cs = get_client_state ();
bd99dc85 4429 if (debug_threads)
87ce2a04 4430 debug_printf ("handling possible target event\n");
bd99dc85 4431
c12a5089 4432 cs.last_ptid = mywait (minus_one_ptid, &cs.last_status,
95954743 4433 TARGET_WNOHANG, 1);
bd99dc85 4434
c12a5089 4435 if (cs.last_status.kind == TARGET_WAITKIND_NO_RESUMED)
fa96cb38 4436 {
f2faf941 4437 if (gdb_connected () && report_no_resumed)
c12a5089 4438 push_stop_notification (null_ptid, &cs.last_status);
fa96cb38 4439 }
c12a5089 4440 else if (cs.last_status.kind != TARGET_WAITKIND_IGNORE)
bd99dc85 4441 {
e99b03dc 4442 int pid = cs.last_ptid.pid ();
8336d594
PA
4443 struct process_info *process = find_process_pid (pid);
4444 int forward_event = !gdb_connected () || process->gdb_detached;
4445
c12a5089
SC
4446 if (cs.last_status.kind == TARGET_WAITKIND_EXITED
4447 || cs.last_status.kind == TARGET_WAITKIND_SIGNALLED)
f9e39928
PA
4448 {
4449 mark_breakpoints_out (process);
c12a5089 4450 target_mourn_inferior (cs.last_ptid);
f9e39928 4451 }
c12a5089 4452 else if (cs.last_status.kind == TARGET_WAITKIND_THREAD_EXITED)
65706a29 4453 ;
ce1a5b52 4454 else
d20a8ad9
PA
4455 {
4456 /* We're reporting this thread as stopped. Update its
4457 "want-stopped" state to what the client wants, until it
4458 gets a new resume action. */
0bfdf32f 4459 current_thread->last_resume_kind = resume_stop;
c12a5089 4460 current_thread->last_status = cs.last_status;
d20a8ad9 4461 }
8336d594
PA
4462
4463 if (forward_event)
4464 {
4465 if (!target_running ())
4466 {
4467 /* The last process exited. We're done. */
4468 exit (0);
4469 }
4470
c12a5089
SC
4471 if (cs.last_status.kind == TARGET_WAITKIND_EXITED
4472 || cs.last_status.kind == TARGET_WAITKIND_SIGNALLED
4473 || cs.last_status.kind == TARGET_WAITKIND_THREAD_EXITED)
65706a29
PA
4474 ;
4475 else
8336d594
PA
4476 {
4477 /* A thread stopped with a signal, but gdb isn't
4478 connected to handle it. Pass it down to the
4479 inferior, as if it wasn't being traced. */
049a8570 4480 enum gdb_signal signal;
8336d594
PA
4481
4482 if (debug_threads)
87ce2a04
DE
4483 debug_printf ("GDB not connected; forwarding event %d for"
4484 " [%s]\n",
c12a5089
SC
4485 (int) cs.last_status.kind,
4486 target_pid_to_str (cs.last_ptid));
8336d594 4487
c12a5089
SC
4488 if (cs.last_status.kind == TARGET_WAITKIND_STOPPED)
4489 signal = cs.last_status.value.sig;
65706a29 4490 else
049a8570 4491 signal = GDB_SIGNAL_0;
c12a5089 4492 target_continue (cs.last_ptid, signal);
8336d594 4493 }
8336d594
PA
4494 }
4495 else
c12a5089 4496 push_stop_notification (cs.last_ptid, &cs.last_status);
bd99dc85
PA
4497 }
4498
0bfdf32f 4499 /* Be sure to not change the selected thread behind GDB's back.
bd99dc85 4500 Important in the non-stop mode asynchronous protocol. */
f557a88a 4501 set_desired_thread ();
8336d594
PA
4502
4503 return 0;
bd99dc85 4504}
6d580b63
YQ
4505
4506#if GDB_SELF_TEST
4507namespace selftests
4508{
4509
4510void
4511reset ()
4512{}
4513
4514} // namespace selftests
4515#endif /* GDB_SELF_TEST */