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