daily update
[deliverable/binutils-gdb.git] / gdb / gdbserver / server.c
1 /* Main code for remote server for GDB.
2 Copyright (C) 1989, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2002, 2003,
3 2004, 2005, 2006, 2007, 2008, 2009 Free Software 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
22 #if HAVE_UNISTD_H
23 #include <unistd.h>
24 #endif
25 #if HAVE_SIGNAL_H
26 #include <signal.h>
27 #endif
28 #if HAVE_SYS_WAIT_H
29 #include <sys/wait.h>
30 #endif
31 #if HAVE_MALLOC_H
32 #include <malloc.h>
33 #endif
34
35 unsigned long cont_thread;
36 unsigned long general_thread;
37 unsigned long step_thread;
38 unsigned long thread_from_wait;
39 unsigned long old_thread_from_wait;
40 int server_waiting;
41
42 static int extended_protocol;
43 static int attached;
44 static int response_needed;
45 static int exit_requested;
46
47 static char **program_argv, **wrapper_argv;
48
49 /* Enable miscellaneous debugging output. The name is historical - it
50 was originally used to debug LinuxThreads support. */
51 int debug_threads;
52
53 int pass_signals[TARGET_SIGNAL_LAST];
54
55 jmp_buf toplevel;
56
57 const char *gdbserver_xmltarget;
58
59 /* The PID of the originally created or attached inferior. Used to
60 send signals to the process when GDB sends us an asynchronous interrupt
61 (user hitting Control-C in the client), and to wait for the child to exit
62 when no longer debugging it. */
63
64 unsigned long signal_pid;
65
66 #ifdef SIGTTOU
67 /* A file descriptor for the controlling terminal. */
68 int terminal_fd;
69
70 /* TERMINAL_FD's original foreground group. */
71 pid_t old_foreground_pgrp;
72
73 /* Hand back terminal ownership to the original foreground group. */
74
75 static void
76 restore_old_foreground_pgrp (void)
77 {
78 tcsetpgrp (terminal_fd, old_foreground_pgrp);
79 }
80 #endif
81
82 /* Set if you want to disable optional thread related packets support
83 in gdbserver, for the sake of testing GDB against stubs that don't
84 support them. */
85 int disable_packet_vCont;
86 int disable_packet_Tthread;
87 int disable_packet_qC;
88 int disable_packet_qfThreadInfo;
89
90 static int
91 target_running (void)
92 {
93 return all_threads.head != NULL;
94 }
95
96 static int
97 start_inferior (char **argv, char *statusptr)
98 {
99 char **new_argv = argv;
100 attached = 0;
101
102 if (wrapper_argv != NULL)
103 {
104 int i, count = 1;
105
106 for (i = 0; wrapper_argv[i] != NULL; i++)
107 count++;
108 for (i = 0; argv[i] != NULL; i++)
109 count++;
110 new_argv = alloca (sizeof (char *) * count);
111 count = 0;
112 for (i = 0; wrapper_argv[i] != NULL; i++)
113 new_argv[count++] = wrapper_argv[i];
114 for (i = 0; argv[i] != NULL; i++)
115 new_argv[count++] = argv[i];
116 new_argv[count] = NULL;
117 }
118
119 #ifdef SIGTTOU
120 signal (SIGTTOU, SIG_DFL);
121 signal (SIGTTIN, SIG_DFL);
122 #endif
123
124 signal_pid = create_inferior (new_argv[0], new_argv);
125
126 /* FIXME: we don't actually know at this point that the create
127 actually succeeded. We won't know that until we wait. */
128 fprintf (stderr, "Process %s created; pid = %ld\n", argv[0],
129 signal_pid);
130 fflush (stderr);
131
132 #ifdef SIGTTOU
133 signal (SIGTTOU, SIG_IGN);
134 signal (SIGTTIN, SIG_IGN);
135 terminal_fd = fileno (stderr);
136 old_foreground_pgrp = tcgetpgrp (terminal_fd);
137 tcsetpgrp (terminal_fd, signal_pid);
138 atexit (restore_old_foreground_pgrp);
139 #endif
140
141 if (wrapper_argv != NULL)
142 {
143 struct thread_resume resume_info;
144 int sig;
145
146 resume_info.thread = -1;
147 resume_info.step = 0;
148 resume_info.sig = 0;
149 resume_info.leave_stopped = 0;
150
151 sig = mywait (statusptr, 0);
152 if (*statusptr != 'T')
153 return sig;
154
155 do
156 {
157 (*the_target->resume) (&resume_info);
158
159 sig = mywait (statusptr, 0);
160 if (*statusptr != 'T')
161 return sig;
162 }
163 while (sig != TARGET_SIGNAL_TRAP);
164
165 return sig;
166 }
167
168 /* Wait till we are at 1st instruction in program, return signal
169 number (assuming success). */
170 return mywait (statusptr, 0);
171 }
172
173 static int
174 attach_inferior (int pid, char *statusptr, int *sigptr)
175 {
176 /* myattach should return -1 if attaching is unsupported,
177 0 if it succeeded, and call error() otherwise. */
178
179 if (myattach (pid) != 0)
180 return -1;
181
182 attached = 1;
183
184 fprintf (stderr, "Attached; pid = %d\n", pid);
185 fflush (stderr);
186
187 /* FIXME - It may be that we should get the SIGNAL_PID from the
188 attach function, so that it can be the main thread instead of
189 whichever we were told to attach to. */
190 signal_pid = pid;
191
192 *sigptr = mywait (statusptr, 0);
193
194 /* GDB knows to ignore the first SIGSTOP after attaching to a running
195 process using the "attach" command, but this is different; it's
196 just using "target remote". Pretend it's just starting up. */
197 if (*statusptr == 'T' && *sigptr == TARGET_SIGNAL_STOP)
198 *sigptr = TARGET_SIGNAL_TRAP;
199
200 return 0;
201 }
202
203 extern int remote_debug;
204
205 /* Decode a qXfer read request. Return 0 if everything looks OK,
206 or -1 otherwise. */
207
208 static int
209 decode_xfer_read (char *buf, char **annex, CORE_ADDR *ofs, unsigned int *len)
210 {
211 /* Extract and NUL-terminate the annex. */
212 *annex = buf;
213 while (*buf && *buf != ':')
214 buf++;
215 if (*buf == '\0')
216 return -1;
217 *buf++ = 0;
218
219 /* After the read marker and annex, qXfer looks like a
220 traditional 'm' packet. */
221 decode_m_packet (buf, ofs, len);
222
223 return 0;
224 }
225
226 /* Write the response to a successful qXfer read. Returns the
227 length of the (binary) data stored in BUF, corresponding
228 to as much of DATA/LEN as we could fit. IS_MORE controls
229 the first character of the response. */
230 static int
231 write_qxfer_response (char *buf, const void *data, int len, int is_more)
232 {
233 int out_len;
234
235 if (is_more)
236 buf[0] = 'm';
237 else
238 buf[0] = 'l';
239
240 return remote_escape_output (data, len, (unsigned char *) buf + 1, &out_len,
241 PBUFSIZ - 2) + 1;
242 }
243
244 /* Handle all of the extended 'Q' packets. */
245 void
246 handle_general_set (char *own_buf)
247 {
248 if (strncmp ("QPassSignals:", own_buf, strlen ("QPassSignals:")) == 0)
249 {
250 int numsigs = (int) TARGET_SIGNAL_LAST, i;
251 const char *p = own_buf + strlen ("QPassSignals:");
252 CORE_ADDR cursig;
253
254 p = decode_address_to_semicolon (&cursig, p);
255 for (i = 0; i < numsigs; i++)
256 {
257 if (i == cursig)
258 {
259 pass_signals[i] = 1;
260 if (*p == '\0')
261 /* Keep looping, to clear the remaining signals. */
262 cursig = -1;
263 else
264 p = decode_address_to_semicolon (&cursig, p);
265 }
266 else
267 pass_signals[i] = 0;
268 }
269 strcpy (own_buf, "OK");
270 return;
271 }
272
273 if (strcmp (own_buf, "QStartNoAckMode") == 0)
274 {
275 if (remote_debug)
276 {
277 fprintf (stderr, "[noack mode enabled]\n");
278 fflush (stderr);
279 }
280
281 noack_mode = 1;
282 write_ok (own_buf);
283 return;
284 }
285
286 /* Otherwise we didn't know what packet it was. Say we didn't
287 understand it. */
288 own_buf[0] = 0;
289 }
290
291 static const char *
292 get_features_xml (const char *annex)
293 {
294 /* gdbserver_xmltarget defines what to return when looking
295 for the "target.xml" file. Its contents can either be
296 verbatim XML code (prefixed with a '@') or else the name
297 of the actual XML file to be used in place of "target.xml".
298
299 This variable is set up from the auto-generated
300 init_registers_... routine for the current target. */
301
302 if (gdbserver_xmltarget
303 && strcmp (annex, "target.xml") == 0)
304 {
305 if (*gdbserver_xmltarget == '@')
306 return gdbserver_xmltarget + 1;
307 else
308 annex = gdbserver_xmltarget;
309 }
310
311 #ifdef USE_XML
312 {
313 extern const char *const xml_builtin[][2];
314 int i;
315
316 /* Look for the annex. */
317 for (i = 0; xml_builtin[i][0] != NULL; i++)
318 if (strcmp (annex, xml_builtin[i][0]) == 0)
319 break;
320
321 if (xml_builtin[i][0] != NULL)
322 return xml_builtin[i][1];
323 }
324 #endif
325
326 return NULL;
327 }
328
329 void
330 monitor_show_help (void)
331 {
332 monitor_output ("The following monitor commands are supported:\n");
333 monitor_output (" set debug <0|1>\n");
334 monitor_output (" Enable general debugging messages\n");
335 monitor_output (" set remote-debug <0|1>\n");
336 monitor_output (" Enable remote protocol debugging messages\n");
337 monitor_output (" exit\n");
338 monitor_output (" Quit GDBserver\n");
339 }
340
341 /* Subroutine of handle_search_memory to simplify it. */
342
343 static int
344 handle_search_memory_1 (CORE_ADDR start_addr, CORE_ADDR search_space_len,
345 gdb_byte *pattern, unsigned pattern_len,
346 gdb_byte *search_buf,
347 unsigned chunk_size, unsigned search_buf_size,
348 CORE_ADDR *found_addrp)
349 {
350 /* Prime the search buffer. */
351
352 if (read_inferior_memory (start_addr, search_buf, search_buf_size) != 0)
353 {
354 warning ("Unable to access target memory at 0x%lx, halting search.",
355 (long) start_addr);
356 return -1;
357 }
358
359 /* Perform the search.
360
361 The loop is kept simple by allocating [N + pattern-length - 1] bytes.
362 When we've scanned N bytes we copy the trailing bytes to the start and
363 read in another N bytes. */
364
365 while (search_space_len >= pattern_len)
366 {
367 gdb_byte *found_ptr;
368 unsigned nr_search_bytes = (search_space_len < search_buf_size
369 ? search_space_len
370 : search_buf_size);
371
372 found_ptr = memmem (search_buf, nr_search_bytes, pattern, pattern_len);
373
374 if (found_ptr != NULL)
375 {
376 CORE_ADDR found_addr = start_addr + (found_ptr - search_buf);
377 *found_addrp = found_addr;
378 return 1;
379 }
380
381 /* Not found in this chunk, skip to next chunk. */
382
383 /* Don't let search_space_len wrap here, it's unsigned. */
384 if (search_space_len >= chunk_size)
385 search_space_len -= chunk_size;
386 else
387 search_space_len = 0;
388
389 if (search_space_len >= pattern_len)
390 {
391 unsigned keep_len = search_buf_size - chunk_size;
392 CORE_ADDR read_addr = start_addr + keep_len;
393 int nr_to_read;
394
395 /* Copy the trailing part of the previous iteration to the front
396 of the buffer for the next iteration. */
397 memcpy (search_buf, search_buf + chunk_size, keep_len);
398
399 nr_to_read = (search_space_len - keep_len < chunk_size
400 ? search_space_len - keep_len
401 : chunk_size);
402
403 if (read_inferior_memory (read_addr, search_buf + keep_len,
404 nr_to_read) != 0)
405 {
406 warning ("Unable to access target memory at 0x%lx, halting search.",
407 (long) read_addr);
408 return -1;
409 }
410
411 start_addr += chunk_size;
412 }
413 }
414
415 /* Not found. */
416
417 return 0;
418 }
419
420 /* Handle qSearch:memory packets. */
421
422 static void
423 handle_search_memory (char *own_buf, int packet_len)
424 {
425 CORE_ADDR start_addr;
426 CORE_ADDR search_space_len;
427 gdb_byte *pattern;
428 unsigned int pattern_len;
429 /* NOTE: also defined in find.c testcase. */
430 #define SEARCH_CHUNK_SIZE 16000
431 const unsigned chunk_size = SEARCH_CHUNK_SIZE;
432 /* Buffer to hold memory contents for searching. */
433 gdb_byte *search_buf;
434 unsigned search_buf_size;
435 int found;
436 CORE_ADDR found_addr;
437 int cmd_name_len = sizeof ("qSearch:memory:") - 1;
438
439 pattern = malloc (packet_len);
440 if (pattern == NULL)
441 {
442 error ("Unable to allocate memory to perform the search");
443 strcpy (own_buf, "E00");
444 return;
445 }
446 if (decode_search_memory_packet (own_buf + cmd_name_len,
447 packet_len - cmd_name_len,
448 &start_addr, &search_space_len,
449 pattern, &pattern_len) < 0)
450 {
451 free (pattern);
452 error ("Error in parsing qSearch:memory packet");
453 strcpy (own_buf, "E00");
454 return;
455 }
456
457 search_buf_size = chunk_size + pattern_len - 1;
458
459 /* No point in trying to allocate a buffer larger than the search space. */
460 if (search_space_len < search_buf_size)
461 search_buf_size = search_space_len;
462
463 search_buf = malloc (search_buf_size);
464 if (search_buf == NULL)
465 {
466 free (pattern);
467 error ("Unable to allocate memory to perform the search");
468 strcpy (own_buf, "E00");
469 return;
470 }
471
472 found = handle_search_memory_1 (start_addr, search_space_len,
473 pattern, pattern_len,
474 search_buf, chunk_size, search_buf_size,
475 &found_addr);
476
477 if (found > 0)
478 sprintf (own_buf, "1,%lx", (long) found_addr);
479 else if (found == 0)
480 strcpy (own_buf, "0");
481 else
482 strcpy (own_buf, "E00");
483
484 free (search_buf);
485 free (pattern);
486 }
487
488 #define require_running(BUF) \
489 if (!target_running ()) \
490 { \
491 write_enn (BUF); \
492 return; \
493 }
494
495 /* Handle all of the extended 'q' packets. */
496 void
497 handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
498 {
499 static struct inferior_list_entry *thread_ptr;
500
501 /* Reply the current thread id. */
502 if (strcmp ("qC", own_buf) == 0 && !disable_packet_qC)
503 {
504 require_running (own_buf);
505 thread_ptr = all_threads.head;
506 sprintf (own_buf, "QC%x",
507 thread_to_gdb_id ((struct thread_info *)thread_ptr));
508 return;
509 }
510
511 if (strcmp ("qSymbol::", own_buf) == 0)
512 {
513 if (target_running () && the_target->look_up_symbols != NULL)
514 (*the_target->look_up_symbols) ();
515
516 strcpy (own_buf, "OK");
517 return;
518 }
519
520 if (!disable_packet_qfThreadInfo)
521 {
522 if (strcmp ("qfThreadInfo", own_buf) == 0)
523 {
524 require_running (own_buf);
525 thread_ptr = all_threads.head;
526 sprintf (own_buf, "m%x", thread_to_gdb_id ((struct thread_info *)thread_ptr));
527 thread_ptr = thread_ptr->next;
528 return;
529 }
530
531 if (strcmp ("qsThreadInfo", own_buf) == 0)
532 {
533 require_running (own_buf);
534 if (thread_ptr != NULL)
535 {
536 sprintf (own_buf, "m%x", thread_to_gdb_id ((struct thread_info *)thread_ptr));
537 thread_ptr = thread_ptr->next;
538 return;
539 }
540 else
541 {
542 sprintf (own_buf, "l");
543 return;
544 }
545 }
546 }
547
548 if (the_target->read_offsets != NULL
549 && strcmp ("qOffsets", own_buf) == 0)
550 {
551 CORE_ADDR text, data;
552
553 require_running (own_buf);
554 if (the_target->read_offsets (&text, &data))
555 sprintf (own_buf, "Text=%lX;Data=%lX;Bss=%lX",
556 (long)text, (long)data, (long)data);
557 else
558 write_enn (own_buf);
559
560 return;
561 }
562
563 if (the_target->qxfer_spu != NULL
564 && strncmp ("qXfer:spu:read:", own_buf, 15) == 0)
565 {
566 char *annex;
567 int n;
568 unsigned int len;
569 CORE_ADDR ofs;
570 unsigned char *spu_buf;
571
572 require_running (own_buf);
573 strcpy (own_buf, "E00");
574 if (decode_xfer_read (own_buf + 15, &annex, &ofs, &len) < 0)
575 return;
576 if (len > PBUFSIZ - 2)
577 len = PBUFSIZ - 2;
578 spu_buf = malloc (len + 1);
579 if (!spu_buf)
580 return;
581
582 n = (*the_target->qxfer_spu) (annex, spu_buf, NULL, ofs, len + 1);
583 if (n < 0)
584 write_enn (own_buf);
585 else if (n > len)
586 *new_packet_len_p = write_qxfer_response
587 (own_buf, spu_buf, len, 1);
588 else
589 *new_packet_len_p = write_qxfer_response
590 (own_buf, spu_buf, n, 0);
591
592 free (spu_buf);
593 return;
594 }
595
596 if (the_target->qxfer_spu != NULL
597 && strncmp ("qXfer:spu:write:", own_buf, 16) == 0)
598 {
599 char *annex;
600 int n;
601 unsigned int len;
602 CORE_ADDR ofs;
603 unsigned char *spu_buf;
604
605 require_running (own_buf);
606 strcpy (own_buf, "E00");
607 spu_buf = malloc (packet_len - 15);
608 if (!spu_buf)
609 return;
610 if (decode_xfer_write (own_buf + 16, packet_len - 16, &annex,
611 &ofs, &len, spu_buf) < 0)
612 {
613 free (spu_buf);
614 return;
615 }
616
617 n = (*the_target->qxfer_spu)
618 (annex, NULL, (unsigned const char *)spu_buf, ofs, len);
619 if (n < 0)
620 write_enn (own_buf);
621 else
622 sprintf (own_buf, "%x", n);
623
624 free (spu_buf);
625 return;
626 }
627
628 if (the_target->read_auxv != NULL
629 && strncmp ("qXfer:auxv:read:", own_buf, 16) == 0)
630 {
631 unsigned char *data;
632 int n;
633 CORE_ADDR ofs;
634 unsigned int len;
635 char *annex;
636
637 require_running (own_buf);
638
639 /* Reject any annex; grab the offset and length. */
640 if (decode_xfer_read (own_buf + 16, &annex, &ofs, &len) < 0
641 || annex[0] != '\0')
642 {
643 strcpy (own_buf, "E00");
644 return;
645 }
646
647 /* Read one extra byte, as an indicator of whether there is
648 more. */
649 if (len > PBUFSIZ - 2)
650 len = PBUFSIZ - 2;
651 data = malloc (len + 1);
652 if (data == NULL)
653 {
654 write_enn (own_buf);
655 return;
656 }
657 n = (*the_target->read_auxv) (ofs, data, len + 1);
658 if (n < 0)
659 write_enn (own_buf);
660 else if (n > len)
661 *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
662 else
663 *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
664
665 free (data);
666
667 return;
668 }
669
670 if (strncmp ("qXfer:features:read:", own_buf, 20) == 0)
671 {
672 CORE_ADDR ofs;
673 unsigned int len, total_len;
674 const char *document;
675 char *annex;
676
677 require_running (own_buf);
678
679 /* Grab the annex, offset, and length. */
680 if (decode_xfer_read (own_buf + 20, &annex, &ofs, &len) < 0)
681 {
682 strcpy (own_buf, "E00");
683 return;
684 }
685
686 /* Now grab the correct annex. */
687 document = get_features_xml (annex);
688 if (document == NULL)
689 {
690 strcpy (own_buf, "E00");
691 return;
692 }
693
694 total_len = strlen (document);
695 if (len > PBUFSIZ - 2)
696 len = PBUFSIZ - 2;
697
698 if (ofs > total_len)
699 write_enn (own_buf);
700 else if (len < total_len - ofs)
701 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
702 len, 1);
703 else
704 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
705 total_len - ofs, 0);
706
707 return;
708 }
709
710 if (strncmp ("qXfer:libraries:read:", own_buf, 21) == 0)
711 {
712 CORE_ADDR ofs;
713 unsigned int len, total_len;
714 char *document, *p;
715 struct inferior_list_entry *dll_ptr;
716 char *annex;
717
718 require_running (own_buf);
719
720 /* Reject any annex; grab the offset and length. */
721 if (decode_xfer_read (own_buf + 21, &annex, &ofs, &len) < 0
722 || annex[0] != '\0')
723 {
724 strcpy (own_buf, "E00");
725 return;
726 }
727
728 /* Over-estimate the necessary memory. Assume that every character
729 in the library name must be escaped. */
730 total_len = 64;
731 for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)
732 total_len += 128 + 6 * strlen (((struct dll_info *) dll_ptr)->name);
733
734 document = malloc (total_len);
735 if (document == NULL)
736 {
737 write_enn (own_buf);
738 return;
739 }
740 strcpy (document, "<library-list>\n");
741 p = document + strlen (document);
742
743 for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)
744 {
745 struct dll_info *dll = (struct dll_info *) dll_ptr;
746 char *name;
747
748 strcpy (p, " <library name=\"");
749 p = p + strlen (p);
750 name = xml_escape_text (dll->name);
751 strcpy (p, name);
752 free (name);
753 p = p + strlen (p);
754 strcpy (p, "\"><segment address=\"");
755 p = p + strlen (p);
756 sprintf (p, "0x%lx", (long) dll->base_addr);
757 p = p + strlen (p);
758 strcpy (p, "\"/></library>\n");
759 p = p + strlen (p);
760 }
761
762 strcpy (p, "</library-list>\n");
763
764 total_len = strlen (document);
765 if (len > PBUFSIZ - 2)
766 len = PBUFSIZ - 2;
767
768 if (ofs > total_len)
769 write_enn (own_buf);
770 else if (len < total_len - ofs)
771 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
772 len, 1);
773 else
774 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
775 total_len - ofs, 0);
776
777 free (document);
778 return;
779 }
780
781 if (the_target->qxfer_osdata != NULL
782 && strncmp ("qXfer:osdata:read:", own_buf, 18) == 0)
783 {
784 char *annex;
785 int n;
786 unsigned int len;
787 CORE_ADDR ofs;
788 unsigned char *workbuf;
789
790 strcpy (own_buf, "E00");
791 if (decode_xfer_read (own_buf + 18, &annex, &ofs, &len) < 0)
792 return;
793 if (len > PBUFSIZ - 2)
794 len = PBUFSIZ - 2;
795 workbuf = malloc (len + 1);
796 if (!workbuf)
797 return;
798
799 n = (*the_target->qxfer_osdata) (annex, workbuf, NULL, ofs, len + 1);
800 if (n < 0)
801 write_enn (own_buf);
802 else if (n > len)
803 *new_packet_len_p = write_qxfer_response
804 (own_buf, workbuf, len, 1);
805 else
806 *new_packet_len_p = write_qxfer_response
807 (own_buf, workbuf, n, 0);
808
809 free (workbuf);
810 return;
811 }
812
813 if (the_target->qxfer_siginfo != NULL
814 && strncmp ("qXfer:siginfo:read:", own_buf, 19) == 0)
815 {
816 unsigned char *data;
817 int n;
818 CORE_ADDR ofs;
819 unsigned int len;
820 char *annex;
821
822 require_running (own_buf);
823
824 /* Reject any annex; grab the offset and length. */
825 if (decode_xfer_read (own_buf + 19, &annex, &ofs, &len) < 0
826 || annex[0] != '\0')
827 {
828 strcpy (own_buf, "E00");
829 return;
830 }
831
832 /* Read one extra byte, as an indicator of whether there is
833 more. */
834 if (len > PBUFSIZ - 2)
835 len = PBUFSIZ - 2;
836 data = malloc (len + 1);
837 if (!data)
838 return;
839 n = (*the_target->qxfer_siginfo) (annex, data, NULL, ofs, len + 1);
840 if (n < 0)
841 write_enn (own_buf);
842 else if (n > len)
843 *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
844 else
845 *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
846
847 free (data);
848 return;
849 }
850
851 if (the_target->qxfer_siginfo != NULL
852 && strncmp ("qXfer:siginfo:write:", own_buf, 20) == 0)
853 {
854 char *annex;
855 int n;
856 unsigned int len;
857 CORE_ADDR ofs;
858 unsigned char *data;
859
860 require_running (own_buf);
861
862 strcpy (own_buf, "E00");
863 data = malloc (packet_len - 19);
864 if (!data)
865 return;
866 if (decode_xfer_write (own_buf + 20, packet_len - 20, &annex,
867 &ofs, &len, data) < 0)
868 {
869 free (data);
870 return;
871 }
872
873 n = (*the_target->qxfer_siginfo)
874 (annex, NULL, (unsigned const char *)data, ofs, len);
875 if (n < 0)
876 write_enn (own_buf);
877 else
878 sprintf (own_buf, "%x", n);
879
880 free (data);
881 return;
882 }
883
884 /* Protocol features query. */
885 if (strncmp ("qSupported", own_buf, 10) == 0
886 && (own_buf[10] == ':' || own_buf[10] == '\0'))
887 {
888 sprintf (own_buf, "PacketSize=%x;QPassSignals+", PBUFSIZ - 1);
889
890 /* We do not have any hook to indicate whether the target backend
891 supports qXfer:libraries:read, so always report it. */
892 strcat (own_buf, ";qXfer:libraries:read+");
893
894 if (the_target->read_auxv != NULL)
895 strcat (own_buf, ";qXfer:auxv:read+");
896
897 if (the_target->qxfer_spu != NULL)
898 strcat (own_buf, ";qXfer:spu:read+;qXfer:spu:write+");
899
900 if (the_target->qxfer_siginfo != NULL)
901 strcat (own_buf, ";qXfer:siginfo:read+;qXfer:siginfo:write+");
902
903 /* We always report qXfer:features:read, as targets may
904 install XML files on a subsequent call to arch_setup.
905 If we reported to GDB on startup that we don't support
906 qXfer:feature:read at all, we will never be re-queried. */
907 strcat (own_buf, ";qXfer:features:read+");
908
909 if (transport_is_reliable)
910 strcat (own_buf, ";QStartNoAckMode+");
911
912 if (the_target->qxfer_osdata != NULL)
913 strcat (own_buf, ";qXfer:osdata:read+");
914
915 return;
916 }
917
918 /* Thread-local storage support. */
919 if (the_target->get_tls_address != NULL
920 && strncmp ("qGetTLSAddr:", own_buf, 12) == 0)
921 {
922 char *p = own_buf + 12;
923 CORE_ADDR parts[3], address = 0;
924 int i, err;
925
926 require_running (own_buf);
927
928 for (i = 0; i < 3; i++)
929 {
930 char *p2;
931 int len;
932
933 if (p == NULL)
934 break;
935
936 p2 = strchr (p, ',');
937 if (p2)
938 {
939 len = p2 - p;
940 p2++;
941 }
942 else
943 {
944 len = strlen (p);
945 p2 = NULL;
946 }
947
948 decode_address (&parts[i], p, len);
949 p = p2;
950 }
951
952 if (p != NULL || i < 3)
953 err = 1;
954 else
955 {
956 struct thread_info *thread = gdb_id_to_thread (parts[0]);
957
958 if (thread == NULL)
959 err = 2;
960 else
961 err = the_target->get_tls_address (thread, parts[1], parts[2],
962 &address);
963 }
964
965 if (err == 0)
966 {
967 sprintf (own_buf, "%llx", address);
968 return;
969 }
970 else if (err > 0)
971 {
972 write_enn (own_buf);
973 return;
974 }
975
976 /* Otherwise, pretend we do not understand this packet. */
977 }
978
979 /* Handle "monitor" commands. */
980 if (strncmp ("qRcmd,", own_buf, 6) == 0)
981 {
982 char *mon = malloc (PBUFSIZ);
983 int len = strlen (own_buf + 6);
984
985 if (mon == NULL)
986 {
987 write_enn (own_buf);
988 return;
989 }
990
991 if ((len % 2) != 0 || unhexify (mon, own_buf + 6, len / 2) != len / 2)
992 {
993 write_enn (own_buf);
994 free (mon);
995 return;
996 }
997 mon[len / 2] = '\0';
998
999 write_ok (own_buf);
1000
1001 if (strcmp (mon, "set debug 1") == 0)
1002 {
1003 debug_threads = 1;
1004 monitor_output ("Debug output enabled.\n");
1005 }
1006 else if (strcmp (mon, "set debug 0") == 0)
1007 {
1008 debug_threads = 0;
1009 monitor_output ("Debug output disabled.\n");
1010 }
1011 else if (strcmp (mon, "set remote-debug 1") == 0)
1012 {
1013 remote_debug = 1;
1014 monitor_output ("Protocol debug output enabled.\n");
1015 }
1016 else if (strcmp (mon, "set remote-debug 0") == 0)
1017 {
1018 remote_debug = 0;
1019 monitor_output ("Protocol debug output disabled.\n");
1020 }
1021 else if (strcmp (mon, "help") == 0)
1022 monitor_show_help ();
1023 else if (strcmp (mon, "exit") == 0)
1024 exit_requested = 1;
1025 else
1026 {
1027 monitor_output ("Unknown monitor command.\n\n");
1028 monitor_show_help ();
1029 write_enn (own_buf);
1030 }
1031
1032 free (mon);
1033 return;
1034 }
1035
1036 if (strncmp ("qSearch:memory:", own_buf, sizeof ("qSearch:memory:") - 1) == 0)
1037 {
1038 require_running (own_buf);
1039 handle_search_memory (own_buf, packet_len);
1040 return;
1041 }
1042
1043 /* Otherwise we didn't know what packet it was. Say we didn't
1044 understand it. */
1045 own_buf[0] = 0;
1046 }
1047
1048 /* Parse vCont packets. */
1049 void
1050 handle_v_cont (char *own_buf, char *status, int *signal)
1051 {
1052 char *p, *q;
1053 int n = 0, i = 0;
1054 struct thread_resume *resume_info, default_action;
1055
1056 /* Count the number of semicolons in the packet. There should be one
1057 for every action. */
1058 p = &own_buf[5];
1059 while (p)
1060 {
1061 n++;
1062 p++;
1063 p = strchr (p, ';');
1064 }
1065 /* Allocate room for one extra action, for the default remain-stopped
1066 behavior; if no default action is in the list, we'll need the extra
1067 slot. */
1068 resume_info = malloc ((n + 1) * sizeof (resume_info[0]));
1069 if (resume_info == NULL)
1070 goto err;
1071
1072 default_action.thread = -1;
1073 default_action.leave_stopped = 1;
1074 default_action.step = 0;
1075 default_action.sig = 0;
1076
1077 p = &own_buf[5];
1078 i = 0;
1079 while (*p)
1080 {
1081 p++;
1082
1083 resume_info[i].leave_stopped = 0;
1084
1085 if (p[0] == 's' || p[0] == 'S')
1086 resume_info[i].step = 1;
1087 else if (p[0] == 'c' || p[0] == 'C')
1088 resume_info[i].step = 0;
1089 else
1090 goto err;
1091
1092 if (p[0] == 'S' || p[0] == 'C')
1093 {
1094 int sig;
1095 sig = strtol (p + 1, &q, 16);
1096 if (p == q)
1097 goto err;
1098 p = q;
1099
1100 if (!target_signal_to_host_p (sig))
1101 goto err;
1102 resume_info[i].sig = target_signal_to_host (sig);
1103 }
1104 else
1105 {
1106 resume_info[i].sig = 0;
1107 p = p + 1;
1108 }
1109
1110 if (p[0] == 0)
1111 {
1112 resume_info[i].thread = -1;
1113 default_action = resume_info[i];
1114
1115 /* Note: we don't increment i here, we'll overwrite this entry
1116 the next time through. */
1117 }
1118 else if (p[0] == ':')
1119 {
1120 unsigned int gdb_id = strtoul (p + 1, &q, 16);
1121 unsigned long thread_id;
1122
1123 if (p == q)
1124 goto err;
1125 p = q;
1126 if (p[0] != ';' && p[0] != 0)
1127 goto err;
1128
1129 thread_id = gdb_id_to_thread_id (gdb_id);
1130 if (thread_id)
1131 resume_info[i].thread = thread_id;
1132 else
1133 goto err;
1134
1135 i++;
1136 }
1137 }
1138
1139 resume_info[i] = default_action;
1140
1141 /* Still used in occasional places in the backend. */
1142 if (n == 1 && resume_info[0].thread != -1)
1143 cont_thread = resume_info[0].thread;
1144 else
1145 cont_thread = -1;
1146 set_desired_inferior (0);
1147
1148 enable_async_io ();
1149 (*the_target->resume) (resume_info);
1150
1151 free (resume_info);
1152
1153 *signal = mywait (status, 1);
1154 prepare_resume_reply (own_buf, *status, *signal);
1155 disable_async_io ();
1156 return;
1157
1158 err:
1159 write_enn (own_buf);
1160 free (resume_info);
1161 return;
1162 }
1163
1164 /* Attach to a new program. Return 1 if successful, 0 if failure. */
1165 int
1166 handle_v_attach (char *own_buf, char *status, int *signal)
1167 {
1168 int pid;
1169
1170 pid = strtol (own_buf + 8, NULL, 16);
1171 if (pid != 0 && attach_inferior (pid, status, signal) == 0)
1172 {
1173 /* Don't report shared library events after attaching, even if
1174 some libraries are preloaded. GDB will always poll the
1175 library list. Avoids the "stopped by shared library event"
1176 notice on the GDB side. */
1177 dlls_changed = 0;
1178 prepare_resume_reply (own_buf, *status, *signal);
1179 return 1;
1180 }
1181 else
1182 {
1183 write_enn (own_buf);
1184 return 0;
1185 }
1186 }
1187
1188 /* Run a new program. Return 1 if successful, 0 if failure. */
1189 static int
1190 handle_v_run (char *own_buf, char *status, int *signal)
1191 {
1192 char *p, *next_p, **new_argv;
1193 int i, new_argc;
1194
1195 new_argc = 0;
1196 for (p = own_buf + strlen ("vRun;"); p && *p; p = strchr (p, ';'))
1197 {
1198 p++;
1199 new_argc++;
1200 }
1201
1202 new_argv = calloc (new_argc + 2, sizeof (char *));
1203 if (new_argv == NULL)
1204 {
1205 write_enn (own_buf);
1206 return 0;
1207 }
1208
1209 i = 0;
1210 for (p = own_buf + strlen ("vRun;"); *p; p = next_p)
1211 {
1212 next_p = strchr (p, ';');
1213 if (next_p == NULL)
1214 next_p = p + strlen (p);
1215
1216 if (i == 0 && p == next_p)
1217 new_argv[i] = NULL;
1218 else
1219 {
1220 /* FIXME: Fail request if out of memory instead of dying. */
1221 new_argv[i] = xmalloc (1 + (next_p - p) / 2);
1222 unhexify (new_argv[i], p, (next_p - p) / 2);
1223 new_argv[i][(next_p - p) / 2] = '\0';
1224 }
1225
1226 if (*next_p)
1227 next_p++;
1228 i++;
1229 }
1230 new_argv[i] = NULL;
1231
1232 if (new_argv[0] == NULL)
1233 {
1234 /* GDB didn't specify a program to run. Use the program from the
1235 last run with the new argument list. */
1236
1237 if (program_argv == NULL)
1238 {
1239 /* FIXME: new_argv memory leak */
1240 write_enn (own_buf);
1241 return 0;
1242 }
1243
1244 new_argv[0] = strdup (program_argv[0]);
1245 if (new_argv[0] == NULL)
1246 {
1247 /* FIXME: new_argv memory leak */
1248 write_enn (own_buf);
1249 return 0;
1250 }
1251 }
1252
1253 /* Free the old argv and install the new one. */
1254 freeargv (program_argv);
1255 program_argv = new_argv;
1256
1257 *signal = start_inferior (program_argv, status);
1258 if (*status == 'T')
1259 {
1260 prepare_resume_reply (own_buf, *status, *signal);
1261 return 1;
1262 }
1263 else
1264 {
1265 write_enn (own_buf);
1266 return 0;
1267 }
1268 }
1269
1270 /* Handle all of the extended 'v' packets. */
1271 void
1272 handle_v_requests (char *own_buf, char *status, int *signal,
1273 int packet_len, int *new_packet_len)
1274 {
1275 if (!disable_packet_vCont)
1276 {
1277 if (strncmp (own_buf, "vCont;", 6) == 0)
1278 {
1279 require_running (own_buf);
1280 handle_v_cont (own_buf, status, signal);
1281 return;
1282 }
1283
1284 if (strncmp (own_buf, "vCont?", 6) == 0)
1285 {
1286 strcpy (own_buf, "vCont;c;C;s;S");
1287 return;
1288 }
1289 }
1290
1291 if (strncmp (own_buf, "vFile:", 6) == 0
1292 && handle_vFile (own_buf, packet_len, new_packet_len))
1293 return;
1294
1295 if (strncmp (own_buf, "vAttach;", 8) == 0)
1296 {
1297 if (target_running ())
1298 {
1299 fprintf (stderr, "Already debugging a process\n");
1300 write_enn (own_buf);
1301 return;
1302 }
1303 handle_v_attach (own_buf, status, signal);
1304 return;
1305 }
1306
1307 if (strncmp (own_buf, "vRun;", 5) == 0)
1308 {
1309 if (target_running ())
1310 {
1311 fprintf (stderr, "Already debugging a process\n");
1312 write_enn (own_buf);
1313 return;
1314 }
1315 handle_v_run (own_buf, status, signal);
1316 return;
1317 }
1318
1319 /* Otherwise we didn't know what packet it was. Say we didn't
1320 understand it. */
1321 own_buf[0] = 0;
1322 return;
1323 }
1324
1325 void
1326 myresume (char *own_buf, int step, int *signalp, char *statusp)
1327 {
1328 struct thread_resume resume_info[2];
1329 int n = 0;
1330 int sig = *signalp;
1331
1332 set_desired_inferior (0);
1333
1334 if (step || sig || (cont_thread != 0 && cont_thread != -1))
1335 {
1336 resume_info[0].thread
1337 = ((struct inferior_list_entry *) current_inferior)->id;
1338 resume_info[0].step = step;
1339 resume_info[0].sig = sig;
1340 resume_info[0].leave_stopped = 0;
1341 n++;
1342 }
1343 resume_info[n].thread = -1;
1344 resume_info[n].step = 0;
1345 resume_info[n].sig = 0;
1346 resume_info[n].leave_stopped = (cont_thread != 0 && cont_thread != -1);
1347
1348 enable_async_io ();
1349 (*the_target->resume) (resume_info);
1350 *signalp = mywait (statusp, 1);
1351 prepare_resume_reply (own_buf, *statusp, *signalp);
1352 disable_async_io ();
1353 }
1354
1355 static void
1356 gdbserver_version (void)
1357 {
1358 printf ("GNU gdbserver %s%s\n"
1359 "Copyright (C) 2009 Free Software Foundation, Inc.\n"
1360 "gdbserver is free software, covered by the GNU General Public License.\n"
1361 "This gdbserver was configured as \"%s\"\n",
1362 PKGVERSION, version, host_name);
1363 }
1364
1365 static void
1366 gdbserver_usage (FILE *stream)
1367 {
1368 fprintf (stream, "Usage:\tgdbserver [OPTIONS] COMM PROG [ARGS ...]\n"
1369 "\tgdbserver [OPTIONS] --attach COMM PID\n"
1370 "\tgdbserver [OPTIONS] --multi COMM\n"
1371 "\n"
1372 "COMM may either be a tty device (for serial debugging), or \n"
1373 "HOST:PORT to listen for a TCP connection.\n"
1374 "\n"
1375 "Options:\n"
1376 " --debug Enable general debugging output.\n"
1377 " --remote-debug Enable remote protocol debugging output.\n"
1378 " --version Display version information and exit.\n"
1379 " --wrapper WRAPPER -- Run WRAPPER to start new programs.\n");
1380 if (REPORT_BUGS_TO[0] && stream == stdout)
1381 fprintf (stream, "Report bugs to \"%s\".\n", REPORT_BUGS_TO);
1382 }
1383
1384 static void
1385 gdbserver_show_disableable (FILE *stream)
1386 {
1387 fprintf (stream, "Disableable packets:\n"
1388 " vCont \tAll vCont packets\n"
1389 " qC \tQuerying the current thread\n"
1390 " qfThreadInfo\tThread listing\n"
1391 " Tthread \tPassing the thread specifier in the T stop reply packet\n"
1392 " threads \tAll of the above\n");
1393 }
1394
1395
1396 #undef require_running
1397 #define require_running(BUF) \
1398 if (!target_running ()) \
1399 { \
1400 write_enn (BUF); \
1401 break; \
1402 }
1403
1404 int
1405 main (int argc, char *argv[])
1406 {
1407 char ch, status, *own_buf;
1408 unsigned char *mem_buf;
1409 int i = 0;
1410 int signal;
1411 unsigned int len;
1412 CORE_ADDR mem_addr;
1413 int bad_attach;
1414 int pid;
1415 char *arg_end, *port;
1416 char **next_arg = &argv[1];
1417 int multi_mode = 0;
1418 int attach = 0;
1419 int was_running;
1420
1421 while (*next_arg != NULL && **next_arg == '-')
1422 {
1423 if (strcmp (*next_arg, "--version") == 0)
1424 {
1425 gdbserver_version ();
1426 exit (0);
1427 }
1428 else if (strcmp (*next_arg, "--help") == 0)
1429 {
1430 gdbserver_usage (stdout);
1431 exit (0);
1432 }
1433 else if (strcmp (*next_arg, "--attach") == 0)
1434 attach = 1;
1435 else if (strcmp (*next_arg, "--multi") == 0)
1436 multi_mode = 1;
1437 else if (strcmp (*next_arg, "--wrapper") == 0)
1438 {
1439 next_arg++;
1440
1441 wrapper_argv = next_arg;
1442 while (*next_arg != NULL && strcmp (*next_arg, "--") != 0)
1443 next_arg++;
1444
1445 if (next_arg == wrapper_argv || *next_arg == NULL)
1446 {
1447 gdbserver_usage (stderr);
1448 exit (1);
1449 }
1450
1451 /* Consume the "--". */
1452 *next_arg = NULL;
1453 }
1454 else if (strcmp (*next_arg, "--debug") == 0)
1455 debug_threads = 1;
1456 else if (strcmp (*next_arg, "--remote-debug") == 0)
1457 remote_debug = 1;
1458 else if (strcmp (*next_arg, "--disable-packet") == 0)
1459 {
1460 gdbserver_show_disableable (stdout);
1461 exit (0);
1462 }
1463 else if (strncmp (*next_arg,
1464 "--disable-packet=",
1465 sizeof ("--disable-packet=") - 1) == 0)
1466 {
1467 char *packets, *tok;
1468
1469 packets = *next_arg += sizeof ("--disable-packet=") - 1;
1470 for (tok = strtok (packets, ",");
1471 tok != NULL;
1472 tok = strtok (NULL, ","))
1473 {
1474 if (strcmp ("vCont", tok) == 0)
1475 disable_packet_vCont = 1;
1476 else if (strcmp ("Tthread", tok) == 0)
1477 disable_packet_Tthread = 1;
1478 else if (strcmp ("qC", tok) == 0)
1479 disable_packet_qC = 1;
1480 else if (strcmp ("qfThreadInfo", tok) == 0)
1481 disable_packet_qfThreadInfo = 1;
1482 else if (strcmp ("threads", tok) == 0)
1483 {
1484 disable_packet_vCont = 1;
1485 disable_packet_Tthread = 1;
1486 disable_packet_qC = 1;
1487 disable_packet_qfThreadInfo = 1;
1488 }
1489 else
1490 {
1491 fprintf (stderr, "Don't know how to disable \"%s\".\n\n",
1492 tok);
1493 gdbserver_show_disableable (stderr);
1494 exit (1);
1495 }
1496 }
1497 }
1498 else
1499 {
1500 fprintf (stderr, "Unknown argument: %s\n", *next_arg);
1501 exit (1);
1502 }
1503
1504 next_arg++;
1505 continue;
1506 }
1507
1508 if (setjmp (toplevel))
1509 {
1510 fprintf (stderr, "Exiting\n");
1511 exit (1);
1512 }
1513
1514 port = *next_arg;
1515 next_arg++;
1516 if (port == NULL || (!attach && !multi_mode && *next_arg == NULL))
1517 {
1518 gdbserver_usage (stderr);
1519 exit (1);
1520 }
1521
1522 bad_attach = 0;
1523 pid = 0;
1524
1525 /* --attach used to come after PORT, so allow it there for
1526 compatibility. */
1527 if (*next_arg != NULL && strcmp (*next_arg, "--attach") == 0)
1528 {
1529 attach = 1;
1530 next_arg++;
1531 }
1532
1533 if (attach
1534 && (*next_arg == NULL
1535 || (*next_arg)[0] == '\0'
1536 || (pid = strtoul (*next_arg, &arg_end, 0)) == 0
1537 || *arg_end != '\0'
1538 || next_arg[1] != NULL))
1539 bad_attach = 1;
1540
1541 if (bad_attach)
1542 {
1543 gdbserver_usage (stderr);
1544 exit (1);
1545 }
1546
1547 initialize_async_io ();
1548 initialize_low ();
1549
1550 own_buf = xmalloc (PBUFSIZ + 1);
1551 mem_buf = xmalloc (PBUFSIZ);
1552
1553 if (pid == 0 && *next_arg != NULL)
1554 {
1555 int i, n;
1556
1557 n = argc - (next_arg - argv);
1558 program_argv = xmalloc (sizeof (char *) * (n + 1));
1559 for (i = 0; i < n; i++)
1560 program_argv[i] = xstrdup (next_arg[i]);
1561 program_argv[i] = NULL;
1562
1563 /* Wait till we are at first instruction in program. */
1564 signal = start_inferior (program_argv, &status);
1565
1566 /* We are now (hopefully) stopped at the first instruction of
1567 the target process. This assumes that the target process was
1568 successfully created. */
1569 }
1570 else if (pid != 0)
1571 {
1572 if (attach_inferior (pid, &status, &signal) == -1)
1573 error ("Attaching not supported on this target");
1574
1575 /* Otherwise succeeded. */
1576 }
1577 else
1578 {
1579 status = 'W';
1580 signal = 0;
1581 }
1582
1583 /* Don't report shared library events on the initial connection,
1584 even if some libraries are preloaded. Avoids the "stopped by
1585 shared library event" notice on gdb side. */
1586 dlls_changed = 0;
1587
1588 if (setjmp (toplevel))
1589 {
1590 fprintf (stderr, "Killing inferior\n");
1591 kill_inferior ();
1592 exit (1);
1593 }
1594
1595 if (status == 'W' || status == 'X')
1596 was_running = 0;
1597 else
1598 was_running = 1;
1599
1600 if (!was_running && !multi_mode)
1601 {
1602 fprintf (stderr, "No program to debug. GDBserver exiting.\n");
1603 exit (1);
1604 }
1605
1606 while (1)
1607 {
1608 noack_mode = 0;
1609 remote_open (port);
1610
1611 restart:
1612 if (setjmp (toplevel) != 0)
1613 {
1614 /* An error occurred. */
1615 if (response_needed)
1616 {
1617 write_enn (own_buf);
1618 putpkt (own_buf);
1619 }
1620 }
1621
1622 disable_async_io ();
1623 while (!exit_requested)
1624 {
1625 unsigned char sig;
1626 int packet_len;
1627 int new_packet_len = -1;
1628
1629 response_needed = 0;
1630 packet_len = getpkt (own_buf);
1631 if (packet_len <= 0)
1632 break;
1633 response_needed = 1;
1634
1635 i = 0;
1636 ch = own_buf[i++];
1637 switch (ch)
1638 {
1639 case 'q':
1640 handle_query (own_buf, packet_len, &new_packet_len);
1641 break;
1642 case 'Q':
1643 handle_general_set (own_buf);
1644 break;
1645 case 'D':
1646 require_running (own_buf);
1647 fprintf (stderr, "Detaching from inferior\n");
1648 if (detach_inferior () != 0)
1649 write_enn (own_buf);
1650 else
1651 {
1652 write_ok (own_buf);
1653
1654 if (extended_protocol)
1655 {
1656 /* Treat this like a normal program exit. */
1657 signal = 0;
1658 status = 'W';
1659 }
1660 else
1661 {
1662 putpkt (own_buf);
1663 remote_close ();
1664
1665 /* If we are attached, then we can exit. Otherwise, we
1666 need to hang around doing nothing, until the child
1667 is gone. */
1668 if (!attached)
1669 join_inferior ();
1670
1671 exit (0);
1672 }
1673 }
1674 break;
1675 case '!':
1676 extended_protocol = 1;
1677 write_ok (own_buf);
1678 break;
1679 case '?':
1680 prepare_resume_reply (own_buf, status, signal);
1681 break;
1682 case 'H':
1683 if (own_buf[1] == 'c' || own_buf[1] == 'g' || own_buf[1] == 's')
1684 {
1685 unsigned long gdb_id, thread_id;
1686
1687 require_running (own_buf);
1688 gdb_id = strtoul (&own_buf[2], NULL, 16);
1689 if (gdb_id == 0 || gdb_id == -1)
1690 thread_id = gdb_id;
1691 else
1692 {
1693 thread_id = gdb_id_to_thread_id (gdb_id);
1694 if (thread_id == 0)
1695 {
1696 write_enn (own_buf);
1697 break;
1698 }
1699 }
1700
1701 if (own_buf[1] == 'g')
1702 {
1703 general_thread = thread_id;
1704 set_desired_inferior (1);
1705 }
1706 else if (own_buf[1] == 'c')
1707 cont_thread = thread_id;
1708 else if (own_buf[1] == 's')
1709 step_thread = thread_id;
1710
1711 write_ok (own_buf);
1712 }
1713 else
1714 {
1715 /* Silently ignore it so that gdb can extend the protocol
1716 without compatibility headaches. */
1717 own_buf[0] = '\0';
1718 }
1719 break;
1720 case 'g':
1721 require_running (own_buf);
1722 set_desired_inferior (1);
1723 registers_to_string (own_buf);
1724 break;
1725 case 'G':
1726 require_running (own_buf);
1727 set_desired_inferior (1);
1728 registers_from_string (&own_buf[1]);
1729 write_ok (own_buf);
1730 break;
1731 case 'm':
1732 require_running (own_buf);
1733 decode_m_packet (&own_buf[1], &mem_addr, &len);
1734 if (read_inferior_memory (mem_addr, mem_buf, len) == 0)
1735 convert_int_to_ascii (mem_buf, own_buf, len);
1736 else
1737 write_enn (own_buf);
1738 break;
1739 case 'M':
1740 require_running (own_buf);
1741 decode_M_packet (&own_buf[1], &mem_addr, &len, mem_buf);
1742 if (write_inferior_memory (mem_addr, mem_buf, len) == 0)
1743 write_ok (own_buf);
1744 else
1745 write_enn (own_buf);
1746 break;
1747 case 'X':
1748 require_running (own_buf);
1749 if (decode_X_packet (&own_buf[1], packet_len - 1,
1750 &mem_addr, &len, mem_buf) < 0
1751 || write_inferior_memory (mem_addr, mem_buf, len) != 0)
1752 write_enn (own_buf);
1753 else
1754 write_ok (own_buf);
1755 break;
1756 case 'C':
1757 require_running (own_buf);
1758 convert_ascii_to_int (own_buf + 1, &sig, 1);
1759 if (target_signal_to_host_p (sig))
1760 signal = target_signal_to_host (sig);
1761 else
1762 signal = 0;
1763 myresume (own_buf, 0, &signal, &status);
1764 break;
1765 case 'S':
1766 require_running (own_buf);
1767 convert_ascii_to_int (own_buf + 1, &sig, 1);
1768 if (target_signal_to_host_p (sig))
1769 signal = target_signal_to_host (sig);
1770 else
1771 signal = 0;
1772 myresume (own_buf, 1, &signal, &status);
1773 break;
1774 case 'c':
1775 require_running (own_buf);
1776 signal = 0;
1777 myresume (own_buf, 0, &signal, &status);
1778 break;
1779 case 's':
1780 require_running (own_buf);
1781 signal = 0;
1782 myresume (own_buf, 1, &signal, &status);
1783 break;
1784 case 'Z':
1785 {
1786 char *lenptr;
1787 char *dataptr;
1788 CORE_ADDR addr = strtoul (&own_buf[3], &lenptr, 16);
1789 int len = strtol (lenptr + 1, &dataptr, 16);
1790 char type = own_buf[1];
1791
1792 if (the_target->insert_watchpoint == NULL
1793 || (type < '2' || type > '4'))
1794 {
1795 /* No watchpoint support or not a watchpoint command;
1796 unrecognized either way. */
1797 own_buf[0] = '\0';
1798 }
1799 else
1800 {
1801 int res;
1802
1803 require_running (own_buf);
1804 res = (*the_target->insert_watchpoint) (type, addr, len);
1805 if (res == 0)
1806 write_ok (own_buf);
1807 else if (res == 1)
1808 /* Unsupported. */
1809 own_buf[0] = '\0';
1810 else
1811 write_enn (own_buf);
1812 }
1813 break;
1814 }
1815 case 'z':
1816 {
1817 char *lenptr;
1818 char *dataptr;
1819 CORE_ADDR addr = strtoul (&own_buf[3], &lenptr, 16);
1820 int len = strtol (lenptr + 1, &dataptr, 16);
1821 char type = own_buf[1];
1822
1823 if (the_target->remove_watchpoint == NULL
1824 || (type < '2' || type > '4'))
1825 {
1826 /* No watchpoint support or not a watchpoint command;
1827 unrecognized either way. */
1828 own_buf[0] = '\0';
1829 }
1830 else
1831 {
1832 int res;
1833
1834 require_running (own_buf);
1835 res = (*the_target->remove_watchpoint) (type, addr, len);
1836 if (res == 0)
1837 write_ok (own_buf);
1838 else if (res == 1)
1839 /* Unsupported. */
1840 own_buf[0] = '\0';
1841 else
1842 write_enn (own_buf);
1843 }
1844 break;
1845 }
1846 case 'k':
1847 response_needed = 0;
1848 if (!target_running ())
1849 /* The packet we received doesn't make sense - but we
1850 can't reply to it, either. */
1851 goto restart;
1852
1853 fprintf (stderr, "Killing inferior\n");
1854 kill_inferior ();
1855
1856 /* When using the extended protocol, we wait with no
1857 program running. The traditional protocol will exit
1858 instead. */
1859 if (extended_protocol)
1860 {
1861 status = 'X';
1862 signal = TARGET_SIGNAL_KILL;
1863 was_running = 0;
1864 goto restart;
1865 }
1866 else
1867 {
1868 exit (0);
1869 break;
1870 }
1871 case 'T':
1872 {
1873 unsigned long gdb_id, thread_id;
1874
1875 require_running (own_buf);
1876 gdb_id = strtoul (&own_buf[1], NULL, 16);
1877 thread_id = gdb_id_to_thread_id (gdb_id);
1878 if (thread_id == 0)
1879 {
1880 write_enn (own_buf);
1881 break;
1882 }
1883
1884 if (mythread_alive (thread_id))
1885 write_ok (own_buf);
1886 else
1887 write_enn (own_buf);
1888 }
1889 break;
1890 case 'R':
1891 response_needed = 0;
1892
1893 /* Restarting the inferior is only supported in the
1894 extended protocol. */
1895 if (extended_protocol)
1896 {
1897 if (target_running ())
1898 kill_inferior ();
1899 fprintf (stderr, "GDBserver restarting\n");
1900
1901 /* Wait till we are at 1st instruction in prog. */
1902 if (program_argv != NULL)
1903 signal = start_inferior (program_argv, &status);
1904 else
1905 {
1906 status = 'X';
1907 signal = TARGET_SIGNAL_KILL;
1908 }
1909 goto restart;
1910 }
1911 else
1912 {
1913 /* It is a request we don't understand. Respond with an
1914 empty packet so that gdb knows that we don't support this
1915 request. */
1916 own_buf[0] = '\0';
1917 break;
1918 }
1919 case 'v':
1920 /* Extended (long) request. */
1921 handle_v_requests (own_buf, &status, &signal,
1922 packet_len, &new_packet_len);
1923 break;
1924
1925 default:
1926 /* It is a request we don't understand. Respond with an
1927 empty packet so that gdb knows that we don't support this
1928 request. */
1929 own_buf[0] = '\0';
1930 break;
1931 }
1932
1933 if (new_packet_len != -1)
1934 putpkt_binary (own_buf, new_packet_len);
1935 else
1936 putpkt (own_buf);
1937
1938 response_needed = 0;
1939
1940 if (was_running && (status == 'W' || status == 'X'))
1941 {
1942 was_running = 0;
1943
1944 if (status == 'W')
1945 fprintf (stderr,
1946 "\nChild exited with status %d\n", signal);
1947 if (status == 'X')
1948 fprintf (stderr, "\nChild terminated with signal = 0x%x (%s)\n",
1949 target_signal_to_host (signal),
1950 target_signal_to_name (signal));
1951
1952 if (extended_protocol)
1953 goto restart;
1954 else
1955 {
1956 fprintf (stderr, "GDBserver exiting\n");
1957 exit (0);
1958 }
1959 }
1960
1961 if (status != 'W' && status != 'X')
1962 was_running = 1;
1963 }
1964
1965 /* If an exit was requested (using the "monitor exit" command),
1966 terminate now. The only other way to get here is for
1967 getpkt to fail; close the connection and reopen it at the
1968 top of the loop. */
1969
1970 if (exit_requested)
1971 {
1972 remote_close ();
1973 if (attached && target_running ())
1974 detach_inferior ();
1975 else if (target_running ())
1976 kill_inferior ();
1977 exit (0);
1978 }
1979 else
1980 {
1981 fprintf (stderr, "Remote side has terminated connection. "
1982 "GDBserver will reopen the connection.\n");
1983 remote_close ();
1984 }
1985 }
1986 }
This page took 0.096548 seconds and 4 git commands to generate.