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