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