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