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