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