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