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