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