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