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