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 target memory at 0x%lx, halting search.",
739 (long) start_addr);
740 return -1;
741 }
742
743 /* Perform the search.
744
745 The loop is kept simple by allocating [N + pattern-length - 1] bytes.
746 When we've scanned N bytes we copy the trailing bytes to the start and
747 read in another N bytes. */
748
749 while (search_space_len >= pattern_len)
750 {
751 gdb_byte *found_ptr;
752 unsigned nr_search_bytes = (search_space_len < search_buf_size
753 ? search_space_len
754 : search_buf_size);
755
756 found_ptr = memmem (search_buf, nr_search_bytes, pattern, pattern_len);
757
758 if (found_ptr != NULL)
759 {
760 CORE_ADDR found_addr = start_addr + (found_ptr - search_buf);
761 *found_addrp = found_addr;
762 return 1;
763 }
764
765 /* Not found in this chunk, skip to next chunk. */
766
767 /* Don't let search_space_len wrap here, it's unsigned. */
768 if (search_space_len >= chunk_size)
769 search_space_len -= chunk_size;
770 else
771 search_space_len = 0;
772
773 if (search_space_len >= pattern_len)
774 {
775 unsigned keep_len = search_buf_size - chunk_size;
776 CORE_ADDR read_addr = start_addr + chunk_size + keep_len;
777 int nr_to_read;
778
779 /* Copy the trailing part of the previous iteration to the front
780 of the buffer for the next iteration. */
781 memcpy (search_buf, search_buf + chunk_size, keep_len);
782
783 nr_to_read = (search_space_len - keep_len < chunk_size
784 ? search_space_len - keep_len
785 : chunk_size);
786
787 if (gdb_read_memory (read_addr, search_buf + keep_len,
788 nr_to_read) != search_buf_size)
789 {
790 warning ("Unable to access target memory "
791 "at 0x%lx, halting search.",
792 (long) read_addr);
793 return -1;
794 }
795
796 start_addr += chunk_size;
797 }
798 }
799
800 /* Not found. */
801
802 return 0;
803 }
804
805 /* Handle qSearch:memory packets. */
806
807 static void
808 handle_search_memory (char *own_buf, int packet_len)
809 {
810 CORE_ADDR start_addr;
811 CORE_ADDR search_space_len;
812 gdb_byte *pattern;
813 unsigned int pattern_len;
814 /* NOTE: also defined in find.c testcase. */
815 #define SEARCH_CHUNK_SIZE 16000
816 const unsigned chunk_size = SEARCH_CHUNK_SIZE;
817 /* Buffer to hold memory contents for searching. */
818 gdb_byte *search_buf;
819 unsigned search_buf_size;
820 int found;
821 CORE_ADDR found_addr;
822 int cmd_name_len = sizeof ("qSearch:memory:") - 1;
823
824 pattern = malloc (packet_len);
825 if (pattern == NULL)
826 {
827 error ("Unable to allocate memory to perform the search");
828 strcpy (own_buf, "E00");
829 return;
830 }
831 if (decode_search_memory_packet (own_buf + cmd_name_len,
832 packet_len - cmd_name_len,
833 &start_addr, &search_space_len,
834 pattern, &pattern_len) < 0)
835 {
836 free (pattern);
837 error ("Error in parsing qSearch:memory packet");
838 strcpy (own_buf, "E00");
839 return;
840 }
841
842 search_buf_size = chunk_size + pattern_len - 1;
843
844 /* No point in trying to allocate a buffer larger than the search space. */
845 if (search_space_len < search_buf_size)
846 search_buf_size = search_space_len;
847
848 search_buf = malloc (search_buf_size);
849 if (search_buf == NULL)
850 {
851 free (pattern);
852 error ("Unable to allocate memory to perform the search");
853 strcpy (own_buf, "E00");
854 return;
855 }
856
857 found = handle_search_memory_1 (start_addr, search_space_len,
858 pattern, pattern_len,
859 search_buf, chunk_size, search_buf_size,
860 &found_addr);
861
862 if (found > 0)
863 sprintf (own_buf, "1,%lx", (long) found_addr);
864 else if (found == 0)
865 strcpy (own_buf, "0");
866 else
867 strcpy (own_buf, "E00");
868
869 free (search_buf);
870 free (pattern);
871 }
872
873 #define require_running(BUF) \
874 if (!target_running ()) \
875 { \
876 write_enn (BUF); \
877 return; \
878 }
879
880 /* Handle monitor commands not handled by target-specific handlers. */
881
882 static void
883 handle_monitor_command (char *mon, char *own_buf)
884 {
885 if (strcmp (mon, "set debug 1") == 0)
886 {
887 debug_threads = 1;
888 monitor_output ("Debug output enabled.\n");
889 }
890 else if (strcmp (mon, "set debug 0") == 0)
891 {
892 debug_threads = 0;
893 monitor_output ("Debug output disabled.\n");
894 }
895 else if (strcmp (mon, "set debug-hw-points 1") == 0)
896 {
897 debug_hw_points = 1;
898 monitor_output ("H/W point debugging output enabled.\n");
899 }
900 else if (strcmp (mon, "set debug-hw-points 0") == 0)
901 {
902 debug_hw_points = 0;
903 monitor_output ("H/W point debugging output disabled.\n");
904 }
905 else if (strcmp (mon, "set remote-debug 1") == 0)
906 {
907 remote_debug = 1;
908 monitor_output ("Protocol debug output enabled.\n");
909 }
910 else if (strcmp (mon, "set remote-debug 0") == 0)
911 {
912 remote_debug = 0;
913 monitor_output ("Protocol debug output disabled.\n");
914 }
915 else if (strcmp (mon, "help") == 0)
916 monitor_show_help ();
917 else if (strcmp (mon, "exit") == 0)
918 exit_requested = 1;
919 else
920 {
921 monitor_output ("Unknown monitor command.\n\n");
922 monitor_show_help ();
923 write_enn (own_buf);
924 }
925 }
926
927 /* Associates a callback with each supported qXfer'able object. */
928
929 struct qxfer
930 {
931 /* The object this handler handles. */
932 const char *object;
933
934 /* Request that the target transfer up to LEN 8-bit bytes of the
935 target's OBJECT. The OFFSET, for a seekable object, specifies
936 the starting point. The ANNEX can be used to provide additional
937 data-specific information to the target.
938
939 Return the number of bytes actually transfered, zero when no
940 further transfer is possible, -1 on error, and -2 when the
941 transfer is not supported. Return of a positive value smaller
942 than LEN does not indicate the end of the object, only the end of
943 the transfer.
944
945 One, and only one, of readbuf or writebuf must be non-NULL. */
946 int (*xfer) (const char *annex,
947 gdb_byte *readbuf, const gdb_byte *writebuf,
948 ULONGEST offset, LONGEST len);
949 };
950
951 /* Handle qXfer:auxv:read. */
952
953 static int
954 handle_qxfer_auxv (const char *annex,
955 gdb_byte *readbuf, const gdb_byte *writebuf,
956 ULONGEST offset, LONGEST len)
957 {
958 if (the_target->read_auxv == NULL || writebuf != NULL)
959 return -2;
960
961 if (annex[0] != '\0' || !target_running ())
962 return -1;
963
964 return (*the_target->read_auxv) (offset, readbuf, len);
965 }
966
967 /* Handle qXfer:features:read. */
968
969 static int
970 handle_qxfer_features (const char *annex,
971 gdb_byte *readbuf, const gdb_byte *writebuf,
972 ULONGEST offset, LONGEST len)
973 {
974 const char *document;
975 size_t total_len;
976
977 if (writebuf != NULL)
978 return -2;
979
980 if (!target_running ())
981 return -1;
982
983 /* Grab the correct annex. */
984 document = get_features_xml (annex);
985 if (document == NULL)
986 return -1;
987
988 total_len = strlen (document);
989
990 if (offset > total_len)
991 return -1;
992
993 if (offset + len > total_len)
994 len = total_len - offset;
995
996 memcpy (readbuf, document + offset, len);
997 return len;
998 }
999
1000 /* Handle qXfer:libraries:read. */
1001
1002 static int
1003 handle_qxfer_libraries (const char *annex,
1004 gdb_byte *readbuf, const gdb_byte *writebuf,
1005 ULONGEST offset, LONGEST len)
1006 {
1007 unsigned int total_len;
1008 char *document, *p;
1009 struct inferior_list_entry *dll_ptr;
1010
1011 if (writebuf != NULL)
1012 return -2;
1013
1014 if (annex[0] != '\0' || !target_running ())
1015 return -1;
1016
1017 /* Over-estimate the necessary memory. Assume that every character
1018 in the library name must be escaped. */
1019 total_len = 64;
1020 for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)
1021 total_len += 128 + 6 * strlen (((struct dll_info *) dll_ptr)->name);
1022
1023 document = malloc (total_len);
1024 if (document == NULL)
1025 return -1;
1026
1027 strcpy (document, "<library-list>\n");
1028 p = document + strlen (document);
1029
1030 for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)
1031 {
1032 struct dll_info *dll = (struct dll_info *) dll_ptr;
1033 char *name;
1034
1035 strcpy (p, " <library name=\"");
1036 p = p + strlen (p);
1037 name = xml_escape_text (dll->name);
1038 strcpy (p, name);
1039 free (name);
1040 p = p + strlen (p);
1041 strcpy (p, "\"><segment address=\"");
1042 p = p + strlen (p);
1043 sprintf (p, "0x%lx", (long) dll->base_addr);
1044 p = p + strlen (p);
1045 strcpy (p, "\"/></library>\n");
1046 p = p + strlen (p);
1047 }
1048
1049 strcpy (p, "</library-list>\n");
1050
1051 total_len = strlen (document);
1052
1053 if (offset > total_len)
1054 {
1055 free (document);
1056 return -1;
1057 }
1058
1059 if (offset + len > total_len)
1060 len = total_len - offset;
1061
1062 memcpy (readbuf, document + offset, len);
1063 free (document);
1064 return len;
1065 }
1066
1067 /* Handle qXfer:libraries-svr4:read. */
1068
1069 static int
1070 handle_qxfer_libraries_svr4 (const char *annex,
1071 gdb_byte *readbuf, const gdb_byte *writebuf,
1072 ULONGEST offset, LONGEST len)
1073 {
1074 if (writebuf != NULL)
1075 return -2;
1076
1077 if (annex[0] != '\0' || !target_running ()
1078 || the_target->qxfer_libraries_svr4 == NULL)
1079 return -1;
1080
1081 return the_target->qxfer_libraries_svr4 (annex, readbuf, writebuf, offset, len);
1082 }
1083
1084 /* Handle qXfer:osadata:read. */
1085
1086 static int
1087 handle_qxfer_osdata (const char *annex,
1088 gdb_byte *readbuf, const gdb_byte *writebuf,
1089 ULONGEST offset, LONGEST len)
1090 {
1091 if (the_target->qxfer_osdata == NULL || writebuf != NULL)
1092 return -2;
1093
1094 return (*the_target->qxfer_osdata) (annex, readbuf, NULL, offset, len);
1095 }
1096
1097 /* Handle qXfer:siginfo:read and qXfer:siginfo:write. */
1098
1099 static int
1100 handle_qxfer_siginfo (const char *annex,
1101 gdb_byte *readbuf, const gdb_byte *writebuf,
1102 ULONGEST offset, LONGEST len)
1103 {
1104 if (the_target->qxfer_siginfo == NULL)
1105 return -2;
1106
1107 if (annex[0] != '\0' || !target_running ())
1108 return -1;
1109
1110 return (*the_target->qxfer_siginfo) (annex, readbuf, writebuf, offset, len);
1111 }
1112
1113 /* Handle qXfer:spu:read and qXfer:spu:write. */
1114
1115 static int
1116 handle_qxfer_spu (const char *annex,
1117 gdb_byte *readbuf, const gdb_byte *writebuf,
1118 ULONGEST offset, LONGEST len)
1119 {
1120 if (the_target->qxfer_spu == NULL)
1121 return -2;
1122
1123 if (!target_running ())
1124 return -1;
1125
1126 return (*the_target->qxfer_spu) (annex, readbuf, writebuf, offset, len);
1127 }
1128
1129 /* Handle qXfer:statictrace:read. */
1130
1131 static int
1132 handle_qxfer_statictrace (const char *annex,
1133 gdb_byte *readbuf, const gdb_byte *writebuf,
1134 ULONGEST offset, LONGEST len)
1135 {
1136 ULONGEST nbytes;
1137
1138 if (writebuf != NULL)
1139 return -2;
1140
1141 if (annex[0] != '\0' || !target_running () || current_traceframe == -1)
1142 return -1;
1143
1144 if (traceframe_read_sdata (current_traceframe, offset,
1145 readbuf, len, &nbytes))
1146 return -1;
1147 return nbytes;
1148 }
1149
1150 /* Helper for handle_qxfer_threads. */
1151
1152 static void
1153 handle_qxfer_threads_proper (struct buffer *buffer)
1154 {
1155 struct inferior_list_entry *thread;
1156
1157 buffer_grow_str (buffer, "<threads>\n");
1158
1159 for (thread = all_threads.head; thread; thread = thread->next)
1160 {
1161 ptid_t ptid = thread_to_gdb_id ((struct thread_info *)thread);
1162 char ptid_s[100];
1163 int core = target_core_of_thread (ptid);
1164 char core_s[21];
1165
1166 write_ptid (ptid_s, ptid);
1167
1168 if (core != -1)
1169 {
1170 sprintf (core_s, "%d", core);
1171 buffer_xml_printf (buffer, "<thread id=\"%s\" core=\"%s\"/>\n",
1172 ptid_s, core_s);
1173 }
1174 else
1175 {
1176 buffer_xml_printf (buffer, "<thread id=\"%s\"/>\n",
1177 ptid_s);
1178 }
1179 }
1180
1181 buffer_grow_str0 (buffer, "</threads>\n");
1182 }
1183
1184 /* Handle qXfer:threads:read. */
1185
1186 static int
1187 handle_qxfer_threads (const char *annex,
1188 gdb_byte *readbuf, const gdb_byte *writebuf,
1189 ULONGEST offset, LONGEST len)
1190 {
1191 static char *result = 0;
1192 static unsigned int result_length = 0;
1193
1194 if (writebuf != NULL)
1195 return -2;
1196
1197 if (!target_running () || annex[0] != '\0')
1198 return -1;
1199
1200 if (offset == 0)
1201 {
1202 struct buffer buffer;
1203 /* When asked for data at offset 0, generate everything and store into
1204 'result'. Successive reads will be served off 'result'. */
1205 if (result)
1206 free (result);
1207
1208 buffer_init (&buffer);
1209
1210 handle_qxfer_threads_proper (&buffer);
1211
1212 result = buffer_finish (&buffer);
1213 result_length = strlen (result);
1214 buffer_free (&buffer);
1215 }
1216
1217 if (offset >= result_length)
1218 {
1219 /* We're out of data. */
1220 free (result);
1221 result = NULL;
1222 result_length = 0;
1223 return 0;
1224 }
1225
1226 if (len > result_length - offset)
1227 len = result_length - offset;
1228
1229 memcpy (readbuf, result + offset, len);
1230
1231 return len;
1232 }
1233
1234 /* Handle qXfer:traceframe-info:read. */
1235
1236 static int
1237 handle_qxfer_traceframe_info (const char *annex,
1238 gdb_byte *readbuf, const gdb_byte *writebuf,
1239 ULONGEST offset, LONGEST len)
1240 {
1241 static char *result = 0;
1242 static unsigned int result_length = 0;
1243
1244 if (writebuf != NULL)
1245 return -2;
1246
1247 if (!target_running () || annex[0] != '\0' || current_traceframe == -1)
1248 return -1;
1249
1250 if (offset == 0)
1251 {
1252 struct buffer buffer;
1253
1254 /* When asked for data at offset 0, generate everything and
1255 store into 'result'. Successive reads will be served off
1256 'result'. */
1257 free (result);
1258
1259 buffer_init (&buffer);
1260
1261 traceframe_read_info (current_traceframe, &buffer);
1262
1263 result = buffer_finish (&buffer);
1264 result_length = strlen (result);
1265 buffer_free (&buffer);
1266 }
1267
1268 if (offset >= result_length)
1269 {
1270 /* We're out of data. */
1271 free (result);
1272 result = NULL;
1273 result_length = 0;
1274 return 0;
1275 }
1276
1277 if (len > result_length - offset)
1278 len = result_length - offset;
1279
1280 memcpy (readbuf, result + offset, len);
1281 return len;
1282 }
1283
1284 /* Handle qXfer:fdpic:read. */
1285
1286 static int
1287 handle_qxfer_fdpic (const char *annex, gdb_byte *readbuf,
1288 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
1289 {
1290 if (the_target->read_loadmap == NULL)
1291 return -2;
1292
1293 if (!target_running ())
1294 return -1;
1295
1296 return (*the_target->read_loadmap) (annex, offset, readbuf, len);
1297 }
1298
1299 static const struct qxfer qxfer_packets[] =
1300 {
1301 { "auxv", handle_qxfer_auxv },
1302 { "fdpic", handle_qxfer_fdpic},
1303 { "features", handle_qxfer_features },
1304 { "libraries", handle_qxfer_libraries },
1305 { "libraries-svr4", handle_qxfer_libraries_svr4 },
1306 { "osdata", handle_qxfer_osdata },
1307 { "siginfo", handle_qxfer_siginfo },
1308 { "spu", handle_qxfer_spu },
1309 { "statictrace", handle_qxfer_statictrace },
1310 { "threads", handle_qxfer_threads },
1311 { "traceframe-info", handle_qxfer_traceframe_info },
1312 };
1313
1314 static int
1315 handle_qxfer (char *own_buf, int packet_len, int *new_packet_len_p)
1316 {
1317 int i;
1318 char *object;
1319 char *rw;
1320 char *annex;
1321 char *offset;
1322
1323 if (strncmp (own_buf, "qXfer:", 6) != 0)
1324 return 0;
1325
1326 /* Grab the object, r/w and annex. */
1327 if (decode_xfer (own_buf + 6, &object, &rw, &annex, &offset) < 0)
1328 {
1329 write_enn (own_buf);
1330 return 1;
1331 }
1332
1333 for (i = 0;
1334 i < sizeof (qxfer_packets) / sizeof (qxfer_packets[0]);
1335 i++)
1336 {
1337 const struct qxfer *q = &qxfer_packets[i];
1338
1339 if (strcmp (object, q->object) == 0)
1340 {
1341 if (strcmp (rw, "read") == 0)
1342 {
1343 unsigned char *data;
1344 int n;
1345 CORE_ADDR ofs;
1346 unsigned int len;
1347
1348 /* Grab the offset and length. */
1349 if (decode_xfer_read (offset, &ofs, &len) < 0)
1350 {
1351 write_enn (own_buf);
1352 return 1;
1353 }
1354
1355 /* Read one extra byte, as an indicator of whether there is
1356 more. */
1357 if (len > PBUFSIZ - 2)
1358 len = PBUFSIZ - 2;
1359 data = malloc (len + 1);
1360 if (data == NULL)
1361 {
1362 write_enn (own_buf);
1363 return 1;
1364 }
1365 n = (*q->xfer) (annex, data, NULL, ofs, len + 1);
1366 if (n == -2)
1367 {
1368 free (data);
1369 return 0;
1370 }
1371 else if (n < 0)
1372 write_enn (own_buf);
1373 else if (n > len)
1374 *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
1375 else
1376 *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
1377
1378 free (data);
1379 return 1;
1380 }
1381 else if (strcmp (rw, "write") == 0)
1382 {
1383 int n;
1384 unsigned int len;
1385 CORE_ADDR ofs;
1386 unsigned char *data;
1387
1388 strcpy (own_buf, "E00");
1389 data = malloc (packet_len - (offset - own_buf));
1390 if (data == NULL)
1391 {
1392 write_enn (own_buf);
1393 return 1;
1394 }
1395 if (decode_xfer_write (offset, packet_len - (offset - own_buf),
1396 &ofs, &len, data) < 0)
1397 {
1398 free (data);
1399 write_enn (own_buf);
1400 return 1;
1401 }
1402
1403 n = (*q->xfer) (annex, NULL, data, ofs, len);
1404 if (n == -2)
1405 {
1406 free (data);
1407 return 0;
1408 }
1409 else if (n < 0)
1410 write_enn (own_buf);
1411 else
1412 sprintf (own_buf, "%x", n);
1413
1414 free (data);
1415 return 1;
1416 }
1417
1418 return 0;
1419 }
1420 }
1421
1422 return 0;
1423 }
1424
1425 /* Table used by the crc32 function to calcuate the checksum. */
1426
1427 static unsigned int crc32_table[256] =
1428 {0, 0};
1429
1430 /* Compute 32 bit CRC from inferior memory.
1431
1432 On success, return 32 bit CRC.
1433 On failure, return (unsigned long long) -1. */
1434
1435 static unsigned long long
1436 crc32 (CORE_ADDR base, int len, unsigned int crc)
1437 {
1438 if (!crc32_table[1])
1439 {
1440 /* Initialize the CRC table and the decoding table. */
1441 int i, j;
1442 unsigned int c;
1443
1444 for (i = 0; i < 256; i++)
1445 {
1446 for (c = i << 24, j = 8; j > 0; --j)
1447 c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1);
1448 crc32_table[i] = c;
1449 }
1450 }
1451
1452 while (len--)
1453 {
1454 unsigned char byte = 0;
1455
1456 /* Return failure if memory read fails. */
1457 if (read_inferior_memory (base, &byte, 1) != 0)
1458 return (unsigned long long) -1;
1459
1460 crc = (crc << 8) ^ crc32_table[((crc >> 24) ^ byte) & 255];
1461 base++;
1462 }
1463 return (unsigned long long) crc;
1464 }
1465
1466 /* Handle all of the extended 'q' packets. */
1467
1468 void
1469 handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
1470 {
1471 static struct inferior_list_entry *thread_ptr;
1472
1473 /* Reply the current thread id. */
1474 if (strcmp ("qC", own_buf) == 0 && !disable_packet_qC)
1475 {
1476 ptid_t gdb_id;
1477 require_running (own_buf);
1478
1479 if (!ptid_equal (general_thread, null_ptid)
1480 && !ptid_equal (general_thread, minus_one_ptid))
1481 gdb_id = general_thread;
1482 else
1483 {
1484 thread_ptr = all_threads.head;
1485 gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
1486 }
1487
1488 sprintf (own_buf, "QC");
1489 own_buf += 2;
1490 write_ptid (own_buf, gdb_id);
1491 return;
1492 }
1493
1494 if (strcmp ("qSymbol::", own_buf) == 0)
1495 {
1496 /* GDB is suggesting new symbols have been loaded. This may
1497 mean a new shared library has been detected as loaded, so
1498 take the opportunity to check if breakpoints we think are
1499 inserted, still are. Note that it isn't guaranteed that
1500 we'll see this when a shared library is loaded, and nor will
1501 we see this for unloads (although breakpoints in unloaded
1502 libraries shouldn't trigger), as GDB may not find symbols for
1503 the library at all. We also re-validate breakpoints when we
1504 see a second GDB breakpoint for the same address, and or when
1505 we access breakpoint shadows. */
1506 validate_breakpoints ();
1507
1508 if (target_supports_tracepoints ())
1509 tracepoint_look_up_symbols ();
1510
1511 if (target_running () && the_target->look_up_symbols != NULL)
1512 (*the_target->look_up_symbols) ();
1513
1514 strcpy (own_buf, "OK");
1515 return;
1516 }
1517
1518 if (!disable_packet_qfThreadInfo)
1519 {
1520 if (strcmp ("qfThreadInfo", own_buf) == 0)
1521 {
1522 ptid_t gdb_id;
1523
1524 require_running (own_buf);
1525 thread_ptr = all_threads.head;
1526
1527 *own_buf++ = 'm';
1528 gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
1529 write_ptid (own_buf, gdb_id);
1530 thread_ptr = thread_ptr->next;
1531 return;
1532 }
1533
1534 if (strcmp ("qsThreadInfo", own_buf) == 0)
1535 {
1536 ptid_t gdb_id;
1537
1538 require_running (own_buf);
1539 if (thread_ptr != NULL)
1540 {
1541 *own_buf++ = 'm';
1542 gdb_id = thread_to_gdb_id ((struct thread_info *)thread_ptr);
1543 write_ptid (own_buf, gdb_id);
1544 thread_ptr = thread_ptr->next;
1545 return;
1546 }
1547 else
1548 {
1549 sprintf (own_buf, "l");
1550 return;
1551 }
1552 }
1553 }
1554
1555 if (the_target->read_offsets != NULL
1556 && strcmp ("qOffsets", own_buf) == 0)
1557 {
1558 CORE_ADDR text, data;
1559
1560 require_running (own_buf);
1561 if (the_target->read_offsets (&text, &data))
1562 sprintf (own_buf, "Text=%lX;Data=%lX;Bss=%lX",
1563 (long)text, (long)data, (long)data);
1564 else
1565 write_enn (own_buf);
1566
1567 return;
1568 }
1569
1570 /* Protocol features query. */
1571 if (strncmp ("qSupported", own_buf, 10) == 0
1572 && (own_buf[10] == ':' || own_buf[10] == '\0'))
1573 {
1574 char *p = &own_buf[10];
1575 int gdb_supports_qRelocInsn = 0;
1576
1577 /* Start processing qSupported packet. */
1578 target_process_qsupported (NULL);
1579
1580 /* Process each feature being provided by GDB. The first
1581 feature will follow a ':', and latter features will follow
1582 ';'. */
1583 if (*p == ':')
1584 {
1585 char **qsupported = NULL;
1586 int count = 0;
1587 int i;
1588
1589 /* Two passes, to avoid nested strtok calls in
1590 target_process_qsupported. */
1591 for (p = strtok (p + 1, ";");
1592 p != NULL;
1593 p = strtok (NULL, ";"))
1594 {
1595 count++;
1596 qsupported = xrealloc (qsupported, count * sizeof (char *));
1597 qsupported[count - 1] = xstrdup (p);
1598 }
1599
1600 for (i = 0; i < count; i++)
1601 {
1602 p = qsupported[i];
1603 if (strcmp (p, "multiprocess+") == 0)
1604 {
1605 /* GDB supports and wants multi-process support if
1606 possible. */
1607 if (target_supports_multi_process ())
1608 multi_process = 1;
1609 }
1610 else if (strcmp (p, "qRelocInsn+") == 0)
1611 {
1612 /* GDB supports relocate instruction requests. */
1613 gdb_supports_qRelocInsn = 1;
1614 }
1615 else
1616 target_process_qsupported (p);
1617
1618 free (p);
1619 }
1620
1621 free (qsupported);
1622 }
1623
1624 sprintf (own_buf,
1625 "PacketSize=%x;QPassSignals+;QProgramSignals+",
1626 PBUFSIZ - 1);
1627
1628 if (the_target->qxfer_libraries_svr4 != NULL)
1629 strcat (own_buf, ";qXfer:libraries-svr4:read+");
1630 else
1631 {
1632 /* We do not have any hook to indicate whether the non-SVR4 target
1633 backend supports qXfer:libraries:read, so always report it. */
1634 strcat (own_buf, ";qXfer:libraries:read+");
1635 }
1636
1637 if (the_target->read_auxv != NULL)
1638 strcat (own_buf, ";qXfer:auxv:read+");
1639
1640 if (the_target->qxfer_spu != NULL)
1641 strcat (own_buf, ";qXfer:spu:read+;qXfer:spu:write+");
1642
1643 if (the_target->qxfer_siginfo != NULL)
1644 strcat (own_buf, ";qXfer:siginfo:read+;qXfer:siginfo:write+");
1645
1646 if (the_target->read_loadmap != NULL)
1647 strcat (own_buf, ";qXfer:fdpic:read+");
1648
1649 /* We always report qXfer:features:read, as targets may
1650 install XML files on a subsequent call to arch_setup.
1651 If we reported to GDB on startup that we don't support
1652 qXfer:feature:read at all, we will never be re-queried. */
1653 strcat (own_buf, ";qXfer:features:read+");
1654
1655 if (transport_is_reliable)
1656 strcat (own_buf, ";QStartNoAckMode+");
1657
1658 if (the_target->qxfer_osdata != NULL)
1659 strcat (own_buf, ";qXfer:osdata:read+");
1660
1661 if (target_supports_multi_process ())
1662 strcat (own_buf, ";multiprocess+");
1663
1664 if (target_supports_non_stop ())
1665 strcat (own_buf, ";QNonStop+");
1666
1667 if (target_supports_disable_randomization ())
1668 strcat (own_buf, ";QDisableRandomization+");
1669
1670 strcat (own_buf, ";qXfer:threads:read+");
1671
1672 if (target_supports_tracepoints ())
1673 {
1674 strcat (own_buf, ";ConditionalTracepoints+");
1675 strcat (own_buf, ";TraceStateVariables+");
1676 strcat (own_buf, ";TracepointSource+");
1677 strcat (own_buf, ";DisconnectedTracing+");
1678 if (gdb_supports_qRelocInsn && target_supports_fast_tracepoints ())
1679 strcat (own_buf, ";FastTracepoints+");
1680 strcat (own_buf, ";StaticTracepoints+");
1681 strcat (own_buf, ";InstallInTrace+");
1682 strcat (own_buf, ";qXfer:statictrace:read+");
1683 strcat (own_buf, ";qXfer:traceframe-info:read+");
1684 strcat (own_buf, ";EnableDisableTracepoints+");
1685 strcat (own_buf, ";tracenz+");
1686 }
1687
1688 /* Support target-side breakpoint conditions and commands. */
1689 strcat (own_buf, ";ConditionalBreakpoints+");
1690 strcat (own_buf, ";BreakpointCommands+");
1691
1692 if (target_supports_agent ())
1693 strcat (own_buf, ";QAgent+");
1694
1695 return;
1696 }
1697
1698 /* Thread-local storage support. */
1699 if (the_target->get_tls_address != NULL
1700 && strncmp ("qGetTLSAddr:", own_buf, 12) == 0)
1701 {
1702 char *p = own_buf + 12;
1703 CORE_ADDR parts[2], address = 0;
1704 int i, err;
1705 ptid_t ptid = null_ptid;
1706
1707 require_running (own_buf);
1708
1709 for (i = 0; i < 3; i++)
1710 {
1711 char *p2;
1712 int len;
1713
1714 if (p == NULL)
1715 break;
1716
1717 p2 = strchr (p, ',');
1718 if (p2)
1719 {
1720 len = p2 - p;
1721 p2++;
1722 }
1723 else
1724 {
1725 len = strlen (p);
1726 p2 = NULL;
1727 }
1728
1729 if (i == 0)
1730 ptid = read_ptid (p, NULL);
1731 else
1732 decode_address (&parts[i - 1], p, len);
1733 p = p2;
1734 }
1735
1736 if (p != NULL || i < 3)
1737 err = 1;
1738 else
1739 {
1740 struct thread_info *thread = find_thread_ptid (ptid);
1741
1742 if (thread == NULL)
1743 err = 2;
1744 else
1745 err = the_target->get_tls_address (thread, parts[0], parts[1],
1746 &address);
1747 }
1748
1749 if (err == 0)
1750 {
1751 strcpy (own_buf, paddress(address));
1752 return;
1753 }
1754 else if (err > 0)
1755 {
1756 write_enn (own_buf);
1757 return;
1758 }
1759
1760 /* Otherwise, pretend we do not understand this packet. */
1761 }
1762
1763 /* Windows OS Thread Information Block address support. */
1764 if (the_target->get_tib_address != NULL
1765 && strncmp ("qGetTIBAddr:", own_buf, 12) == 0)
1766 {
1767 char *annex;
1768 int n;
1769 CORE_ADDR tlb;
1770 ptid_t ptid = read_ptid (own_buf + 12, &annex);
1771
1772 n = (*the_target->get_tib_address) (ptid, &tlb);
1773 if (n == 1)
1774 {
1775 strcpy (own_buf, paddress(tlb));
1776 return;
1777 }
1778 else if (n == 0)
1779 {
1780 write_enn (own_buf);
1781 return;
1782 }
1783 return;
1784 }
1785
1786 /* Handle "monitor" commands. */
1787 if (strncmp ("qRcmd,", own_buf, 6) == 0)
1788 {
1789 char *mon = malloc (PBUFSIZ);
1790 int len = strlen (own_buf + 6);
1791
1792 if (mon == NULL)
1793 {
1794 write_enn (own_buf);
1795 return;
1796 }
1797
1798 if ((len % 2) != 0 || unhexify (mon, own_buf + 6, len / 2) != len / 2)
1799 {
1800 write_enn (own_buf);
1801 free (mon);
1802 return;
1803 }
1804 mon[len / 2] = '\0';
1805
1806 write_ok (own_buf);
1807
1808 if (the_target->handle_monitor_command == NULL
1809 || (*the_target->handle_monitor_command) (mon) == 0)
1810 /* Default processing. */
1811 handle_monitor_command (mon, own_buf);
1812
1813 free (mon);
1814 return;
1815 }
1816
1817 if (strncmp ("qSearch:memory:", own_buf,
1818 sizeof ("qSearch:memory:") - 1) == 0)
1819 {
1820 require_running (own_buf);
1821 handle_search_memory (own_buf, packet_len);
1822 return;
1823 }
1824
1825 if (strcmp (own_buf, "qAttached") == 0
1826 || strncmp (own_buf, "qAttached:", sizeof ("qAttached:") - 1) == 0)
1827 {
1828 struct process_info *process;
1829
1830 if (own_buf[sizeof ("qAttached") - 1])
1831 {
1832 int pid = strtoul (own_buf + sizeof ("qAttached:") - 1, NULL, 16);
1833 process = (struct process_info *)
1834 find_inferior_id (&all_processes, pid_to_ptid (pid));
1835 }
1836 else
1837 {
1838 require_running (own_buf);
1839 process = current_process ();
1840 }
1841
1842 if (process == NULL)
1843 {
1844 write_enn (own_buf);
1845 return;
1846 }
1847
1848 strcpy (own_buf, process->attached ? "1" : "0");
1849 return;
1850 }
1851
1852 if (strncmp ("qCRC:", own_buf, 5) == 0)
1853 {
1854 /* CRC check (compare-section). */
1855 char *comma;
1856 CORE_ADDR base;
1857 int len;
1858 unsigned long long crc;
1859
1860 require_running (own_buf);
1861 base = strtoul (own_buf + 5, &comma, 16);
1862 if (*comma++ != ',')
1863 {
1864 write_enn (own_buf);
1865 return;
1866 }
1867 len = strtoul (comma, NULL, 16);
1868 crc = crc32 (base, len, 0xffffffff);
1869 /* Check for memory failure. */
1870 if (crc == (unsigned long long) -1)
1871 {
1872 write_enn (own_buf);
1873 return;
1874 }
1875 sprintf (own_buf, "C%lx", (unsigned long) crc);
1876 return;
1877 }
1878
1879 if (handle_qxfer (own_buf, packet_len, new_packet_len_p))
1880 return;
1881
1882 if (target_supports_tracepoints () && handle_tracepoint_query (own_buf))
1883 return;
1884
1885 /* Otherwise we didn't know what packet it was. Say we didn't
1886 understand it. */
1887 own_buf[0] = 0;
1888 }
1889
1890 static void gdb_wants_all_threads_stopped (void);
1891
1892 /* Parse vCont packets. */
1893 void
1894 handle_v_cont (char *own_buf)
1895 {
1896 char *p, *q;
1897 int n = 0, i = 0;
1898 struct thread_resume *resume_info;
1899 struct thread_resume default_action = {{0}};
1900
1901 /* Count the number of semicolons in the packet. There should be one
1902 for every action. */
1903 p = &own_buf[5];
1904 while (p)
1905 {
1906 n++;
1907 p++;
1908 p = strchr (p, ';');
1909 }
1910
1911 resume_info = malloc (n * sizeof (resume_info[0]));
1912 if (resume_info == NULL)
1913 goto err;
1914
1915 p = &own_buf[5];
1916 while (*p)
1917 {
1918 p++;
1919
1920 if (p[0] == 's' || p[0] == 'S')
1921 resume_info[i].kind = resume_step;
1922 else if (p[0] == 'c' || p[0] == 'C')
1923 resume_info[i].kind = resume_continue;
1924 else if (p[0] == 't')
1925 resume_info[i].kind = resume_stop;
1926 else
1927 goto err;
1928
1929 if (p[0] == 'S' || p[0] == 'C')
1930 {
1931 int sig;
1932 sig = strtol (p + 1, &q, 16);
1933 if (p == q)
1934 goto err;
1935 p = q;
1936
1937 if (!gdb_signal_to_host_p (sig))
1938 goto err;
1939 resume_info[i].sig = gdb_signal_to_host (sig);
1940 }
1941 else
1942 {
1943 resume_info[i].sig = 0;
1944 p = p + 1;
1945 }
1946
1947 if (p[0] == 0)
1948 {
1949 resume_info[i].thread = minus_one_ptid;
1950 default_action = resume_info[i];
1951
1952 /* Note: we don't increment i here, we'll overwrite this entry
1953 the next time through. */
1954 }
1955 else if (p[0] == ':')
1956 {
1957 ptid_t ptid = read_ptid (p + 1, &q);
1958
1959 if (p == q)
1960 goto err;
1961 p = q;
1962 if (p[0] != ';' && p[0] != 0)
1963 goto err;
1964
1965 resume_info[i].thread = ptid;
1966
1967 i++;
1968 }
1969 }
1970
1971 if (i < n)
1972 resume_info[i] = default_action;
1973
1974 /* `cont_thread' is still used in occasional places in the backend,
1975 to implement single-thread scheduler-locking. Doesn't make sense
1976 to set it if we see a stop request, or a wildcard action (one
1977 with '-1' (all threads), or 'pPID.-1' (all threads of PID)). */
1978 if (n == 1
1979 && !(ptid_equal (resume_info[0].thread, minus_one_ptid)
1980 || ptid_get_lwp (resume_info[0].thread) == -1)
1981 && resume_info[0].kind != resume_stop)
1982 cont_thread = resume_info[0].thread;
1983 else
1984 cont_thread = minus_one_ptid;
1985 set_desired_inferior (0);
1986
1987 if (!non_stop)
1988 enable_async_io ();
1989
1990 (*the_target->resume) (resume_info, n);
1991
1992 free (resume_info);
1993
1994 if (non_stop)
1995 write_ok (own_buf);
1996 else
1997 {
1998 last_ptid = mywait (minus_one_ptid, &last_status, 0, 1);
1999
2000 if (last_status.kind != TARGET_WAITKIND_EXITED
2001 && last_status.kind != TARGET_WAITKIND_SIGNALLED)
2002 current_inferior->last_status = last_status;
2003
2004 /* From the client's perspective, all-stop mode always stops all
2005 threads implicitly (and the target backend has already done
2006 so by now). Tag all threads as "want-stopped", so we don't
2007 resume them implicitly without the client telling us to. */
2008 gdb_wants_all_threads_stopped ();
2009 prepare_resume_reply (own_buf, last_ptid, &last_status);
2010 disable_async_io ();
2011
2012 if (last_status.kind == TARGET_WAITKIND_EXITED
2013 || last_status.kind == TARGET_WAITKIND_SIGNALLED)
2014 mourn_inferior (find_process_pid (ptid_get_pid (last_ptid)));
2015 }
2016 return;
2017
2018 err:
2019 write_enn (own_buf);
2020 free (resume_info);
2021 return;
2022 }
2023
2024 /* Attach to a new program. Return 1 if successful, 0 if failure. */
2025 int
2026 handle_v_attach (char *own_buf)
2027 {
2028 int pid;
2029
2030 pid = strtol (own_buf + 8, NULL, 16);
2031 if (pid != 0 && attach_inferior (pid) == 0)
2032 {
2033 /* Don't report shared library events after attaching, even if
2034 some libraries are preloaded. GDB will always poll the
2035 library list. Avoids the "stopped by shared library event"
2036 notice on the GDB side. */
2037 dlls_changed = 0;
2038
2039 if (non_stop)
2040 {
2041 /* In non-stop, we don't send a resume reply. Stop events
2042 will follow up using the normal notification
2043 mechanism. */
2044 write_ok (own_buf);
2045 }
2046 else
2047 prepare_resume_reply (own_buf, last_ptid, &last_status);
2048
2049 return 1;
2050 }
2051 else
2052 {
2053 write_enn (own_buf);
2054 return 0;
2055 }
2056 }
2057
2058 /* Run a new program. Return 1 if successful, 0 if failure. */
2059 static int
2060 handle_v_run (char *own_buf)
2061 {
2062 char *p, *next_p, **new_argv;
2063 int i, new_argc;
2064
2065 new_argc = 0;
2066 for (p = own_buf + strlen ("vRun;"); p && *p; p = strchr (p, ';'))
2067 {
2068 p++;
2069 new_argc++;
2070 }
2071
2072 new_argv = calloc (new_argc + 2, sizeof (char *));
2073 if (new_argv == NULL)
2074 {
2075 write_enn (own_buf);
2076 return 0;
2077 }
2078
2079 i = 0;
2080 for (p = own_buf + strlen ("vRun;"); *p; p = next_p)
2081 {
2082 next_p = strchr (p, ';');
2083 if (next_p == NULL)
2084 next_p = p + strlen (p);
2085
2086 if (i == 0 && p == next_p)
2087 new_argv[i] = NULL;
2088 else
2089 {
2090 /* FIXME: Fail request if out of memory instead of dying. */
2091 new_argv[i] = xmalloc (1 + (next_p - p) / 2);
2092 unhexify (new_argv[i], p, (next_p - p) / 2);
2093 new_argv[i][(next_p - p) / 2] = '\0';
2094 }
2095
2096 if (*next_p)
2097 next_p++;
2098 i++;
2099 }
2100 new_argv[i] = NULL;
2101
2102 if (new_argv[0] == NULL)
2103 {
2104 /* GDB didn't specify a program to run. Use the program from the
2105 last run with the new argument list. */
2106
2107 if (program_argv == NULL)
2108 {
2109 write_enn (own_buf);
2110 freeargv (new_argv);
2111 return 0;
2112 }
2113
2114 new_argv[0] = strdup (program_argv[0]);
2115 if (new_argv[0] == NULL)
2116 {
2117 write_enn (own_buf);
2118 freeargv (new_argv);
2119 return 0;
2120 }
2121 }
2122
2123 /* Free the old argv and install the new one. */
2124 freeargv (program_argv);
2125 program_argv = new_argv;
2126
2127 start_inferior (program_argv);
2128 if (last_status.kind == TARGET_WAITKIND_STOPPED)
2129 {
2130 prepare_resume_reply (own_buf, last_ptid, &last_status);
2131
2132 /* In non-stop, sending a resume reply doesn't set the general
2133 thread, but GDB assumes a vRun sets it (this is so GDB can
2134 query which is the main thread of the new inferior. */
2135 if (non_stop)
2136 general_thread = last_ptid;
2137
2138 return 1;
2139 }
2140 else
2141 {
2142 write_enn (own_buf);
2143 return 0;
2144 }
2145 }
2146
2147 /* Kill process. Return 1 if successful, 0 if failure. */
2148 int
2149 handle_v_kill (char *own_buf)
2150 {
2151 int pid;
2152 char *p = &own_buf[6];
2153 if (multi_process)
2154 pid = strtol (p, NULL, 16);
2155 else
2156 pid = signal_pid;
2157 if (pid != 0 && kill_inferior (pid) == 0)
2158 {
2159 last_status.kind = TARGET_WAITKIND_SIGNALLED;
2160 last_status.value.sig = GDB_SIGNAL_KILL;
2161 last_ptid = pid_to_ptid (pid);
2162 discard_queued_stop_replies (pid);
2163 write_ok (own_buf);
2164 return 1;
2165 }
2166 else
2167 {
2168 write_enn (own_buf);
2169 return 0;
2170 }
2171 }
2172
2173 /* Handle a 'vStopped' packet. */
2174 static void
2175 handle_v_stopped (char *own_buf)
2176 {
2177 /* If we're waiting for GDB to acknowledge a pending stop reply,
2178 consider that done. */
2179 if (notif_queue)
2180 {
2181 struct vstop_notif *head;
2182
2183 if (remote_debug)
2184 fprintf (stderr, "vStopped: acking %s\n",
2185 target_pid_to_str (notif_queue->ptid));
2186
2187 head = notif_queue;
2188 notif_queue = notif_queue->next;
2189 free (head);
2190 }
2191
2192 /* Push another stop reply, or if there are no more left, an OK. */
2193 send_next_stop_reply (own_buf);
2194 }
2195
2196 /* Handle all of the extended 'v' packets. */
2197 void
2198 handle_v_requests (char *own_buf, int packet_len, int *new_packet_len)
2199 {
2200 if (!disable_packet_vCont)
2201 {
2202 if (strncmp (own_buf, "vCont;", 6) == 0)
2203 {
2204 require_running (own_buf);
2205 handle_v_cont (own_buf);
2206 return;
2207 }
2208
2209 if (strncmp (own_buf, "vCont?", 6) == 0)
2210 {
2211 strcpy (own_buf, "vCont;c;C;s;S;t");
2212 return;
2213 }
2214 }
2215
2216 if (strncmp (own_buf, "vFile:", 6) == 0
2217 && handle_vFile (own_buf, packet_len, new_packet_len))
2218 return;
2219
2220 if (strncmp (own_buf, "vAttach;", 8) == 0)
2221 {
2222 if ((!extended_protocol || !multi_process) && target_running ())
2223 {
2224 fprintf (stderr, "Already debugging a process\n");
2225 write_enn (own_buf);
2226 return;
2227 }
2228 handle_v_attach (own_buf);
2229 return;
2230 }
2231
2232 if (strncmp (own_buf, "vRun;", 5) == 0)
2233 {
2234 if ((!extended_protocol || !multi_process) && target_running ())
2235 {
2236 fprintf (stderr, "Already debugging a process\n");
2237 write_enn (own_buf);
2238 return;
2239 }
2240 handle_v_run (own_buf);
2241 return;
2242 }
2243
2244 if (strncmp (own_buf, "vKill;", 6) == 0)
2245 {
2246 if (!target_running ())
2247 {
2248 fprintf (stderr, "No process to kill\n");
2249 write_enn (own_buf);
2250 return;
2251 }
2252 handle_v_kill (own_buf);
2253 return;
2254 }
2255
2256 if (strncmp (own_buf, "vStopped", 8) == 0)
2257 {
2258 handle_v_stopped (own_buf);
2259 return;
2260 }
2261
2262 /* Otherwise we didn't know what packet it was. Say we didn't
2263 understand it. */
2264 own_buf[0] = 0;
2265 return;
2266 }
2267
2268 /* Resume inferior and wait for another event. In non-stop mode,
2269 don't really wait here, but return immediatelly to the event
2270 loop. */
2271 static void
2272 myresume (char *own_buf, int step, int sig)
2273 {
2274 struct thread_resume resume_info[2];
2275 int n = 0;
2276 int valid_cont_thread;
2277
2278 set_desired_inferior (0);
2279
2280 valid_cont_thread = (!ptid_equal (cont_thread, null_ptid)
2281 && !ptid_equal (cont_thread, minus_one_ptid));
2282
2283 if (step || sig || valid_cont_thread)
2284 {
2285 resume_info[0].thread
2286 = ((struct inferior_list_entry *) current_inferior)->id;
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 /* Unrecognized token, just skip it. */
2942 fprintf (stderr, "Unknown token %c, ignoring.\n",
2943 *dataptr);
2944 }
2945
2946 /* Skip tokens until we find one that we recognize. */
2947 while (*dataptr && *dataptr != 'X' && *dataptr != ';')
2948 dataptr++;
2949 }
2950 *packet = dataptr;
2951 }
2952
2953 /* Event loop callback that handles a serial event. The first byte in
2954 the serial buffer gets us here. We expect characters to arrive at
2955 a brisk pace, so we read the rest of the packet with a blocking
2956 getpkt call. */
2957
2958 static int
2959 process_serial_event (void)
2960 {
2961 char ch;
2962 int i = 0;
2963 int signal;
2964 unsigned int len;
2965 int res;
2966 CORE_ADDR mem_addr;
2967 int pid;
2968 unsigned char sig;
2969 int packet_len;
2970 int new_packet_len = -1;
2971
2972 /* Used to decide when gdbserver should exit in
2973 multi-mode/remote. */
2974 static int have_ran = 0;
2975
2976 if (!have_ran)
2977 have_ran = target_running ();
2978
2979 disable_async_io ();
2980
2981 response_needed = 0;
2982 packet_len = getpkt (own_buf);
2983 if (packet_len <= 0)
2984 {
2985 remote_close ();
2986 /* Force an event loop break. */
2987 return -1;
2988 }
2989 response_needed = 1;
2990
2991 i = 0;
2992 ch = own_buf[i++];
2993 switch (ch)
2994 {
2995 case 'q':
2996 handle_query (own_buf, packet_len, &new_packet_len);
2997 break;
2998 case 'Q':
2999 handle_general_set (own_buf);
3000 break;
3001 case 'D':
3002 require_running (own_buf);
3003
3004 if (multi_process)
3005 {
3006 i++; /* skip ';' */
3007 pid = strtol (&own_buf[i], NULL, 16);
3008 }
3009 else
3010 pid =
3011 ptid_get_pid (((struct inferior_list_entry *) current_inferior)->id);
3012
3013 if ((tracing && disconnected_tracing) || any_persistent_commands ())
3014 {
3015 struct thread_resume resume_info;
3016 struct process_info *process = find_process_pid (pid);
3017
3018 if (process == NULL)
3019 {
3020 write_enn (own_buf);
3021 break;
3022 }
3023
3024 if (tracing && disconnected_tracing)
3025 fprintf (stderr,
3026 "Disconnected tracing in effect, "
3027 "leaving gdbserver attached to the process\n");
3028
3029 if (any_persistent_commands ())
3030 fprintf (stderr,
3031 "Persistent commands are present, "
3032 "leaving gdbserver attached to the process\n");
3033
3034 /* Make sure we're in non-stop/async mode, so we we can both
3035 wait for an async socket accept, and handle async target
3036 events simultaneously. There's also no point either in
3037 having the target stop all threads, when we're going to
3038 pass signals down without informing GDB. */
3039 if (!non_stop)
3040 {
3041 if (debug_threads)
3042 fprintf (stderr, "Forcing non-stop mode\n");
3043
3044 non_stop = 1;
3045 start_non_stop (1);
3046 }
3047
3048 process->gdb_detached = 1;
3049
3050 /* Detaching implicitly resumes all threads. */
3051 resume_info.thread = minus_one_ptid;
3052 resume_info.kind = resume_continue;
3053 resume_info.sig = 0;
3054 (*the_target->resume) (&resume_info, 1);
3055
3056 write_ok (own_buf);
3057 break; /* from switch/case */
3058 }
3059
3060 fprintf (stderr, "Detaching from process %d\n", pid);
3061 stop_tracing ();
3062 if (detach_inferior (pid) != 0)
3063 write_enn (own_buf);
3064 else
3065 {
3066 discard_queued_stop_replies (pid);
3067 write_ok (own_buf);
3068
3069 if (extended_protocol)
3070 {
3071 /* Treat this like a normal program exit. */
3072 last_status.kind = TARGET_WAITKIND_EXITED;
3073 last_status.value.integer = 0;
3074 last_ptid = pid_to_ptid (pid);
3075
3076 current_inferior = NULL;
3077 }
3078 else
3079 {
3080 putpkt (own_buf);
3081 remote_close ();
3082
3083 /* If we are attached, then we can exit. Otherwise, we
3084 need to hang around doing nothing, until the child is
3085 gone. */
3086 join_inferior (pid);
3087 exit (0);
3088 }
3089 }
3090 break;
3091 case '!':
3092 extended_protocol = 1;
3093 write_ok (own_buf);
3094 break;
3095 case '?':
3096 handle_status (own_buf);
3097 break;
3098 case 'H':
3099 if (own_buf[1] == 'c' || own_buf[1] == 'g' || own_buf[1] == 's')
3100 {
3101 ptid_t gdb_id, thread_id;
3102 int pid;
3103
3104 require_running (own_buf);
3105
3106 gdb_id = read_ptid (&own_buf[2], NULL);
3107
3108 pid = ptid_get_pid (gdb_id);
3109
3110 if (ptid_equal (gdb_id, null_ptid)
3111 || ptid_equal (gdb_id, minus_one_ptid))
3112 thread_id = null_ptid;
3113 else if (pid != 0
3114 && ptid_equal (pid_to_ptid (pid),
3115 gdb_id))
3116 {
3117 struct thread_info *thread =
3118 (struct thread_info *) find_inferior (&all_threads,
3119 first_thread_of,
3120 &pid);
3121 if (!thread)
3122 {
3123 write_enn (own_buf);
3124 break;
3125 }
3126
3127 thread_id = ((struct inferior_list_entry *)thread)->id;
3128 }
3129 else
3130 {
3131 thread_id = gdb_id_to_thread_id (gdb_id);
3132 if (ptid_equal (thread_id, null_ptid))
3133 {
3134 write_enn (own_buf);
3135 break;
3136 }
3137 }
3138
3139 if (own_buf[1] == 'g')
3140 {
3141 if (ptid_equal (thread_id, null_ptid))
3142 {
3143 /* GDB is telling us to choose any thread. Check if
3144 the currently selected thread is still valid. If
3145 it is not, select the first available. */
3146 struct thread_info *thread =
3147 (struct thread_info *) find_inferior_id (&all_threads,
3148 general_thread);
3149 if (thread == NULL)
3150 thread_id = all_threads.head->id;
3151 }
3152
3153 general_thread = thread_id;
3154 set_desired_inferior (1);
3155 }
3156 else if (own_buf[1] == 'c')
3157 cont_thread = thread_id;
3158
3159 write_ok (own_buf);
3160 }
3161 else
3162 {
3163 /* Silently ignore it so that gdb can extend the protocol
3164 without compatibility headaches. */
3165 own_buf[0] = '\0';
3166 }
3167 break;
3168 case 'g':
3169 require_running (own_buf);
3170 if (current_traceframe >= 0)
3171 {
3172 struct regcache *regcache = new_register_cache ();
3173
3174 if (fetch_traceframe_registers (current_traceframe,
3175 regcache, -1) == 0)
3176 registers_to_string (regcache, own_buf);
3177 else
3178 write_enn (own_buf);
3179 free_register_cache (regcache);
3180 }
3181 else
3182 {
3183 struct regcache *regcache;
3184
3185 set_desired_inferior (1);
3186 regcache = get_thread_regcache (current_inferior, 1);
3187 registers_to_string (regcache, own_buf);
3188 }
3189 break;
3190 case 'G':
3191 require_running (own_buf);
3192 if (current_traceframe >= 0)
3193 write_enn (own_buf);
3194 else
3195 {
3196 struct regcache *regcache;
3197
3198 set_desired_inferior (1);
3199 regcache = get_thread_regcache (current_inferior, 1);
3200 registers_from_string (regcache, &own_buf[1]);
3201 write_ok (own_buf);
3202 }
3203 break;
3204 case 'm':
3205 require_running (own_buf);
3206 decode_m_packet (&own_buf[1], &mem_addr, &len);
3207 res = gdb_read_memory (mem_addr, mem_buf, len);
3208 if (res < 0)
3209 write_enn (own_buf);
3210 else
3211 convert_int_to_ascii (mem_buf, own_buf, res);
3212 break;
3213 case 'M':
3214 require_running (own_buf);
3215 decode_M_packet (&own_buf[1], &mem_addr, &len, &mem_buf);
3216 if (gdb_write_memory (mem_addr, mem_buf, len) == 0)
3217 write_ok (own_buf);
3218 else
3219 write_enn (own_buf);
3220 break;
3221 case 'X':
3222 require_running (own_buf);
3223 if (decode_X_packet (&own_buf[1], packet_len - 1,
3224 &mem_addr, &len, &mem_buf) < 0
3225 || gdb_write_memory (mem_addr, mem_buf, len) != 0)
3226 write_enn (own_buf);
3227 else
3228 write_ok (own_buf);
3229 break;
3230 case 'C':
3231 require_running (own_buf);
3232 convert_ascii_to_int (own_buf + 1, &sig, 1);
3233 if (gdb_signal_to_host_p (sig))
3234 signal = gdb_signal_to_host (sig);
3235 else
3236 signal = 0;
3237 myresume (own_buf, 0, signal);
3238 break;
3239 case 'S':
3240 require_running (own_buf);
3241 convert_ascii_to_int (own_buf + 1, &sig, 1);
3242 if (gdb_signal_to_host_p (sig))
3243 signal = gdb_signal_to_host (sig);
3244 else
3245 signal = 0;
3246 myresume (own_buf, 1, signal);
3247 break;
3248 case 'c':
3249 require_running (own_buf);
3250 signal = 0;
3251 myresume (own_buf, 0, signal);
3252 break;
3253 case 's':
3254 require_running (own_buf);
3255 signal = 0;
3256 myresume (own_buf, 1, signal);
3257 break;
3258 case 'Z': /* insert_ ... */
3259 /* Fallthrough. */
3260 case 'z': /* remove_ ... */
3261 {
3262 char *lenptr;
3263 char *dataptr;
3264 CORE_ADDR addr = strtoul (&own_buf[3], &lenptr, 16);
3265 int len = strtol (lenptr + 1, &dataptr, 16);
3266 char type = own_buf[1];
3267 int res;
3268 const int insert = ch == 'Z';
3269
3270 /* Default to unrecognized/unsupported. */
3271 res = 1;
3272 switch (type)
3273 {
3274 case '0': /* software-breakpoint */
3275 case '1': /* hardware-breakpoint */
3276 case '2': /* write watchpoint */
3277 case '3': /* read watchpoint */
3278 case '4': /* access watchpoint */
3279 require_running (own_buf);
3280 if (insert && the_target->insert_point != NULL)
3281 {
3282 /* Insert the breakpoint. If it is already inserted, nothing
3283 will take place. */
3284 res = (*the_target->insert_point) (type, addr, len);
3285
3286 /* GDB may have sent us a list of *point parameters to be
3287 evaluated on the target's side. Read such list here. If we
3288 already have a list of parameters, GDB is telling us to drop
3289 that list and use this one instead. */
3290 if (!res && (type == '0' || type == '1'))
3291 {
3292 /* Remove previous conditions. */
3293 clear_gdb_breakpoint_conditions (addr);
3294 process_point_options (addr, &dataptr);
3295 }
3296 }
3297 else if (!insert && the_target->remove_point != NULL)
3298 res = (*the_target->remove_point) (type, addr, len);
3299 break;
3300 default:
3301 break;
3302 }
3303
3304 if (res == 0)
3305 write_ok (own_buf);
3306 else if (res == 1)
3307 /* Unsupported. */
3308 own_buf[0] = '\0';
3309 else
3310 write_enn (own_buf);
3311 break;
3312 }
3313 case 'k':
3314 response_needed = 0;
3315 if (!target_running ())
3316 /* The packet we received doesn't make sense - but we can't
3317 reply to it, either. */
3318 return 0;
3319
3320 fprintf (stderr, "Killing all inferiors\n");
3321 for_each_inferior (&all_processes, kill_inferior_callback);
3322
3323 /* When using the extended protocol, we wait with no program
3324 running. The traditional protocol will exit instead. */
3325 if (extended_protocol)
3326 {
3327 last_status.kind = TARGET_WAITKIND_EXITED;
3328 last_status.value.sig = GDB_SIGNAL_KILL;
3329 return 0;
3330 }
3331 else
3332 exit (0);
3333
3334 case 'T':
3335 {
3336 ptid_t gdb_id, thread_id;
3337
3338 require_running (own_buf);
3339
3340 gdb_id = read_ptid (&own_buf[1], NULL);
3341 thread_id = gdb_id_to_thread_id (gdb_id);
3342 if (ptid_equal (thread_id, null_ptid))
3343 {
3344 write_enn (own_buf);
3345 break;
3346 }
3347
3348 if (mythread_alive (thread_id))
3349 write_ok (own_buf);
3350 else
3351 write_enn (own_buf);
3352 }
3353 break;
3354 case 'R':
3355 response_needed = 0;
3356
3357 /* Restarting the inferior is only supported in the extended
3358 protocol. */
3359 if (extended_protocol)
3360 {
3361 if (target_running ())
3362 for_each_inferior (&all_processes,
3363 kill_inferior_callback);
3364 fprintf (stderr, "GDBserver restarting\n");
3365
3366 /* Wait till we are at 1st instruction in prog. */
3367 if (program_argv != NULL)
3368 start_inferior (program_argv);
3369 else
3370 {
3371 last_status.kind = TARGET_WAITKIND_EXITED;
3372 last_status.value.sig = GDB_SIGNAL_KILL;
3373 }
3374 return 0;
3375 }
3376 else
3377 {
3378 /* It is a request we don't understand. Respond with an
3379 empty packet so that gdb knows that we don't support this
3380 request. */
3381 own_buf[0] = '\0';
3382 break;
3383 }
3384 case 'v':
3385 /* Extended (long) request. */
3386 handle_v_requests (own_buf, packet_len, &new_packet_len);
3387 break;
3388
3389 default:
3390 /* It is a request we don't understand. Respond with an empty
3391 packet so that gdb knows that we don't support this
3392 request. */
3393 own_buf[0] = '\0';
3394 break;
3395 }
3396
3397 if (new_packet_len != -1)
3398 putpkt_binary (own_buf, new_packet_len);
3399 else
3400 putpkt (own_buf);
3401
3402 response_needed = 0;
3403
3404 if (!extended_protocol && have_ran && !target_running ())
3405 {
3406 /* In non-stop, defer exiting until GDB had a chance to query
3407 the whole vStopped list (until it gets an OK). */
3408 if (!notif_queue)
3409 {
3410 fprintf (stderr, "GDBserver exiting\n");
3411 remote_close ();
3412 exit (0);
3413 }
3414 }
3415
3416 if (exit_requested)
3417 return -1;
3418
3419 return 0;
3420 }
3421
3422 /* Event-loop callback for serial events. */
3423
3424 int
3425 handle_serial_event (int err, gdb_client_data client_data)
3426 {
3427 if (debug_threads)
3428 fprintf (stderr, "handling possible serial event\n");
3429
3430 /* Really handle it. */
3431 if (process_serial_event () < 0)
3432 return -1;
3433
3434 /* Be sure to not change the selected inferior behind GDB's back.
3435 Important in the non-stop mode asynchronous protocol. */
3436 set_desired_inferior (1);
3437
3438 return 0;
3439 }
3440
3441 /* Event-loop callback for target events. */
3442
3443 int
3444 handle_target_event (int err, gdb_client_data client_data)
3445 {
3446 if (debug_threads)
3447 fprintf (stderr, "handling possible target event\n");
3448
3449 last_ptid = mywait (minus_one_ptid, &last_status,
3450 TARGET_WNOHANG, 1);
3451
3452 if (last_status.kind != TARGET_WAITKIND_IGNORE)
3453 {
3454 int pid = ptid_get_pid (last_ptid);
3455 struct process_info *process = find_process_pid (pid);
3456 int forward_event = !gdb_connected () || process->gdb_detached;
3457
3458 if (last_status.kind == TARGET_WAITKIND_EXITED
3459 || last_status.kind == TARGET_WAITKIND_SIGNALLED)
3460 {
3461 mark_breakpoints_out (process);
3462 mourn_inferior (process);
3463 }
3464 else
3465 {
3466 /* We're reporting this thread as stopped. Update its
3467 "want-stopped" state to what the client wants, until it
3468 gets a new resume action. */
3469 current_inferior->last_resume_kind = resume_stop;
3470 current_inferior->last_status = last_status;
3471 }
3472
3473 if (forward_event)
3474 {
3475 if (!target_running ())
3476 {
3477 /* The last process exited. We're done. */
3478 exit (0);
3479 }
3480
3481 if (last_status.kind == TARGET_WAITKIND_STOPPED)
3482 {
3483 /* A thread stopped with a signal, but gdb isn't
3484 connected to handle it. Pass it down to the
3485 inferior, as if it wasn't being traced. */
3486 struct thread_resume resume_info;
3487
3488 if (debug_threads)
3489 fprintf (stderr,
3490 "GDB not connected; forwarding event %d for [%s]\n",
3491 (int) last_status.kind,
3492 target_pid_to_str (last_ptid));
3493
3494 resume_info.thread = last_ptid;
3495 resume_info.kind = resume_continue;
3496 resume_info.sig = gdb_signal_to_host (last_status.value.sig);
3497 (*the_target->resume) (&resume_info, 1);
3498 }
3499 else if (debug_threads)
3500 fprintf (stderr, "GDB not connected; ignoring event %d for [%s]\n",
3501 (int) last_status.kind,
3502 target_pid_to_str (last_ptid));
3503 }
3504 else
3505 {
3506 /* Something interesting. Tell GDB about it. */
3507 push_event (last_ptid, &last_status);
3508 }
3509 }
3510
3511 /* Be sure to not change the selected inferior behind GDB's back.
3512 Important in the non-stop mode asynchronous protocol. */
3513 set_desired_inferior (1);
3514
3515 return 0;
3516 }
This page took 0.11622 seconds and 5 git commands to generate.