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