6321a3548cc7711b9ea806e74f3c3be9fb46fc87
[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 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 = xmalloc (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 = xmalloc (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 = xmalloc (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 = xmalloc (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 = xmalloc (len + 1);
652 n = (*the_target->read_auxv) (ofs, data, len + 1);
653 if (n < 0)
654 write_enn (own_buf);
655 else if (n > len)
656 *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
657 else
658 *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
659
660 free (data);
661
662 return;
663 }
664
665 if (strncmp ("qXfer:features:read:", own_buf, 20) == 0)
666 {
667 CORE_ADDR ofs;
668 unsigned int len, total_len;
669 const char *document;
670 char *annex;
671
672 require_running (own_buf);
673
674 /* Grab the annex, offset, and length. */
675 if (decode_xfer_read (own_buf + 20, &annex, &ofs, &len) < 0)
676 {
677 strcpy (own_buf, "E00");
678 return;
679 }
680
681 /* Now grab the correct annex. */
682 document = get_features_xml (annex);
683 if (document == NULL)
684 {
685 strcpy (own_buf, "E00");
686 return;
687 }
688
689 total_len = strlen (document);
690 if (len > PBUFSIZ - 2)
691 len = PBUFSIZ - 2;
692
693 if (ofs > total_len)
694 write_enn (own_buf);
695 else if (len < total_len - ofs)
696 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
697 len, 1);
698 else
699 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
700 total_len - ofs, 0);
701
702 return;
703 }
704
705 if (strncmp ("qXfer:libraries:read:", own_buf, 21) == 0)
706 {
707 CORE_ADDR ofs;
708 unsigned int len, total_len;
709 char *document, *p;
710 struct inferior_list_entry *dll_ptr;
711 char *annex;
712
713 require_running (own_buf);
714
715 /* Reject any annex; grab the offset and length. */
716 if (decode_xfer_read (own_buf + 21, &annex, &ofs, &len) < 0
717 || annex[0] != '\0')
718 {
719 strcpy (own_buf, "E00");
720 return;
721 }
722
723 /* Over-estimate the necessary memory. Assume that every character
724 in the library name must be escaped. */
725 total_len = 64;
726 for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)
727 total_len += 128 + 6 * strlen (((struct dll_info *) dll_ptr)->name);
728
729 document = xmalloc (total_len);
730 strcpy (document, "<library-list>\n");
731 p = document + strlen (document);
732
733 for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)
734 {
735 struct dll_info *dll = (struct dll_info *) dll_ptr;
736 char *name;
737
738 strcpy (p, " <library name=\"");
739 p = p + strlen (p);
740 name = xml_escape_text (dll->name);
741 strcpy (p, name);
742 free (name);
743 p = p + strlen (p);
744 strcpy (p, "\"><segment address=\"");
745 p = p + strlen (p);
746 sprintf (p, "0x%lx", (long) dll->base_addr);
747 p = p + strlen (p);
748 strcpy (p, "\"/></library>\n");
749 p = p + strlen (p);
750 }
751
752 strcpy (p, "</library-list>\n");
753
754 total_len = strlen (document);
755 if (len > PBUFSIZ - 2)
756 len = PBUFSIZ - 2;
757
758 if (ofs > total_len)
759 write_enn (own_buf);
760 else if (len < total_len - ofs)
761 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
762 len, 1);
763 else
764 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
765 total_len - ofs, 0);
766
767 free (document);
768 return;
769 }
770
771 if (the_target->qxfer_osdata != NULL
772 && strncmp ("qXfer:osdata:read:", own_buf, 18) == 0)
773 {
774 char *annex;
775 int n;
776 unsigned int len;
777 CORE_ADDR ofs;
778 unsigned char *workbuf;
779
780 strcpy (own_buf, "E00");
781 if (decode_xfer_read (own_buf + 18, &annex, &ofs, &len) < 0)
782 return;
783 if (len > PBUFSIZ - 2)
784 len = PBUFSIZ - 2;
785 workbuf = xmalloc (len + 1);
786 if (!workbuf)
787 return;
788
789 n = (*the_target->qxfer_osdata) (annex, workbuf, NULL, ofs, len + 1);
790 if (n < 0)
791 write_enn (own_buf);
792 else if (n > len)
793 *new_packet_len_p = write_qxfer_response
794 (own_buf, workbuf, len, 1);
795 else
796 *new_packet_len_p = write_qxfer_response
797 (own_buf, workbuf, n, 0);
798
799 free (workbuf);
800 return;
801 }
802
803 /* Protocol features query. */
804 if (strncmp ("qSupported", own_buf, 10) == 0
805 && (own_buf[10] == ':' || own_buf[10] == '\0'))
806 {
807 sprintf (own_buf, "PacketSize=%x;QPassSignals+", PBUFSIZ - 1);
808
809 /* We do not have any hook to indicate whether the target backend
810 supports qXfer:libraries:read, so always report it. */
811 strcat (own_buf, ";qXfer:libraries:read+");
812
813 if (the_target->read_auxv != NULL)
814 strcat (own_buf, ";qXfer:auxv:read+");
815
816 if (the_target->qxfer_spu != NULL)
817 strcat (own_buf, ";qXfer:spu:read+;qXfer:spu:write+");
818
819 /* We always report qXfer:features:read, as targets may
820 install XML files on a subsequent call to arch_setup.
821 If we reported to GDB on startup that we don't support
822 qXfer:feature:read at all, we will never be re-queried. */
823 strcat (own_buf, ";qXfer:features:read+");
824
825 if (transport_is_reliable)
826 strcat (own_buf, ";QStartNoAckMode+");
827
828 if (the_target->qxfer_osdata != NULL)
829 strcat (own_buf, ";qXfer:osdata:read+");
830
831 return;
832 }
833
834 /* Thread-local storage support. */
835 if (the_target->get_tls_address != NULL
836 && strncmp ("qGetTLSAddr:", own_buf, 12) == 0)
837 {
838 char *p = own_buf + 12;
839 CORE_ADDR parts[3], address = 0;
840 int i, err;
841
842 require_running (own_buf);
843
844 for (i = 0; i < 3; i++)
845 {
846 char *p2;
847 int len;
848
849 if (p == NULL)
850 break;
851
852 p2 = strchr (p, ',');
853 if (p2)
854 {
855 len = p2 - p;
856 p2++;
857 }
858 else
859 {
860 len = strlen (p);
861 p2 = NULL;
862 }
863
864 decode_address (&parts[i], p, len);
865 p = p2;
866 }
867
868 if (p != NULL || i < 3)
869 err = 1;
870 else
871 {
872 struct thread_info *thread = gdb_id_to_thread (parts[0]);
873
874 if (thread == NULL)
875 err = 2;
876 else
877 err = the_target->get_tls_address (thread, parts[1], parts[2],
878 &address);
879 }
880
881 if (err == 0)
882 {
883 sprintf (own_buf, "%llx", address);
884 return;
885 }
886 else if (err > 0)
887 {
888 write_enn (own_buf);
889 return;
890 }
891
892 /* Otherwise, pretend we do not understand this packet. */
893 }
894
895 /* Handle "monitor" commands. */
896 if (strncmp ("qRcmd,", own_buf, 6) == 0)
897 {
898 char *mon = xmalloc (PBUFSIZ);
899 int len = strlen (own_buf + 6);
900
901 if ((len % 2) != 0 || unhexify (mon, own_buf + 6, len / 2) != len / 2)
902 {
903 write_enn (own_buf);
904 free (mon);
905 return;
906 }
907 mon[len / 2] = '\0';
908
909 write_ok (own_buf);
910
911 if (strcmp (mon, "set debug 1") == 0)
912 {
913 debug_threads = 1;
914 monitor_output ("Debug output enabled.\n");
915 }
916 else if (strcmp (mon, "set debug 0") == 0)
917 {
918 debug_threads = 0;
919 monitor_output ("Debug output disabled.\n");
920 }
921 else if (strcmp (mon, "set remote-debug 1") == 0)
922 {
923 remote_debug = 1;
924 monitor_output ("Protocol debug output enabled.\n");
925 }
926 else if (strcmp (mon, "set remote-debug 0") == 0)
927 {
928 remote_debug = 0;
929 monitor_output ("Protocol debug output disabled.\n");
930 }
931 else if (strcmp (mon, "help") == 0)
932 monitor_show_help ();
933 else if (strcmp (mon, "exit") == 0)
934 exit_requested = 1;
935 else
936 {
937 monitor_output ("Unknown monitor command.\n\n");
938 monitor_show_help ();
939 write_enn (own_buf);
940 }
941
942 free (mon);
943 return;
944 }
945
946 if (strncmp ("qSearch:memory:", own_buf, sizeof ("qSearch:memory:") - 1) == 0)
947 {
948 require_running (own_buf);
949 handle_search_memory (own_buf, packet_len);
950 return;
951 }
952
953 /* Otherwise we didn't know what packet it was. Say we didn't
954 understand it. */
955 own_buf[0] = 0;
956 }
957
958 /* Parse vCont packets. */
959 void
960 handle_v_cont (char *own_buf, char *status, int *signal)
961 {
962 char *p, *q;
963 int n = 0, i = 0;
964 struct thread_resume *resume_info, default_action;
965
966 /* Count the number of semicolons in the packet. There should be one
967 for every action. */
968 p = &own_buf[5];
969 while (p)
970 {
971 n++;
972 p++;
973 p = strchr (p, ';');
974 }
975 /* Allocate room for one extra action, for the default remain-stopped
976 behavior; if no default action is in the list, we'll need the extra
977 slot. */
978 resume_info = xmalloc ((n + 1) * sizeof (resume_info[0]));
979
980 default_action.thread = -1;
981 default_action.leave_stopped = 1;
982 default_action.step = 0;
983 default_action.sig = 0;
984
985 p = &own_buf[5];
986 i = 0;
987 while (*p)
988 {
989 p++;
990
991 resume_info[i].leave_stopped = 0;
992
993 if (p[0] == 's' || p[0] == 'S')
994 resume_info[i].step = 1;
995 else if (p[0] == 'c' || p[0] == 'C')
996 resume_info[i].step = 0;
997 else
998 goto err;
999
1000 if (p[0] == 'S' || p[0] == 'C')
1001 {
1002 int sig;
1003 sig = strtol (p + 1, &q, 16);
1004 if (p == q)
1005 goto err;
1006 p = q;
1007
1008 if (!target_signal_to_host_p (sig))
1009 goto err;
1010 resume_info[i].sig = target_signal_to_host (sig);
1011 }
1012 else
1013 {
1014 resume_info[i].sig = 0;
1015 p = p + 1;
1016 }
1017
1018 if (p[0] == 0)
1019 {
1020 resume_info[i].thread = -1;
1021 default_action = resume_info[i];
1022
1023 /* Note: we don't increment i here, we'll overwrite this entry
1024 the next time through. */
1025 }
1026 else if (p[0] == ':')
1027 {
1028 unsigned int gdb_id = strtoul (p + 1, &q, 16);
1029 unsigned long thread_id;
1030
1031 if (p == q)
1032 goto err;
1033 p = q;
1034 if (p[0] != ';' && p[0] != 0)
1035 goto err;
1036
1037 thread_id = gdb_id_to_thread_id (gdb_id);
1038 if (thread_id)
1039 resume_info[i].thread = thread_id;
1040 else
1041 goto err;
1042
1043 i++;
1044 }
1045 }
1046
1047 resume_info[i] = default_action;
1048
1049 /* Still used in occasional places in the backend. */
1050 if (n == 1 && resume_info[0].thread != -1)
1051 cont_thread = resume_info[0].thread;
1052 else
1053 cont_thread = -1;
1054 set_desired_inferior (0);
1055
1056 enable_async_io ();
1057 (*the_target->resume) (resume_info);
1058
1059 free (resume_info);
1060
1061 *signal = mywait (status, 1);
1062 prepare_resume_reply (own_buf, *status, *signal);
1063 disable_async_io ();
1064 return;
1065
1066 err:
1067 write_enn (own_buf);
1068 free (resume_info);
1069 return;
1070 }
1071
1072 /* Attach to a new program. Return 1 if successful, 0 if failure. */
1073 int
1074 handle_v_attach (char *own_buf, char *status, int *signal)
1075 {
1076 int pid;
1077
1078 pid = strtol (own_buf + 8, NULL, 16);
1079 if (pid != 0 && attach_inferior (pid, status, signal) == 0)
1080 {
1081 /* Don't report shared library events after attaching, even if
1082 some libraries are preloaded. GDB will always poll the
1083 library list. Avoids the "stopped by shared library event"
1084 notice on the GDB side. */
1085 dlls_changed = 0;
1086 prepare_resume_reply (own_buf, *status, *signal);
1087 return 1;
1088 }
1089 else
1090 {
1091 write_enn (own_buf);
1092 return 0;
1093 }
1094 }
1095
1096 /* Run a new program. Return 1 if successful, 0 if failure. */
1097 static int
1098 handle_v_run (char *own_buf, char *status, int *signal)
1099 {
1100 char *p, **pp, *next_p, **new_argv;
1101 int i, new_argc;
1102
1103 new_argc = 0;
1104 for (p = own_buf + strlen ("vRun;"); p && *p; p = strchr (p, ';'))
1105 {
1106 p++;
1107 new_argc++;
1108 }
1109
1110 new_argv = xcalloc (new_argc + 2, sizeof (char *));
1111 i = 0;
1112 for (p = own_buf + strlen ("vRun;"); *p; p = next_p)
1113 {
1114 next_p = strchr (p, ';');
1115 if (next_p == NULL)
1116 next_p = p + strlen (p);
1117
1118 if (i == 0 && p == next_p)
1119 new_argv[i] = NULL;
1120 else
1121 {
1122 new_argv[i] = xmalloc (1 + (next_p - p) / 2);
1123 unhexify (new_argv[i], p, (next_p - p) / 2);
1124 new_argv[i][(next_p - p) / 2] = '\0';
1125 }
1126
1127 if (*next_p)
1128 next_p++;
1129 i++;
1130 }
1131 new_argv[i] = NULL;
1132
1133 if (new_argv[0] == NULL)
1134 {
1135 /* GDB didn't specify a program to run. Use the program from the
1136 last run with the new argument list. */
1137
1138 if (program_argv == NULL)
1139 {
1140 write_enn (own_buf);
1141 return 0;
1142 }
1143
1144 new_argv[0] = xstrdup (program_argv[0]);
1145 }
1146
1147 /* Free the old argv. */
1148 if (program_argv)
1149 {
1150 for (pp = program_argv; *pp != NULL; pp++)
1151 free (*pp);
1152 free (program_argv);
1153 }
1154 program_argv = new_argv;
1155
1156 *signal = start_inferior (program_argv, status);
1157 if (*status == 'T')
1158 {
1159 prepare_resume_reply (own_buf, *status, *signal);
1160 return 1;
1161 }
1162 else
1163 {
1164 write_enn (own_buf);
1165 return 0;
1166 }
1167 }
1168
1169 /* Handle all of the extended 'v' packets. */
1170 void
1171 handle_v_requests (char *own_buf, char *status, int *signal,
1172 int packet_len, int *new_packet_len)
1173 {
1174 if (!disable_packet_vCont)
1175 {
1176 if (strncmp (own_buf, "vCont;", 6) == 0)
1177 {
1178 require_running (own_buf);
1179 handle_v_cont (own_buf, status, signal);
1180 return;
1181 }
1182
1183 if (strncmp (own_buf, "vCont?", 6) == 0)
1184 {
1185 strcpy (own_buf, "vCont;c;C;s;S");
1186 return;
1187 }
1188 }
1189
1190 if (strncmp (own_buf, "vFile:", 6) == 0
1191 && handle_vFile (own_buf, packet_len, new_packet_len))
1192 return;
1193
1194 if (strncmp (own_buf, "vAttach;", 8) == 0)
1195 {
1196 if (target_running ())
1197 {
1198 fprintf (stderr, "Already debugging a process\n");
1199 write_enn (own_buf);
1200 return;
1201 }
1202 handle_v_attach (own_buf, status, signal);
1203 return;
1204 }
1205
1206 if (strncmp (own_buf, "vRun;", 5) == 0)
1207 {
1208 if (target_running ())
1209 {
1210 fprintf (stderr, "Already debugging a process\n");
1211 write_enn (own_buf);
1212 return;
1213 }
1214 handle_v_run (own_buf, status, signal);
1215 return;
1216 }
1217
1218 /* Otherwise we didn't know what packet it was. Say we didn't
1219 understand it. */
1220 own_buf[0] = 0;
1221 return;
1222 }
1223
1224 void
1225 myresume (char *own_buf, int step, int *signalp, char *statusp)
1226 {
1227 struct thread_resume resume_info[2];
1228 int n = 0;
1229 int sig = *signalp;
1230
1231 set_desired_inferior (0);
1232
1233 if (step || sig || (cont_thread != 0 && cont_thread != -1))
1234 {
1235 resume_info[0].thread
1236 = ((struct inferior_list_entry *) current_inferior)->id;
1237 resume_info[0].step = step;
1238 resume_info[0].sig = sig;
1239 resume_info[0].leave_stopped = 0;
1240 n++;
1241 }
1242 resume_info[n].thread = -1;
1243 resume_info[n].step = 0;
1244 resume_info[n].sig = 0;
1245 resume_info[n].leave_stopped = (cont_thread != 0 && cont_thread != -1);
1246
1247 enable_async_io ();
1248 (*the_target->resume) (resume_info);
1249 *signalp = mywait (statusp, 1);
1250 prepare_resume_reply (own_buf, *statusp, *signalp);
1251 disable_async_io ();
1252 }
1253
1254 static void
1255 gdbserver_version (void)
1256 {
1257 printf ("GNU gdbserver %s%s\n"
1258 "Copyright (C) 2007 Free Software Foundation, Inc.\n"
1259 "gdbserver is free software, covered by the GNU General Public License.\n"
1260 "This gdbserver was configured as \"%s\"\n",
1261 PKGVERSION, version, host_name);
1262 }
1263
1264 static void
1265 gdbserver_usage (FILE *stream)
1266 {
1267 fprintf (stream, "Usage:\tgdbserver [OPTIONS] COMM PROG [ARGS ...]\n"
1268 "\tgdbserver [OPTIONS] --attach COMM PID\n"
1269 "\tgdbserver [OPTIONS] --multi COMM\n"
1270 "\n"
1271 "COMM may either be a tty device (for serial debugging), or \n"
1272 "HOST:PORT to listen for a TCP connection.\n"
1273 "\n"
1274 "Options:\n"
1275 " --debug\t\tEnable debugging output.\n"
1276 " --version\t\tDisplay version information and exit.\n"
1277 " --wrapper WRAPPER --\tRun WRAPPER to start new programs.\n");
1278 if (REPORT_BUGS_TO[0] && stream == stdout)
1279 fprintf (stream, "Report bugs to \"%s\".\n", REPORT_BUGS_TO);
1280 }
1281
1282 static void
1283 gdbserver_show_disableable (FILE *stream)
1284 {
1285 fprintf (stream, "Disableable packets:\n"
1286 " vCont \tAll vCont packets\n"
1287 " qC \tQuerying the current thread\n"
1288 " qfThreadInfo\tThread listing\n"
1289 " Tthread \tPassing the thread specifier in the T stop reply packet\n"
1290 " threads \tAll of the above\n");
1291 }
1292
1293
1294 #undef require_running
1295 #define require_running(BUF) \
1296 if (!target_running ()) \
1297 { \
1298 write_enn (BUF); \
1299 break; \
1300 }
1301
1302 int
1303 main (int argc, char *argv[])
1304 {
1305 char ch, status, *own_buf;
1306 unsigned char *mem_buf;
1307 int i = 0;
1308 int signal;
1309 unsigned int len;
1310 CORE_ADDR mem_addr;
1311 int bad_attach;
1312 int pid;
1313 char *arg_end, *port;
1314 char **next_arg = &argv[1];
1315 int multi_mode = 0;
1316 int attach = 0;
1317 int was_running;
1318
1319 while (*next_arg != NULL && **next_arg == '-')
1320 {
1321 if (strcmp (*next_arg, "--version") == 0)
1322 {
1323 gdbserver_version ();
1324 exit (0);
1325 }
1326 else if (strcmp (*next_arg, "--help") == 0)
1327 {
1328 gdbserver_usage (stdout);
1329 exit (0);
1330 }
1331 else if (strcmp (*next_arg, "--attach") == 0)
1332 attach = 1;
1333 else if (strcmp (*next_arg, "--multi") == 0)
1334 multi_mode = 1;
1335 else if (strcmp (*next_arg, "--wrapper") == 0)
1336 {
1337 next_arg++;
1338
1339 wrapper_argv = next_arg;
1340 while (*next_arg != NULL && strcmp (*next_arg, "--") != 0)
1341 next_arg++;
1342
1343 if (next_arg == wrapper_argv || *next_arg == NULL)
1344 {
1345 gdbserver_usage (stderr);
1346 exit (1);
1347 }
1348
1349 /* Consume the "--". */
1350 *next_arg = NULL;
1351 }
1352 else if (strcmp (*next_arg, "--debug") == 0)
1353 debug_threads = 1;
1354 else if (strcmp (*next_arg, "--disable-packet") == 0)
1355 {
1356 gdbserver_show_disableable (stdout);
1357 exit (0);
1358 }
1359 else if (strncmp (*next_arg,
1360 "--disable-packet=",
1361 sizeof ("--disable-packet=") - 1) == 0)
1362 {
1363 char *packets, *tok;
1364
1365 packets = *next_arg += sizeof ("--disable-packet=") - 1;
1366 for (tok = strtok (packets, ",");
1367 tok != NULL;
1368 tok = strtok (NULL, ","))
1369 {
1370 if (strcmp ("vCont", tok) == 0)
1371 disable_packet_vCont = 1;
1372 else if (strcmp ("Tthread", tok) == 0)
1373 disable_packet_Tthread = 1;
1374 else if (strcmp ("qC", tok) == 0)
1375 disable_packet_qC = 1;
1376 else if (strcmp ("qfThreadInfo", tok) == 0)
1377 disable_packet_qfThreadInfo = 1;
1378 else if (strcmp ("threads", tok) == 0)
1379 {
1380 disable_packet_vCont = 1;
1381 disable_packet_Tthread = 1;
1382 disable_packet_qC = 1;
1383 disable_packet_qfThreadInfo = 1;
1384 }
1385 else
1386 {
1387 fprintf (stderr, "Don't know how to disable \"%s\".\n\n",
1388 tok);
1389 gdbserver_show_disableable (stderr);
1390 exit (1);
1391 }
1392 }
1393 }
1394 else
1395 {
1396 fprintf (stderr, "Unknown argument: %s\n", *next_arg);
1397 exit (1);
1398 }
1399
1400 next_arg++;
1401 continue;
1402 }
1403
1404 if (setjmp (toplevel))
1405 {
1406 fprintf (stderr, "Exiting\n");
1407 exit (1);
1408 }
1409
1410 port = *next_arg;
1411 next_arg++;
1412 if (port == NULL || (!attach && !multi_mode && *next_arg == NULL))
1413 {
1414 gdbserver_usage (stderr);
1415 exit (1);
1416 }
1417
1418 bad_attach = 0;
1419 pid = 0;
1420
1421 /* --attach used to come after PORT, so allow it there for
1422 compatibility. */
1423 if (*next_arg != NULL && strcmp (*next_arg, "--attach") == 0)
1424 {
1425 attach = 1;
1426 next_arg++;
1427 }
1428
1429 if (attach
1430 && (*next_arg == NULL
1431 || (*next_arg)[0] == '\0'
1432 || (pid = strtoul (*next_arg, &arg_end, 0)) == 0
1433 || *arg_end != '\0'
1434 || next_arg[1] != NULL))
1435 bad_attach = 1;
1436
1437 if (bad_attach)
1438 {
1439 gdbserver_usage (stderr);
1440 exit (1);
1441 }
1442
1443 initialize_async_io ();
1444 initialize_low ();
1445
1446 own_buf = xmalloc (PBUFSIZ + 1);
1447 mem_buf = xmalloc (PBUFSIZ);
1448
1449 if (pid == 0 && *next_arg != NULL)
1450 {
1451 int i, n;
1452
1453 n = argc - (next_arg - argv);
1454 program_argv = xmalloc (sizeof (char *) * (n + 1));
1455 for (i = 0; i < n; i++)
1456 program_argv[i] = xstrdup (next_arg[i]);
1457 program_argv[i] = NULL;
1458
1459 /* Wait till we are at first instruction in program. */
1460 signal = start_inferior (program_argv, &status);
1461
1462 /* We are now (hopefully) stopped at the first instruction of
1463 the target process. This assumes that the target process was
1464 successfully created. */
1465 }
1466 else if (pid != 0)
1467 {
1468 if (attach_inferior (pid, &status, &signal) == -1)
1469 error ("Attaching not supported on this target");
1470
1471 /* Otherwise succeeded. */
1472 }
1473 else
1474 {
1475 status = 'W';
1476 signal = 0;
1477 }
1478
1479 /* Don't report shared library events on the initial connection,
1480 even if some libraries are preloaded. Avoids the "stopped by
1481 shared library event" notice on gdb side. */
1482 dlls_changed = 0;
1483
1484 if (setjmp (toplevel))
1485 {
1486 fprintf (stderr, "Killing inferior\n");
1487 kill_inferior ();
1488 exit (1);
1489 }
1490
1491 if (status == 'W' || status == 'X')
1492 was_running = 0;
1493 else
1494 was_running = 1;
1495
1496 if (!was_running && !multi_mode)
1497 {
1498 fprintf (stderr, "No program to debug. GDBserver exiting.\n");
1499 exit (1);
1500 }
1501
1502 while (1)
1503 {
1504 noack_mode = 0;
1505 remote_open (port);
1506
1507 restart:
1508 if (setjmp (toplevel) != 0)
1509 {
1510 /* An error occurred. */
1511 if (response_needed)
1512 {
1513 write_enn (own_buf);
1514 putpkt (own_buf);
1515 }
1516 }
1517
1518 disable_async_io ();
1519 while (!exit_requested)
1520 {
1521 unsigned char sig;
1522 int packet_len;
1523 int new_packet_len = -1;
1524
1525 response_needed = 0;
1526 packet_len = getpkt (own_buf);
1527 if (packet_len <= 0)
1528 break;
1529 response_needed = 1;
1530
1531 i = 0;
1532 ch = own_buf[i++];
1533 switch (ch)
1534 {
1535 case 'q':
1536 handle_query (own_buf, packet_len, &new_packet_len);
1537 break;
1538 case 'Q':
1539 handle_general_set (own_buf);
1540 break;
1541 case 'D':
1542 require_running (own_buf);
1543 fprintf (stderr, "Detaching from inferior\n");
1544 if (detach_inferior () != 0)
1545 write_enn (own_buf);
1546 else
1547 {
1548 write_ok (own_buf);
1549
1550 if (extended_protocol)
1551 {
1552 /* Treat this like a normal program exit. */
1553 signal = 0;
1554 status = 'W';
1555 }
1556 else
1557 {
1558 putpkt (own_buf);
1559 remote_close ();
1560
1561 /* If we are attached, then we can exit. Otherwise, we
1562 need to hang around doing nothing, until the child
1563 is gone. */
1564 if (!attached)
1565 join_inferior ();
1566
1567 exit (0);
1568 }
1569 }
1570 break;
1571 case '!':
1572 extended_protocol = 1;
1573 write_ok (own_buf);
1574 break;
1575 case '?':
1576 prepare_resume_reply (own_buf, status, signal);
1577 break;
1578 case 'H':
1579 if (own_buf[1] == 'c' || own_buf[1] == 'g' || own_buf[1] == 's')
1580 {
1581 unsigned long gdb_id, thread_id;
1582
1583 require_running (own_buf);
1584 gdb_id = strtoul (&own_buf[2], NULL, 16);
1585 if (gdb_id == 0 || gdb_id == -1)
1586 thread_id = gdb_id;
1587 else
1588 {
1589 thread_id = gdb_id_to_thread_id (gdb_id);
1590 if (thread_id == 0)
1591 {
1592 write_enn (own_buf);
1593 break;
1594 }
1595 }
1596
1597 if (own_buf[1] == 'g')
1598 {
1599 general_thread = thread_id;
1600 set_desired_inferior (1);
1601 }
1602 else if (own_buf[1] == 'c')
1603 cont_thread = thread_id;
1604 else if (own_buf[1] == 's')
1605 step_thread = thread_id;
1606
1607 write_ok (own_buf);
1608 }
1609 else
1610 {
1611 /* Silently ignore it so that gdb can extend the protocol
1612 without compatibility headaches. */
1613 own_buf[0] = '\0';
1614 }
1615 break;
1616 case 'g':
1617 require_running (own_buf);
1618 set_desired_inferior (1);
1619 registers_to_string (own_buf);
1620 break;
1621 case 'G':
1622 require_running (own_buf);
1623 set_desired_inferior (1);
1624 registers_from_string (&own_buf[1]);
1625 write_ok (own_buf);
1626 break;
1627 case 'm':
1628 require_running (own_buf);
1629 decode_m_packet (&own_buf[1], &mem_addr, &len);
1630 if (read_inferior_memory (mem_addr, mem_buf, len) == 0)
1631 convert_int_to_ascii (mem_buf, own_buf, len);
1632 else
1633 write_enn (own_buf);
1634 break;
1635 case 'M':
1636 require_running (own_buf);
1637 decode_M_packet (&own_buf[1], &mem_addr, &len, mem_buf);
1638 if (write_inferior_memory (mem_addr, mem_buf, len) == 0)
1639 write_ok (own_buf);
1640 else
1641 write_enn (own_buf);
1642 break;
1643 case 'X':
1644 require_running (own_buf);
1645 if (decode_X_packet (&own_buf[1], packet_len - 1,
1646 &mem_addr, &len, mem_buf) < 0
1647 || write_inferior_memory (mem_addr, mem_buf, len) != 0)
1648 write_enn (own_buf);
1649 else
1650 write_ok (own_buf);
1651 break;
1652 case 'C':
1653 require_running (own_buf);
1654 convert_ascii_to_int (own_buf + 1, &sig, 1);
1655 if (target_signal_to_host_p (sig))
1656 signal = target_signal_to_host (sig);
1657 else
1658 signal = 0;
1659 myresume (own_buf, 0, &signal, &status);
1660 break;
1661 case 'S':
1662 require_running (own_buf);
1663 convert_ascii_to_int (own_buf + 1, &sig, 1);
1664 if (target_signal_to_host_p (sig))
1665 signal = target_signal_to_host (sig);
1666 else
1667 signal = 0;
1668 myresume (own_buf, 1, &signal, &status);
1669 break;
1670 case 'c':
1671 require_running (own_buf);
1672 signal = 0;
1673 myresume (own_buf, 0, &signal, &status);
1674 break;
1675 case 's':
1676 require_running (own_buf);
1677 signal = 0;
1678 myresume (own_buf, 1, &signal, &status);
1679 break;
1680 case 'Z':
1681 {
1682 char *lenptr;
1683 char *dataptr;
1684 CORE_ADDR addr = strtoul (&own_buf[3], &lenptr, 16);
1685 int len = strtol (lenptr + 1, &dataptr, 16);
1686 char type = own_buf[1];
1687
1688 if (the_target->insert_watchpoint == NULL
1689 || (type < '2' || type > '4'))
1690 {
1691 /* No watchpoint support or not a watchpoint command;
1692 unrecognized either way. */
1693 own_buf[0] = '\0';
1694 }
1695 else
1696 {
1697 int res;
1698
1699 require_running (own_buf);
1700 res = (*the_target->insert_watchpoint) (type, addr, len);
1701 if (res == 0)
1702 write_ok (own_buf);
1703 else if (res == 1)
1704 /* Unsupported. */
1705 own_buf[0] = '\0';
1706 else
1707 write_enn (own_buf);
1708 }
1709 break;
1710 }
1711 case 'z':
1712 {
1713 char *lenptr;
1714 char *dataptr;
1715 CORE_ADDR addr = strtoul (&own_buf[3], &lenptr, 16);
1716 int len = strtol (lenptr + 1, &dataptr, 16);
1717 char type = own_buf[1];
1718
1719 if (the_target->remove_watchpoint == NULL
1720 || (type < '2' || type > '4'))
1721 {
1722 /* No watchpoint support or not a watchpoint command;
1723 unrecognized either way. */
1724 own_buf[0] = '\0';
1725 }
1726 else
1727 {
1728 int res;
1729
1730 require_running (own_buf);
1731 res = (*the_target->remove_watchpoint) (type, addr, len);
1732 if (res == 0)
1733 write_ok (own_buf);
1734 else if (res == 1)
1735 /* Unsupported. */
1736 own_buf[0] = '\0';
1737 else
1738 write_enn (own_buf);
1739 }
1740 break;
1741 }
1742 case 'k':
1743 response_needed = 0;
1744 if (!target_running ())
1745 /* The packet we received doesn't make sense - but we
1746 can't reply to it, either. */
1747 goto restart;
1748
1749 fprintf (stderr, "Killing inferior\n");
1750 kill_inferior ();
1751
1752 /* When using the extended protocol, we wait with no
1753 program running. The traditional protocol will exit
1754 instead. */
1755 if (extended_protocol)
1756 {
1757 status = 'X';
1758 signal = TARGET_SIGNAL_KILL;
1759 was_running = 0;
1760 goto restart;
1761 }
1762 else
1763 {
1764 exit (0);
1765 break;
1766 }
1767 case 'T':
1768 {
1769 unsigned long gdb_id, thread_id;
1770
1771 require_running (own_buf);
1772 gdb_id = strtoul (&own_buf[1], NULL, 16);
1773 thread_id = gdb_id_to_thread_id (gdb_id);
1774 if (thread_id == 0)
1775 {
1776 write_enn (own_buf);
1777 break;
1778 }
1779
1780 if (mythread_alive (thread_id))
1781 write_ok (own_buf);
1782 else
1783 write_enn (own_buf);
1784 }
1785 break;
1786 case 'R':
1787 response_needed = 0;
1788
1789 /* Restarting the inferior is only supported in the
1790 extended protocol. */
1791 if (extended_protocol)
1792 {
1793 if (target_running ())
1794 kill_inferior ();
1795 fprintf (stderr, "GDBserver restarting\n");
1796
1797 /* Wait till we are at 1st instruction in prog. */
1798 if (program_argv != NULL)
1799 signal = start_inferior (program_argv, &status);
1800 else
1801 {
1802 status = 'X';
1803 signal = TARGET_SIGNAL_KILL;
1804 }
1805 goto restart;
1806 }
1807 else
1808 {
1809 /* It is a request we don't understand. Respond with an
1810 empty packet so that gdb knows that we don't support this
1811 request. */
1812 own_buf[0] = '\0';
1813 break;
1814 }
1815 case 'v':
1816 /* Extended (long) request. */
1817 handle_v_requests (own_buf, &status, &signal,
1818 packet_len, &new_packet_len);
1819 break;
1820
1821 default:
1822 /* It is a request we don't understand. Respond with an
1823 empty packet so that gdb knows that we don't support this
1824 request. */
1825 own_buf[0] = '\0';
1826 break;
1827 }
1828
1829 if (new_packet_len != -1)
1830 putpkt_binary (own_buf, new_packet_len);
1831 else
1832 putpkt (own_buf);
1833
1834 response_needed = 0;
1835
1836 if (was_running && (status == 'W' || status == 'X'))
1837 {
1838 was_running = 0;
1839
1840 if (status == 'W')
1841 fprintf (stderr,
1842 "\nChild exited with status %d\n", signal);
1843 if (status == 'X')
1844 fprintf (stderr, "\nChild terminated with signal = 0x%x (%s)\n",
1845 target_signal_to_host (signal),
1846 target_signal_to_name (signal));
1847
1848 if (extended_protocol)
1849 goto restart;
1850 else
1851 {
1852 fprintf (stderr, "GDBserver exiting\n");
1853 exit (0);
1854 }
1855 }
1856
1857 if (status != 'W' && status != 'X')
1858 was_running = 1;
1859 }
1860
1861 /* If an exit was requested (using the "monitor exit" command),
1862 terminate now. The only other way to get here is for
1863 getpkt to fail; close the connection and reopen it at the
1864 top of the loop. */
1865
1866 if (exit_requested)
1867 {
1868 remote_close ();
1869 if (attached && target_running ())
1870 detach_inferior ();
1871 else if (target_running ())
1872 kill_inferior ();
1873 exit (0);
1874 }
1875 else
1876 {
1877 fprintf (stderr, "Remote side has terminated connection. "
1878 "GDBserver will reopen the connection.\n");
1879 remote_close ();
1880 }
1881 }
1882 }
This page took 0.066092 seconds and 3 git commands to generate.