* configure.ac: Check for memmem declaration.
[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 /* Otherwise we didn't know what packet it was. Say we didn't
274 understand it. */
275 own_buf[0] = 0;
276 }
277
278 static const char *
279 get_features_xml (const char *annex)
280 {
281 /* gdbserver_xmltarget defines what to return when looking
282 for the "target.xml" file. Its contents can either be
283 verbatim XML code (prefixed with a '@') or else the name
284 of the actual XML file to be used in place of "target.xml".
285
286 This variable is set up from the auto-generated
287 init_registers_... routine for the current target. */
288
289 if (gdbserver_xmltarget
290 && strcmp (annex, "target.xml") == 0)
291 {
292 if (*gdbserver_xmltarget == '@')
293 return gdbserver_xmltarget + 1;
294 else
295 annex = gdbserver_xmltarget;
296 }
297
298 #ifdef USE_XML
299 {
300 extern const char *const xml_builtin[][2];
301 int i;
302
303 /* Look for the annex. */
304 for (i = 0; xml_builtin[i][0] != NULL; i++)
305 if (strcmp (annex, xml_builtin[i][0]) == 0)
306 break;
307
308 if (xml_builtin[i][0] != NULL)
309 return xml_builtin[i][1];
310 }
311 #endif
312
313 return NULL;
314 }
315
316 void
317 monitor_show_help (void)
318 {
319 monitor_output ("The following monitor commands are supported:\n");
320 monitor_output (" set debug <0|1>\n");
321 monitor_output (" Enable general debugging messages\n");
322 monitor_output (" set remote-debug <0|1>\n");
323 monitor_output (" Enable remote protocol debugging messages\n");
324 monitor_output (" exit\n");
325 monitor_output (" Quit GDBserver\n");
326 }
327
328 /* Subroutine of handle_search_memory to simplify it. */
329
330 static int
331 handle_search_memory_1 (CORE_ADDR start_addr, CORE_ADDR search_space_len,
332 gdb_byte *pattern, unsigned pattern_len,
333 gdb_byte *search_buf,
334 unsigned chunk_size, unsigned search_buf_size,
335 CORE_ADDR *found_addrp)
336 {
337 /* Prime the search buffer. */
338
339 if (read_inferior_memory (start_addr, search_buf, search_buf_size) != 0)
340 {
341 warning ("Unable to access target memory at 0x%lx, halting search.",
342 (long) start_addr);
343 return -1;
344 }
345
346 /* Perform the search.
347
348 The loop is kept simple by allocating [N + pattern-length - 1] bytes.
349 When we've scanned N bytes we copy the trailing bytes to the start and
350 read in another N bytes. */
351
352 while (search_space_len >= pattern_len)
353 {
354 gdb_byte *found_ptr;
355 unsigned nr_search_bytes = (search_space_len < search_buf_size
356 ? search_space_len
357 : search_buf_size);
358
359 found_ptr = memmem (search_buf, nr_search_bytes, pattern, pattern_len);
360
361 if (found_ptr != NULL)
362 {
363 CORE_ADDR found_addr = start_addr + (found_ptr - search_buf);
364 *found_addrp = found_addr;
365 return 1;
366 }
367
368 /* Not found in this chunk, skip to next chunk. */
369
370 /* Don't let search_space_len wrap here, it's unsigned. */
371 if (search_space_len >= chunk_size)
372 search_space_len -= chunk_size;
373 else
374 search_space_len = 0;
375
376 if (search_space_len >= pattern_len)
377 {
378 unsigned keep_len = search_buf_size - chunk_size;
379 CORE_ADDR read_addr = start_addr + keep_len;
380 int nr_to_read;
381
382 /* Copy the trailing part of the previous iteration to the front
383 of the buffer for the next iteration. */
384 memcpy (search_buf, search_buf + chunk_size, keep_len);
385
386 nr_to_read = (search_space_len - keep_len < chunk_size
387 ? search_space_len - keep_len
388 : chunk_size);
389
390 if (read_inferior_memory (read_addr, search_buf + keep_len,
391 nr_to_read) != 0)
392 {
393 warning ("Unable to access target memory at 0x%lx, halting search.",
394 (long) read_addr);
395 return -1;
396 }
397
398 start_addr += chunk_size;
399 }
400 }
401
402 /* Not found. */
403
404 return 0;
405 }
406
407 /* Handle qSearch:memory packets. */
408
409 static void
410 handle_search_memory (char *own_buf, int packet_len)
411 {
412 CORE_ADDR start_addr;
413 CORE_ADDR search_space_len;
414 gdb_byte *pattern;
415 unsigned int pattern_len;
416 /* NOTE: also defined in find.c testcase. */
417 #define SEARCH_CHUNK_SIZE 16000
418 const unsigned chunk_size = SEARCH_CHUNK_SIZE;
419 /* Buffer to hold memory contents for searching. */
420 gdb_byte *search_buf;
421 unsigned search_buf_size;
422 int found;
423 CORE_ADDR found_addr;
424 int cmd_name_len = sizeof ("qSearch:memory:") - 1;
425
426 pattern = malloc (packet_len);
427 if (pattern == NULL)
428 {
429 error ("Unable to allocate memory to perform the search");
430 strcpy (own_buf, "E00");
431 return;
432 }
433 if (decode_search_memory_packet (own_buf + cmd_name_len,
434 packet_len - cmd_name_len,
435 &start_addr, &search_space_len,
436 pattern, &pattern_len) < 0)
437 {
438 free (pattern);
439 error ("Error in parsing qSearch:memory packet");
440 strcpy (own_buf, "E00");
441 return;
442 }
443
444 search_buf_size = chunk_size + pattern_len - 1;
445
446 /* No point in trying to allocate a buffer larger than the search space. */
447 if (search_space_len < search_buf_size)
448 search_buf_size = search_space_len;
449
450 search_buf = malloc (search_buf_size);
451 if (search_buf == NULL)
452 {
453 free (pattern);
454 error ("Unable to allocate memory to perform the search");
455 strcpy (own_buf, "E00");
456 return;
457 }
458
459 found = handle_search_memory_1 (start_addr, search_space_len,
460 pattern, pattern_len,
461 search_buf, chunk_size, search_buf_size,
462 &found_addr);
463
464 if (found > 0)
465 sprintf (own_buf, "1,%lx", (long) found_addr);
466 else if (found == 0)
467 strcpy (own_buf, "0");
468 else
469 strcpy (own_buf, "E00");
470
471 free (search_buf);
472 free (pattern);
473 }
474
475 #define require_running(BUF) \
476 if (!target_running ()) \
477 { \
478 write_enn (BUF); \
479 return; \
480 }
481
482 /* Handle all of the extended 'q' packets. */
483 void
484 handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
485 {
486 static struct inferior_list_entry *thread_ptr;
487
488 /* Reply the current thread id. */
489 if (strcmp ("qC", own_buf) == 0 && !disable_packet_qC)
490 {
491 require_running (own_buf);
492 thread_ptr = all_threads.head;
493 sprintf (own_buf, "QC%x",
494 thread_to_gdb_id ((struct thread_info *)thread_ptr));
495 return;
496 }
497
498 if (strcmp ("qSymbol::", own_buf) == 0)
499 {
500 if (target_running () && the_target->look_up_symbols != NULL)
501 (*the_target->look_up_symbols) ();
502
503 strcpy (own_buf, "OK");
504 return;
505 }
506
507 if (!disable_packet_qfThreadInfo)
508 {
509 if (strcmp ("qfThreadInfo", own_buf) == 0)
510 {
511 require_running (own_buf);
512 thread_ptr = all_threads.head;
513 sprintf (own_buf, "m%x", thread_to_gdb_id ((struct thread_info *)thread_ptr));
514 thread_ptr = thread_ptr->next;
515 return;
516 }
517
518 if (strcmp ("qsThreadInfo", own_buf) == 0)
519 {
520 require_running (own_buf);
521 if (thread_ptr != NULL)
522 {
523 sprintf (own_buf, "m%x", thread_to_gdb_id ((struct thread_info *)thread_ptr));
524 thread_ptr = thread_ptr->next;
525 return;
526 }
527 else
528 {
529 sprintf (own_buf, "l");
530 return;
531 }
532 }
533 }
534
535 if (the_target->read_offsets != NULL
536 && strcmp ("qOffsets", own_buf) == 0)
537 {
538 CORE_ADDR text, data;
539
540 require_running (own_buf);
541 if (the_target->read_offsets (&text, &data))
542 sprintf (own_buf, "Text=%lX;Data=%lX;Bss=%lX",
543 (long)text, (long)data, (long)data);
544 else
545 write_enn (own_buf);
546
547 return;
548 }
549
550 if (the_target->qxfer_spu != NULL
551 && strncmp ("qXfer:spu:read:", own_buf, 15) == 0)
552 {
553 char *annex;
554 int n;
555 unsigned int len;
556 CORE_ADDR ofs;
557 unsigned char *spu_buf;
558
559 require_running (own_buf);
560 strcpy (own_buf, "E00");
561 if (decode_xfer_read (own_buf + 15, &annex, &ofs, &len) < 0)
562 return;
563 if (len > PBUFSIZ - 2)
564 len = PBUFSIZ - 2;
565 spu_buf = malloc (len + 1);
566 if (!spu_buf)
567 return;
568
569 n = (*the_target->qxfer_spu) (annex, spu_buf, NULL, ofs, len + 1);
570 if (n < 0)
571 write_enn (own_buf);
572 else if (n > len)
573 *new_packet_len_p = write_qxfer_response
574 (own_buf, spu_buf, len, 1);
575 else
576 *new_packet_len_p = write_qxfer_response
577 (own_buf, spu_buf, n, 0);
578
579 free (spu_buf);
580 return;
581 }
582
583 if (the_target->qxfer_spu != NULL
584 && strncmp ("qXfer:spu:write:", own_buf, 16) == 0)
585 {
586 char *annex;
587 int n;
588 unsigned int len;
589 CORE_ADDR ofs;
590 unsigned char *spu_buf;
591
592 require_running (own_buf);
593 strcpy (own_buf, "E00");
594 spu_buf = malloc (packet_len - 15);
595 if (!spu_buf)
596 return;
597 if (decode_xfer_write (own_buf + 16, packet_len - 16, &annex,
598 &ofs, &len, spu_buf) < 0)
599 {
600 free (spu_buf);
601 return;
602 }
603
604 n = (*the_target->qxfer_spu)
605 (annex, NULL, (unsigned const char *)spu_buf, ofs, len);
606 if (n < 0)
607 write_enn (own_buf);
608 else
609 sprintf (own_buf, "%x", n);
610
611 free (spu_buf);
612 return;
613 }
614
615 if (the_target->read_auxv != NULL
616 && strncmp ("qXfer:auxv:read:", own_buf, 16) == 0)
617 {
618 unsigned char *data;
619 int n;
620 CORE_ADDR ofs;
621 unsigned int len;
622 char *annex;
623
624 require_running (own_buf);
625
626 /* Reject any annex; grab the offset and length. */
627 if (decode_xfer_read (own_buf + 16, &annex, &ofs, &len) < 0
628 || annex[0] != '\0')
629 {
630 strcpy (own_buf, "E00");
631 return;
632 }
633
634 /* Read one extra byte, as an indicator of whether there is
635 more. */
636 if (len > PBUFSIZ - 2)
637 len = PBUFSIZ - 2;
638 data = malloc (len + 1);
639 n = (*the_target->read_auxv) (ofs, data, len + 1);
640 if (n < 0)
641 write_enn (own_buf);
642 else if (n > len)
643 *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
644 else
645 *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
646
647 free (data);
648
649 return;
650 }
651
652 if (strncmp ("qXfer:features:read:", own_buf, 20) == 0)
653 {
654 CORE_ADDR ofs;
655 unsigned int len, total_len;
656 const char *document;
657 char *annex;
658
659 require_running (own_buf);
660
661 /* Grab the annex, offset, and length. */
662 if (decode_xfer_read (own_buf + 20, &annex, &ofs, &len) < 0)
663 {
664 strcpy (own_buf, "E00");
665 return;
666 }
667
668 /* Now grab the correct annex. */
669 document = get_features_xml (annex);
670 if (document == NULL)
671 {
672 strcpy (own_buf, "E00");
673 return;
674 }
675
676 total_len = strlen (document);
677 if (len > PBUFSIZ - 2)
678 len = PBUFSIZ - 2;
679
680 if (ofs > total_len)
681 write_enn (own_buf);
682 else if (len < total_len - ofs)
683 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
684 len, 1);
685 else
686 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
687 total_len - ofs, 0);
688
689 return;
690 }
691
692 if (strncmp ("qXfer:libraries:read:", own_buf, 21) == 0)
693 {
694 CORE_ADDR ofs;
695 unsigned int len, total_len;
696 char *document, *p;
697 struct inferior_list_entry *dll_ptr;
698 char *annex;
699
700 require_running (own_buf);
701
702 /* Reject any annex; grab the offset and length. */
703 if (decode_xfer_read (own_buf + 21, &annex, &ofs, &len) < 0
704 || annex[0] != '\0')
705 {
706 strcpy (own_buf, "E00");
707 return;
708 }
709
710 /* Over-estimate the necessary memory. Assume that every character
711 in the library name must be escaped. */
712 total_len = 64;
713 for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)
714 total_len += 128 + 6 * strlen (((struct dll_info *) dll_ptr)->name);
715
716 document = malloc (total_len);
717 strcpy (document, "<library-list>\n");
718 p = document + strlen (document);
719
720 for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)
721 {
722 struct dll_info *dll = (struct dll_info *) dll_ptr;
723 char *name;
724
725 strcpy (p, " <library name=\"");
726 p = p + strlen (p);
727 name = xml_escape_text (dll->name);
728 strcpy (p, name);
729 free (name);
730 p = p + strlen (p);
731 strcpy (p, "\"><segment address=\"");
732 p = p + strlen (p);
733 sprintf (p, "0x%lx", (long) dll->base_addr);
734 p = p + strlen (p);
735 strcpy (p, "\"/></library>\n");
736 p = p + strlen (p);
737 }
738
739 strcpy (p, "</library-list>\n");
740
741 total_len = strlen (document);
742 if (len > PBUFSIZ - 2)
743 len = PBUFSIZ - 2;
744
745 if (ofs > total_len)
746 write_enn (own_buf);
747 else if (len < total_len - ofs)
748 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
749 len, 1);
750 else
751 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
752 total_len - ofs, 0);
753
754 free (document);
755 return;
756 }
757
758 /* Protocol features query. */
759 if (strncmp ("qSupported", own_buf, 10) == 0
760 && (own_buf[10] == ':' || own_buf[10] == '\0'))
761 {
762 sprintf (own_buf, "PacketSize=%x;QPassSignals+", PBUFSIZ - 1);
763
764 /* We do not have any hook to indicate whether the target backend
765 supports qXfer:libraries:read, so always report it. */
766 strcat (own_buf, ";qXfer:libraries:read+");
767
768 if (the_target->read_auxv != NULL)
769 strcat (own_buf, ";qXfer:auxv:read+");
770
771 if (the_target->qxfer_spu != NULL)
772 strcat (own_buf, ";qXfer:spu:read+;qXfer:spu:write+");
773
774 /* We always report qXfer:features:read, as targets may
775 install XML files on a subsequent call to arch_setup.
776 If we reported to GDB on startup that we don't support
777 qXfer:feature:read at all, we will never be re-queried. */
778 strcat (own_buf, ";qXfer:features:read+");
779
780 return;
781 }
782
783 /* Thread-local storage support. */
784 if (the_target->get_tls_address != NULL
785 && strncmp ("qGetTLSAddr:", own_buf, 12) == 0)
786 {
787 char *p = own_buf + 12;
788 CORE_ADDR parts[3], address = 0;
789 int i, err;
790
791 require_running (own_buf);
792
793 for (i = 0; i < 3; i++)
794 {
795 char *p2;
796 int len;
797
798 if (p == NULL)
799 break;
800
801 p2 = strchr (p, ',');
802 if (p2)
803 {
804 len = p2 - p;
805 p2++;
806 }
807 else
808 {
809 len = strlen (p);
810 p2 = NULL;
811 }
812
813 decode_address (&parts[i], p, len);
814 p = p2;
815 }
816
817 if (p != NULL || i < 3)
818 err = 1;
819 else
820 {
821 struct thread_info *thread = gdb_id_to_thread (parts[0]);
822
823 if (thread == NULL)
824 err = 2;
825 else
826 err = the_target->get_tls_address (thread, parts[1], parts[2],
827 &address);
828 }
829
830 if (err == 0)
831 {
832 sprintf (own_buf, "%llx", address);
833 return;
834 }
835 else if (err > 0)
836 {
837 write_enn (own_buf);
838 return;
839 }
840
841 /* Otherwise, pretend we do not understand this packet. */
842 }
843
844 /* Handle "monitor" commands. */
845 if (strncmp ("qRcmd,", own_buf, 6) == 0)
846 {
847 char *mon = malloc (PBUFSIZ);
848 int len = strlen (own_buf + 6);
849
850 if ((len % 2) != 0 || unhexify (mon, own_buf + 6, len / 2) != len / 2)
851 {
852 write_enn (own_buf);
853 free (mon);
854 return;
855 }
856 mon[len / 2] = '\0';
857
858 write_ok (own_buf);
859
860 if (strcmp (mon, "set debug 1") == 0)
861 {
862 debug_threads = 1;
863 monitor_output ("Debug output enabled.\n");
864 }
865 else if (strcmp (mon, "set debug 0") == 0)
866 {
867 debug_threads = 0;
868 monitor_output ("Debug output disabled.\n");
869 }
870 else if (strcmp (mon, "set remote-debug 1") == 0)
871 {
872 remote_debug = 1;
873 monitor_output ("Protocol debug output enabled.\n");
874 }
875 else if (strcmp (mon, "set remote-debug 0") == 0)
876 {
877 remote_debug = 0;
878 monitor_output ("Protocol debug output disabled.\n");
879 }
880 else if (strcmp (mon, "help") == 0)
881 monitor_show_help ();
882 else if (strcmp (mon, "exit") == 0)
883 exit_requested = 1;
884 else
885 {
886 monitor_output ("Unknown monitor command.\n\n");
887 monitor_show_help ();
888 write_enn (own_buf);
889 }
890
891 free (mon);
892 return;
893 }
894
895 if (strncmp ("qSearch:memory:", own_buf, sizeof ("qSearch:memory:") - 1) == 0)
896 {
897 require_running (own_buf);
898 handle_search_memory (own_buf, packet_len);
899 return;
900 }
901
902 /* Otherwise we didn't know what packet it was. Say we didn't
903 understand it. */
904 own_buf[0] = 0;
905 }
906
907 /* Parse vCont packets. */
908 void
909 handle_v_cont (char *own_buf, char *status, int *signal)
910 {
911 char *p, *q;
912 int n = 0, i = 0;
913 struct thread_resume *resume_info, default_action;
914
915 /* Count the number of semicolons in the packet. There should be one
916 for every action. */
917 p = &own_buf[5];
918 while (p)
919 {
920 n++;
921 p++;
922 p = strchr (p, ';');
923 }
924 /* Allocate room for one extra action, for the default remain-stopped
925 behavior; if no default action is in the list, we'll need the extra
926 slot. */
927 resume_info = malloc ((n + 1) * sizeof (resume_info[0]));
928
929 default_action.thread = -1;
930 default_action.leave_stopped = 1;
931 default_action.step = 0;
932 default_action.sig = 0;
933
934 p = &own_buf[5];
935 i = 0;
936 while (*p)
937 {
938 p++;
939
940 resume_info[i].leave_stopped = 0;
941
942 if (p[0] == 's' || p[0] == 'S')
943 resume_info[i].step = 1;
944 else if (p[0] == 'c' || p[0] == 'C')
945 resume_info[i].step = 0;
946 else
947 goto err;
948
949 if (p[0] == 'S' || p[0] == 'C')
950 {
951 int sig;
952 sig = strtol (p + 1, &q, 16);
953 if (p == q)
954 goto err;
955 p = q;
956
957 if (!target_signal_to_host_p (sig))
958 goto err;
959 resume_info[i].sig = target_signal_to_host (sig);
960 }
961 else
962 {
963 resume_info[i].sig = 0;
964 p = p + 1;
965 }
966
967 if (p[0] == 0)
968 {
969 resume_info[i].thread = -1;
970 default_action = resume_info[i];
971
972 /* Note: we don't increment i here, we'll overwrite this entry
973 the next time through. */
974 }
975 else if (p[0] == ':')
976 {
977 unsigned int gdb_id = strtoul (p + 1, &q, 16);
978 unsigned long thread_id;
979
980 if (p == q)
981 goto err;
982 p = q;
983 if (p[0] != ';' && p[0] != 0)
984 goto err;
985
986 thread_id = gdb_id_to_thread_id (gdb_id);
987 if (thread_id)
988 resume_info[i].thread = thread_id;
989 else
990 goto err;
991
992 i++;
993 }
994 }
995
996 resume_info[i] = default_action;
997
998 /* Still used in occasional places in the backend. */
999 if (n == 1 && resume_info[0].thread != -1)
1000 cont_thread = resume_info[0].thread;
1001 else
1002 cont_thread = -1;
1003 set_desired_inferior (0);
1004
1005 enable_async_io ();
1006 (*the_target->resume) (resume_info);
1007
1008 free (resume_info);
1009
1010 *signal = mywait (status, 1);
1011 prepare_resume_reply (own_buf, *status, *signal);
1012 disable_async_io ();
1013 return;
1014
1015 err:
1016 write_enn (own_buf);
1017 free (resume_info);
1018 return;
1019 }
1020
1021 /* Attach to a new program. Return 1 if successful, 0 if failure. */
1022 int
1023 handle_v_attach (char *own_buf, char *status, int *signal)
1024 {
1025 int pid;
1026
1027 pid = strtol (own_buf + 8, NULL, 16);
1028 if (pid != 0 && attach_inferior (pid, status, signal) == 0)
1029 {
1030 /* Don't report shared library events after attaching, even if
1031 some libraries are preloaded. GDB will always poll the
1032 library list. Avoids the "stopped by shared library event"
1033 notice on the GDB side. */
1034 dlls_changed = 0;
1035 prepare_resume_reply (own_buf, *status, *signal);
1036 return 1;
1037 }
1038 else
1039 {
1040 write_enn (own_buf);
1041 return 0;
1042 }
1043 }
1044
1045 /* Run a new program. Return 1 if successful, 0 if failure. */
1046 static int
1047 handle_v_run (char *own_buf, char *status, int *signal)
1048 {
1049 char *p, **pp, *next_p, **new_argv;
1050 int i, new_argc;
1051
1052 new_argc = 0;
1053 for (p = own_buf + strlen ("vRun;"); p && *p; p = strchr (p, ';'))
1054 {
1055 p++;
1056 new_argc++;
1057 }
1058
1059 new_argv = malloc ((new_argc + 2) * sizeof (char *));
1060 i = 0;
1061 for (p = own_buf + strlen ("vRun;"); *p; p = next_p)
1062 {
1063 next_p = strchr (p, ';');
1064 if (next_p == NULL)
1065 next_p = p + strlen (p);
1066
1067 if (i == 0 && p == next_p)
1068 new_argv[i] = NULL;
1069 else
1070 {
1071 new_argv[i] = malloc (1 + (next_p - p) / 2);
1072 unhexify (new_argv[i], p, (next_p - p) / 2);
1073 new_argv[i][(next_p - p) / 2] = '\0';
1074 }
1075
1076 if (*next_p)
1077 next_p++;
1078 i++;
1079 }
1080 new_argv[i] = NULL;
1081
1082 if (new_argv[0] == NULL)
1083 {
1084 if (program_argv == NULL)
1085 {
1086 write_enn (own_buf);
1087 return 0;
1088 }
1089
1090 new_argv[0] = strdup (program_argv[0]);
1091 }
1092
1093 /* Free the old argv. */
1094 if (program_argv)
1095 {
1096 for (pp = program_argv; *pp != NULL; pp++)
1097 free (*pp);
1098 free (program_argv);
1099 }
1100 program_argv = new_argv;
1101
1102 *signal = start_inferior (program_argv, status);
1103 if (*status == 'T')
1104 {
1105 prepare_resume_reply (own_buf, *status, *signal);
1106 return 1;
1107 }
1108 else
1109 {
1110 write_enn (own_buf);
1111 return 0;
1112 }
1113 }
1114
1115 /* Handle all of the extended 'v' packets. */
1116 void
1117 handle_v_requests (char *own_buf, char *status, int *signal,
1118 int packet_len, int *new_packet_len)
1119 {
1120 if (!disable_packet_vCont)
1121 {
1122 if (strncmp (own_buf, "vCont;", 6) == 0)
1123 {
1124 require_running (own_buf);
1125 handle_v_cont (own_buf, status, signal);
1126 return;
1127 }
1128
1129 if (strncmp (own_buf, "vCont?", 6) == 0)
1130 {
1131 strcpy (own_buf, "vCont;c;C;s;S");
1132 return;
1133 }
1134 }
1135
1136 if (strncmp (own_buf, "vFile:", 6) == 0
1137 && handle_vFile (own_buf, packet_len, new_packet_len))
1138 return;
1139
1140 if (strncmp (own_buf, "vAttach;", 8) == 0)
1141 {
1142 if (target_running ())
1143 {
1144 fprintf (stderr, "Already debugging a process\n");
1145 write_enn (own_buf);
1146 return;
1147 }
1148 handle_v_attach (own_buf, status, signal);
1149 return;
1150 }
1151
1152 if (strncmp (own_buf, "vRun;", 5) == 0)
1153 {
1154 if (target_running ())
1155 {
1156 fprintf (stderr, "Already debugging a process\n");
1157 write_enn (own_buf);
1158 return;
1159 }
1160 handle_v_run (own_buf, status, signal);
1161 return;
1162 }
1163
1164 /* Otherwise we didn't know what packet it was. Say we didn't
1165 understand it. */
1166 own_buf[0] = 0;
1167 return;
1168 }
1169
1170 void
1171 myresume (char *own_buf, int step, int *signalp, char *statusp)
1172 {
1173 struct thread_resume resume_info[2];
1174 int n = 0;
1175 int sig = *signalp;
1176
1177 set_desired_inferior (0);
1178
1179 if (step || sig || (cont_thread != 0 && cont_thread != -1))
1180 {
1181 resume_info[0].thread
1182 = ((struct inferior_list_entry *) current_inferior)->id;
1183 resume_info[0].step = step;
1184 resume_info[0].sig = sig;
1185 resume_info[0].leave_stopped = 0;
1186 n++;
1187 }
1188 resume_info[n].thread = -1;
1189 resume_info[n].step = 0;
1190 resume_info[n].sig = 0;
1191 resume_info[n].leave_stopped = (cont_thread != 0 && cont_thread != -1);
1192
1193 enable_async_io ();
1194 (*the_target->resume) (resume_info);
1195 *signalp = mywait (statusp, 1);
1196 prepare_resume_reply (own_buf, *statusp, *signalp);
1197 disable_async_io ();
1198 }
1199
1200 static void
1201 gdbserver_version (void)
1202 {
1203 printf ("GNU gdbserver %s%s\n"
1204 "Copyright (C) 2007 Free Software Foundation, Inc.\n"
1205 "gdbserver is free software, covered by the GNU General Public License.\n"
1206 "This gdbserver was configured as \"%s\"\n",
1207 PKGVERSION, version, host_name);
1208 }
1209
1210 static void
1211 gdbserver_usage (FILE *stream)
1212 {
1213 fprintf (stream, "Usage:\tgdbserver [OPTIONS] COMM PROG [ARGS ...]\n"
1214 "\tgdbserver [OPTIONS] --attach COMM PID\n"
1215 "\tgdbserver [OPTIONS] --multi COMM\n"
1216 "\n"
1217 "COMM may either be a tty device (for serial debugging), or \n"
1218 "HOST:PORT to listen for a TCP connection.\n"
1219 "\n"
1220 "Options:\n"
1221 " --debug\t\tEnable debugging output.\n"
1222 " --version\t\tDisplay version information and exit.\n"
1223 " --wrapper WRAPPER --\tRun WRAPPER to start new programs.\n");
1224 if (REPORT_BUGS_TO[0] && stream == stdout)
1225 fprintf (stream, "Report bugs to \"%s\".\n", REPORT_BUGS_TO);
1226 }
1227
1228 static void
1229 gdbserver_show_disableable (FILE *stream)
1230 {
1231 fprintf (stream, "Disableable packets:\n"
1232 " vCont \tAll vCont packets\n"
1233 " qC \tQuerying the current thread\n"
1234 " qfThreadInfo\tThread listing\n"
1235 " Tthread \tPassing the thread specifier in the T stop reply packet\n"
1236 " threads \tAll of the above\n");
1237 }
1238
1239
1240 #undef require_running
1241 #define require_running(BUF) \
1242 if (!target_running ()) \
1243 { \
1244 write_enn (BUF); \
1245 break; \
1246 }
1247
1248 int
1249 main (int argc, char *argv[])
1250 {
1251 char ch, status, *own_buf;
1252 unsigned char *mem_buf;
1253 int i = 0;
1254 int signal;
1255 unsigned int len;
1256 CORE_ADDR mem_addr;
1257 int bad_attach;
1258 int pid;
1259 char *arg_end, *port;
1260 char **next_arg = &argv[1];
1261 int multi_mode = 0;
1262 int attach = 0;
1263 int was_running;
1264
1265 while (*next_arg != NULL && **next_arg == '-')
1266 {
1267 if (strcmp (*next_arg, "--version") == 0)
1268 {
1269 gdbserver_version ();
1270 exit (0);
1271 }
1272 else if (strcmp (*next_arg, "--help") == 0)
1273 {
1274 gdbserver_usage (stdout);
1275 exit (0);
1276 }
1277 else if (strcmp (*next_arg, "--attach") == 0)
1278 attach = 1;
1279 else if (strcmp (*next_arg, "--multi") == 0)
1280 multi_mode = 1;
1281 else if (strcmp (*next_arg, "--wrapper") == 0)
1282 {
1283 next_arg++;
1284
1285 wrapper_argv = next_arg;
1286 while (*next_arg != NULL && strcmp (*next_arg, "--") != 0)
1287 next_arg++;
1288
1289 if (next_arg == wrapper_argv || *next_arg == NULL)
1290 {
1291 gdbserver_usage (stderr);
1292 exit (1);
1293 }
1294
1295 /* Consume the "--". */
1296 *next_arg = NULL;
1297 }
1298 else if (strcmp (*next_arg, "--debug") == 0)
1299 debug_threads = 1;
1300 else if (strcmp (*next_arg, "--disable-packet") == 0)
1301 {
1302 gdbserver_show_disableable (stdout);
1303 exit (0);
1304 }
1305 else if (strncmp (*next_arg,
1306 "--disable-packet=",
1307 sizeof ("--disable-packet=") - 1) == 0)
1308 {
1309 char *packets, *tok;
1310
1311 packets = *next_arg += sizeof ("--disable-packet=") - 1;
1312 for (tok = strtok (packets, ",");
1313 tok != NULL;
1314 tok = strtok (NULL, ","))
1315 {
1316 if (strcmp ("vCont", tok) == 0)
1317 disable_packet_vCont = 1;
1318 else if (strcmp ("Tthread", tok) == 0)
1319 disable_packet_Tthread = 1;
1320 else if (strcmp ("qC", tok) == 0)
1321 disable_packet_qC = 1;
1322 else if (strcmp ("qfThreadInfo", tok) == 0)
1323 disable_packet_qfThreadInfo = 1;
1324 else if (strcmp ("threads", tok) == 0)
1325 {
1326 disable_packet_vCont = 1;
1327 disable_packet_Tthread = 1;
1328 disable_packet_qC = 1;
1329 disable_packet_qfThreadInfo = 1;
1330 }
1331 else
1332 {
1333 fprintf (stderr, "Don't know how to disable \"%s\".\n\n",
1334 tok);
1335 gdbserver_show_disableable (stderr);
1336 exit (1);
1337 }
1338 }
1339 }
1340 else
1341 {
1342 fprintf (stderr, "Unknown argument: %s\n", *next_arg);
1343 exit (1);
1344 }
1345
1346 next_arg++;
1347 continue;
1348 }
1349
1350 if (setjmp (toplevel))
1351 {
1352 fprintf (stderr, "Exiting\n");
1353 exit (1);
1354 }
1355
1356 port = *next_arg;
1357 next_arg++;
1358 if (port == NULL || (!attach && !multi_mode && *next_arg == NULL))
1359 {
1360 gdbserver_usage (stderr);
1361 exit (1);
1362 }
1363
1364 bad_attach = 0;
1365 pid = 0;
1366
1367 /* --attach used to come after PORT, so allow it there for
1368 compatibility. */
1369 if (*next_arg != NULL && strcmp (*next_arg, "--attach") == 0)
1370 {
1371 attach = 1;
1372 next_arg++;
1373 }
1374
1375 if (attach
1376 && (*next_arg == NULL
1377 || (*next_arg)[0] == '\0'
1378 || (pid = strtoul (*next_arg, &arg_end, 0)) == 0
1379 || *arg_end != '\0'
1380 || next_arg[1] != NULL))
1381 bad_attach = 1;
1382
1383 if (bad_attach)
1384 {
1385 gdbserver_usage (stderr);
1386 exit (1);
1387 }
1388
1389 initialize_async_io ();
1390 initialize_low ();
1391
1392 own_buf = malloc (PBUFSIZ + 1);
1393 mem_buf = malloc (PBUFSIZ);
1394
1395 if (pid == 0 && *next_arg != NULL)
1396 {
1397 int i, n;
1398
1399 n = argc - (next_arg - argv);
1400 program_argv = malloc (sizeof (char *) * (n + 1));
1401 for (i = 0; i < n; i++)
1402 program_argv[i] = strdup (next_arg[i]);
1403 program_argv[i] = NULL;
1404
1405 /* Wait till we are at first instruction in program. */
1406 signal = start_inferior (program_argv, &status);
1407
1408 /* We are now (hopefully) stopped at the first instruction of
1409 the target process. This assumes that the target process was
1410 successfully created. */
1411 }
1412 else if (pid != 0)
1413 {
1414 if (attach_inferior (pid, &status, &signal) == -1)
1415 error ("Attaching not supported on this target");
1416
1417 /* Otherwise succeeded. */
1418 }
1419 else
1420 {
1421 status = 'W';
1422 signal = 0;
1423 }
1424
1425 /* Don't report shared library events on the initial connection,
1426 even if some libraries are preloaded. Avoids the "stopped by
1427 shared library event" notice on gdb side. */
1428 dlls_changed = 0;
1429
1430 if (setjmp (toplevel))
1431 {
1432 fprintf (stderr, "Killing inferior\n");
1433 kill_inferior ();
1434 exit (1);
1435 }
1436
1437 if (status == 'W' || status == 'X')
1438 was_running = 0;
1439 else
1440 was_running = 1;
1441
1442 if (!was_running && !multi_mode)
1443 {
1444 fprintf (stderr, "No program to debug. GDBserver exiting.\n");
1445 exit (1);
1446 }
1447
1448 while (1)
1449 {
1450 remote_open (port);
1451
1452 restart:
1453 if (setjmp (toplevel) != 0)
1454 {
1455 /* An error occurred. */
1456 if (response_needed)
1457 {
1458 write_enn (own_buf);
1459 putpkt (own_buf);
1460 }
1461 }
1462
1463 disable_async_io ();
1464 while (!exit_requested)
1465 {
1466 unsigned char sig;
1467 int packet_len;
1468 int new_packet_len = -1;
1469
1470 response_needed = 0;
1471 packet_len = getpkt (own_buf);
1472 if (packet_len <= 0)
1473 break;
1474 response_needed = 1;
1475
1476 i = 0;
1477 ch = own_buf[i++];
1478 switch (ch)
1479 {
1480 case 'q':
1481 handle_query (own_buf, packet_len, &new_packet_len);
1482 break;
1483 case 'Q':
1484 handle_general_set (own_buf);
1485 break;
1486 case 'D':
1487 require_running (own_buf);
1488 fprintf (stderr, "Detaching from inferior\n");
1489 if (detach_inferior () != 0)
1490 write_enn (own_buf);
1491 else
1492 {
1493 write_ok (own_buf);
1494
1495 if (extended_protocol)
1496 {
1497 /* Treat this like a normal program exit. */
1498 signal = 0;
1499 status = 'W';
1500 }
1501 else
1502 {
1503 putpkt (own_buf);
1504 remote_close ();
1505
1506 /* If we are attached, then we can exit. Otherwise, we
1507 need to hang around doing nothing, until the child
1508 is gone. */
1509 if (!attached)
1510 join_inferior ();
1511
1512 exit (0);
1513 }
1514 }
1515 break;
1516 case '!':
1517 extended_protocol = 1;
1518 write_ok (own_buf);
1519 break;
1520 case '?':
1521 prepare_resume_reply (own_buf, status, signal);
1522 break;
1523 case 'H':
1524 if (own_buf[1] == 'c' || own_buf[1] == 'g' || own_buf[1] == 's')
1525 {
1526 unsigned long gdb_id, thread_id;
1527
1528 require_running (own_buf);
1529 gdb_id = strtoul (&own_buf[2], NULL, 16);
1530 if (gdb_id == 0 || gdb_id == -1)
1531 thread_id = gdb_id;
1532 else
1533 {
1534 thread_id = gdb_id_to_thread_id (gdb_id);
1535 if (thread_id == 0)
1536 {
1537 write_enn (own_buf);
1538 break;
1539 }
1540 }
1541
1542 if (own_buf[1] == 'g')
1543 {
1544 general_thread = thread_id;
1545 set_desired_inferior (1);
1546 }
1547 else if (own_buf[1] == 'c')
1548 cont_thread = thread_id;
1549 else if (own_buf[1] == 's')
1550 step_thread = thread_id;
1551
1552 write_ok (own_buf);
1553 }
1554 else
1555 {
1556 /* Silently ignore it so that gdb can extend the protocol
1557 without compatibility headaches. */
1558 own_buf[0] = '\0';
1559 }
1560 break;
1561 case 'g':
1562 require_running (own_buf);
1563 set_desired_inferior (1);
1564 registers_to_string (own_buf);
1565 break;
1566 case 'G':
1567 require_running (own_buf);
1568 set_desired_inferior (1);
1569 registers_from_string (&own_buf[1]);
1570 write_ok (own_buf);
1571 break;
1572 case 'm':
1573 require_running (own_buf);
1574 decode_m_packet (&own_buf[1], &mem_addr, &len);
1575 if (read_inferior_memory (mem_addr, mem_buf, len) == 0)
1576 convert_int_to_ascii (mem_buf, own_buf, len);
1577 else
1578 write_enn (own_buf);
1579 break;
1580 case 'M':
1581 require_running (own_buf);
1582 decode_M_packet (&own_buf[1], &mem_addr, &len, mem_buf);
1583 if (write_inferior_memory (mem_addr, mem_buf, len) == 0)
1584 write_ok (own_buf);
1585 else
1586 write_enn (own_buf);
1587 break;
1588 case 'X':
1589 require_running (own_buf);
1590 if (decode_X_packet (&own_buf[1], packet_len - 1,
1591 &mem_addr, &len, mem_buf) < 0
1592 || write_inferior_memory (mem_addr, mem_buf, len) != 0)
1593 write_enn (own_buf);
1594 else
1595 write_ok (own_buf);
1596 break;
1597 case 'C':
1598 require_running (own_buf);
1599 convert_ascii_to_int (own_buf + 1, &sig, 1);
1600 if (target_signal_to_host_p (sig))
1601 signal = target_signal_to_host (sig);
1602 else
1603 signal = 0;
1604 myresume (own_buf, 0, &signal, &status);
1605 break;
1606 case 'S':
1607 require_running (own_buf);
1608 convert_ascii_to_int (own_buf + 1, &sig, 1);
1609 if (target_signal_to_host_p (sig))
1610 signal = target_signal_to_host (sig);
1611 else
1612 signal = 0;
1613 myresume (own_buf, 1, &signal, &status);
1614 break;
1615 case 'c':
1616 require_running (own_buf);
1617 signal = 0;
1618 myresume (own_buf, 0, &signal, &status);
1619 break;
1620 case 's':
1621 require_running (own_buf);
1622 signal = 0;
1623 myresume (own_buf, 1, &signal, &status);
1624 break;
1625 case 'Z':
1626 {
1627 char *lenptr;
1628 char *dataptr;
1629 CORE_ADDR addr = strtoul (&own_buf[3], &lenptr, 16);
1630 int len = strtol (lenptr + 1, &dataptr, 16);
1631 char type = own_buf[1];
1632
1633 if (the_target->insert_watchpoint == NULL
1634 || (type < '2' || type > '4'))
1635 {
1636 /* No watchpoint support or not a watchpoint command;
1637 unrecognized either way. */
1638 own_buf[0] = '\0';
1639 }
1640 else
1641 {
1642 int res;
1643
1644 require_running (own_buf);
1645 res = (*the_target->insert_watchpoint) (type, addr, len);
1646 if (res == 0)
1647 write_ok (own_buf);
1648 else if (res == 1)
1649 /* Unsupported. */
1650 own_buf[0] = '\0';
1651 else
1652 write_enn (own_buf);
1653 }
1654 break;
1655 }
1656 case 'z':
1657 {
1658 char *lenptr;
1659 char *dataptr;
1660 CORE_ADDR addr = strtoul (&own_buf[3], &lenptr, 16);
1661 int len = strtol (lenptr + 1, &dataptr, 16);
1662 char type = own_buf[1];
1663
1664 if (the_target->remove_watchpoint == NULL
1665 || (type < '2' || type > '4'))
1666 {
1667 /* No watchpoint support or not a watchpoint command;
1668 unrecognized either way. */
1669 own_buf[0] = '\0';
1670 }
1671 else
1672 {
1673 int res;
1674
1675 require_running (own_buf);
1676 res = (*the_target->remove_watchpoint) (type, addr, len);
1677 if (res == 0)
1678 write_ok (own_buf);
1679 else if (res == 1)
1680 /* Unsupported. */
1681 own_buf[0] = '\0';
1682 else
1683 write_enn (own_buf);
1684 }
1685 break;
1686 }
1687 case 'k':
1688 response_needed = 0;
1689 if (!target_running ())
1690 /* The packet we received doesn't make sense - but we
1691 can't reply to it, either. */
1692 goto restart;
1693
1694 fprintf (stderr, "Killing inferior\n");
1695 kill_inferior ();
1696
1697 /* When using the extended protocol, we wait with no
1698 program running. The traditional protocol will exit
1699 instead. */
1700 if (extended_protocol)
1701 {
1702 status = 'X';
1703 signal = TARGET_SIGNAL_KILL;
1704 was_running = 0;
1705 goto restart;
1706 }
1707 else
1708 {
1709 exit (0);
1710 break;
1711 }
1712 case 'T':
1713 {
1714 unsigned long gdb_id, thread_id;
1715
1716 require_running (own_buf);
1717 gdb_id = strtoul (&own_buf[1], NULL, 16);
1718 thread_id = gdb_id_to_thread_id (gdb_id);
1719 if (thread_id == 0)
1720 {
1721 write_enn (own_buf);
1722 break;
1723 }
1724
1725 if (mythread_alive (thread_id))
1726 write_ok (own_buf);
1727 else
1728 write_enn (own_buf);
1729 }
1730 break;
1731 case 'R':
1732 response_needed = 0;
1733
1734 /* Restarting the inferior is only supported in the
1735 extended protocol. */
1736 if (extended_protocol)
1737 {
1738 if (target_running ())
1739 kill_inferior ();
1740 fprintf (stderr, "GDBserver restarting\n");
1741
1742 /* Wait till we are at 1st instruction in prog. */
1743 if (program_argv != NULL)
1744 signal = start_inferior (program_argv, &status);
1745 else
1746 {
1747 status = 'X';
1748 signal = TARGET_SIGNAL_KILL;
1749 }
1750 goto restart;
1751 }
1752 else
1753 {
1754 /* It is a request we don't understand. Respond with an
1755 empty packet so that gdb knows that we don't support this
1756 request. */
1757 own_buf[0] = '\0';
1758 break;
1759 }
1760 case 'v':
1761 /* Extended (long) request. */
1762 handle_v_requests (own_buf, &status, &signal,
1763 packet_len, &new_packet_len);
1764 break;
1765
1766 default:
1767 /* It is a request we don't understand. Respond with an
1768 empty packet so that gdb knows that we don't support this
1769 request. */
1770 own_buf[0] = '\0';
1771 break;
1772 }
1773
1774 if (new_packet_len != -1)
1775 putpkt_binary (own_buf, new_packet_len);
1776 else
1777 putpkt (own_buf);
1778
1779 response_needed = 0;
1780
1781 if (was_running && (status == 'W' || status == 'X'))
1782 {
1783 was_running = 0;
1784
1785 if (status == 'W')
1786 fprintf (stderr,
1787 "\nChild exited with status %d\n", signal);
1788 if (status == 'X')
1789 fprintf (stderr, "\nChild terminated with signal = 0x%x (%s)\n",
1790 target_signal_to_host (signal),
1791 target_signal_to_name (signal));
1792
1793 if (extended_protocol)
1794 goto restart;
1795 else
1796 {
1797 fprintf (stderr, "GDBserver exiting\n");
1798 exit (0);
1799 }
1800 }
1801
1802 if (status != 'W' && status != 'X')
1803 was_running = 1;
1804 }
1805
1806 /* If an exit was requested (using the "monitor exit" command),
1807 terminate now. The only other way to get here is for
1808 getpkt to fail; close the connection and reopen it at the
1809 top of the loop. */
1810
1811 if (exit_requested)
1812 {
1813 remote_close ();
1814 if (attached && target_running ())
1815 detach_inferior ();
1816 else if (target_running ())
1817 kill_inferior ();
1818 exit (0);
1819 }
1820 else
1821 {
1822 fprintf (stderr, "Remote side has terminated connection. "
1823 "GDBserver will reopen the connection.\n");
1824 remote_close ();
1825 }
1826 }
1827 }
This page took 0.067077 seconds and 4 git commands to generate.