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