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