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