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