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