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 Free Software Foundation, Inc.
5 This file is part of GDB.
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.
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.
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/>. */
32 unsigned long cont_thread
;
33 unsigned long general_thread
;
34 unsigned long step_thread
;
35 unsigned long thread_from_wait
;
36 unsigned long old_thread_from_wait
;
37 int extended_protocol
;
40 /* Enable miscellaneous debugging output. The name is historical - it
41 was originally used to debug LinuxThreads support. */
44 int pass_signals
[TARGET_SIGNAL_LAST
];
48 /* The PID of the originally created or attached inferior. Used to
49 send signals to the process when GDB sends us an asynchronous interrupt
50 (user hitting Control-C in the client), and to wait for the child to exit
51 when no longer debugging it. */
53 unsigned long signal_pid
;
56 /* A file descriptor for the controlling terminal. */
59 /* TERMINAL_FD's original foreground group. */
60 pid_t old_foreground_pgrp
;
62 /* Hand back terminal ownership to the original foreground group. */
65 restore_old_foreground_pgrp (void)
67 tcsetpgrp (terminal_fd
, old_foreground_pgrp
);
72 start_inferior (char *argv
[], char *statusptr
)
75 signal (SIGTTOU
, SIG_DFL
);
76 signal (SIGTTIN
, SIG_DFL
);
79 signal_pid
= create_inferior (argv
[0], argv
);
81 /* FIXME: we don't actually know at this point that the create
82 actually succeeded. We won't know that until we wait. */
83 fprintf (stderr
, "Process %s created; pid = %ld\n", argv
[0],
88 signal (SIGTTOU
, SIG_IGN
);
89 signal (SIGTTIN
, SIG_IGN
);
90 terminal_fd
= fileno (stderr
);
91 old_foreground_pgrp
= tcgetpgrp (terminal_fd
);
92 tcsetpgrp (terminal_fd
, signal_pid
);
93 atexit (restore_old_foreground_pgrp
);
96 /* Wait till we are at 1st instruction in program, return signal
97 number (assuming success). */
98 return mywait (statusptr
, 0);
102 attach_inferior (int pid
, char *statusptr
, int *sigptr
)
104 /* myattach should return -1 if attaching is unsupported,
105 0 if it succeeded, and call error() otherwise. */
107 if (myattach (pid
) != 0)
110 fprintf (stderr
, "Attached; pid = %d\n", pid
);
113 /* FIXME - It may be that we should get the SIGNAL_PID from the
114 attach function, so that it can be the main thread instead of
115 whichever we were told to attach to. */
118 *sigptr
= mywait (statusptr
, 0);
120 /* GDB knows to ignore the first SIGSTOP after attaching to a running
121 process using the "attach" command, but this is different; it's
122 just using "target remote". Pretend it's just starting up. */
123 if (*statusptr
== 'T' && *sigptr
== TARGET_SIGNAL_STOP
)
124 *sigptr
= TARGET_SIGNAL_TRAP
;
129 extern int remote_debug
;
131 /* Decode a qXfer read request. Return 0 if everything looks OK,
135 decode_xfer_read (char *buf
, char **annex
, CORE_ADDR
*ofs
, unsigned int *len
)
137 /* Extract and NUL-terminate the annex. */
139 while (*buf
&& *buf
!= ':')
145 /* After the read marker and annex, qXfer looks like a
146 traditional 'm' packet. */
147 decode_m_packet (buf
, ofs
, len
);
152 /* Write the response to a successful qXfer read. Returns the
153 length of the (binary) data stored in BUF, corresponding
154 to as much of DATA/LEN as we could fit. IS_MORE controls
155 the first character of the response. */
157 write_qxfer_response (char *buf
, const void *data
, int len
, int is_more
)
166 return remote_escape_output (data
, len
, (unsigned char *) buf
+ 1, &out_len
,
170 /* Handle all of the extended 'Q' packets. */
172 handle_general_set (char *own_buf
)
174 if (strncmp ("QPassSignals:", own_buf
, strlen ("QPassSignals:")) == 0)
176 int numsigs
= (int) TARGET_SIGNAL_LAST
, i
;
177 const char *p
= own_buf
+ strlen ("QPassSignals:");
180 p
= decode_address_to_semicolon (&cursig
, p
);
181 for (i
= 0; i
< numsigs
; i
++)
187 /* Keep looping, to clear the remaining signals. */
190 p
= decode_address_to_semicolon (&cursig
, p
);
195 strcpy (own_buf
, "OK");
199 /* Otherwise we didn't know what packet it was. Say we didn't
205 get_features_xml (const char *annex
)
207 static int features_supported
= -1;
208 static char *document
;
211 extern const char *const xml_builtin
[][2];
214 /* Look for the annex. */
215 for (i
= 0; xml_builtin
[i
][0] != NULL
; i
++)
216 if (strcmp (annex
, xml_builtin
[i
][0]) == 0)
219 if (xml_builtin
[i
][0] != NULL
)
220 return xml_builtin
[i
][1];
223 if (strcmp (annex
, "target.xml") != 0)
226 if (features_supported
== -1)
228 const char *arch
= NULL
;
229 if (the_target
->arch_string
!= NULL
)
230 arch
= (*the_target
->arch_string
) ();
233 features_supported
= 0;
236 features_supported
= 1;
237 document
= malloc (64 + strlen (arch
));
238 snprintf (document
, 64 + strlen (arch
),
239 "<target><architecture>%s</architecture></target>",
248 monitor_show_help (void)
250 monitor_output ("The following monitor commands are supported:\n");
251 monitor_output (" set debug <0|1>\n");
252 monitor_output (" Enable general debugging messages\n");
253 monitor_output (" set remote-debug <0|1>\n");
254 monitor_output (" Enable remote protocol debugging messages\n");
257 /* Handle all of the extended 'q' packets. */
259 handle_query (char *own_buf
, int packet_len
, int *new_packet_len_p
)
261 static struct inferior_list_entry
*thread_ptr
;
263 /* Reply the current thread id. */
264 if (strcmp ("qC", own_buf
) == 0)
266 thread_ptr
= all_threads
.head
;
267 sprintf (own_buf
, "QC%x",
268 thread_to_gdb_id ((struct thread_info
*)thread_ptr
));
272 if (strcmp ("qSymbol::", own_buf
) == 0)
274 if (the_target
->look_up_symbols
!= NULL
)
275 (*the_target
->look_up_symbols
) ();
277 strcpy (own_buf
, "OK");
281 if (strcmp ("qfThreadInfo", own_buf
) == 0)
283 thread_ptr
= all_threads
.head
;
284 sprintf (own_buf
, "m%x", thread_to_gdb_id ((struct thread_info
*)thread_ptr
));
285 thread_ptr
= thread_ptr
->next
;
289 if (strcmp ("qsThreadInfo", own_buf
) == 0)
291 if (thread_ptr
!= NULL
)
293 sprintf (own_buf
, "m%x", thread_to_gdb_id ((struct thread_info
*)thread_ptr
));
294 thread_ptr
= thread_ptr
->next
;
299 sprintf (own_buf
, "l");
304 if (the_target
->read_offsets
!= NULL
305 && strcmp ("qOffsets", own_buf
) == 0)
307 CORE_ADDR text
, data
;
309 if (the_target
->read_offsets (&text
, &data
))
310 sprintf (own_buf
, "Text=%lX;Data=%lX;Bss=%lX",
311 (long)text
, (long)data
, (long)data
);
318 if (the_target
->qxfer_spu
!= NULL
319 && strncmp ("qXfer:spu:read:", own_buf
, 15) == 0)
325 unsigned char *spu_buf
;
327 strcpy (own_buf
, "E00");
328 if (decode_xfer_read (own_buf
+ 15, &annex
, &ofs
, &len
) < 0)
330 if (len
> PBUFSIZ
- 2)
332 spu_buf
= malloc (len
+ 1);
336 n
= (*the_target
->qxfer_spu
) (annex
, spu_buf
, NULL
, ofs
, len
+ 1);
340 *new_packet_len_p
= write_qxfer_response
341 (own_buf
, spu_buf
, len
, 1);
343 *new_packet_len_p
= write_qxfer_response
344 (own_buf
, spu_buf
, n
, 0);
350 if (the_target
->qxfer_spu
!= NULL
351 && strncmp ("qXfer:spu:write:", own_buf
, 16) == 0)
357 unsigned char *spu_buf
;
359 strcpy (own_buf
, "E00");
360 spu_buf
= malloc (packet_len
- 15);
363 if (decode_xfer_write (own_buf
+ 16, packet_len
- 16, &annex
,
364 &ofs
, &len
, spu_buf
) < 0)
370 n
= (*the_target
->qxfer_spu
)
371 (annex
, NULL
, (unsigned const char *)spu_buf
, ofs
, len
);
375 sprintf (own_buf
, "%x", n
);
381 if (the_target
->read_auxv
!= NULL
382 && strncmp ("qXfer:auxv:read:", own_buf
, 16) == 0)
390 /* Reject any annex; grab the offset and length. */
391 if (decode_xfer_read (own_buf
+ 16, &annex
, &ofs
, &len
) < 0
394 strcpy (own_buf
, "E00");
398 /* Read one extra byte, as an indicator of whether there is
400 if (len
> PBUFSIZ
- 2)
402 data
= malloc (len
+ 1);
403 n
= (*the_target
->read_auxv
) (ofs
, data
, len
+ 1);
407 *new_packet_len_p
= write_qxfer_response (own_buf
, data
, len
, 1);
409 *new_packet_len_p
= write_qxfer_response (own_buf
, data
, n
, 0);
416 if (strncmp ("qXfer:features:read:", own_buf
, 20) == 0)
419 unsigned int len
, total_len
;
420 const char *document
;
423 /* Check for support. */
424 document
= get_features_xml ("target.xml");
425 if (document
== NULL
)
431 /* Grab the annex, offset, and length. */
432 if (decode_xfer_read (own_buf
+ 20, &annex
, &ofs
, &len
) < 0)
434 strcpy (own_buf
, "E00");
438 /* Now grab the correct annex. */
439 document
= get_features_xml (annex
);
440 if (document
== NULL
)
442 strcpy (own_buf
, "E00");
446 total_len
= strlen (document
);
447 if (len
> PBUFSIZ
- 2)
452 else if (len
< total_len
- ofs
)
453 *new_packet_len_p
= write_qxfer_response (own_buf
, document
+ ofs
,
456 *new_packet_len_p
= write_qxfer_response (own_buf
, document
+ ofs
,
462 if (strncmp ("qXfer:libraries:read:", own_buf
, 21) == 0)
465 unsigned int len
, total_len
;
467 struct inferior_list_entry
*dll_ptr
;
470 /* Reject any annex; grab the offset and length. */
471 if (decode_xfer_read (own_buf
+ 21, &annex
, &ofs
, &len
) < 0
474 strcpy (own_buf
, "E00");
478 /* Over-estimate the necessary memory. Assume that every character
479 in the library name must be escaped. */
481 for (dll_ptr
= all_dlls
.head
; dll_ptr
!= NULL
; dll_ptr
= dll_ptr
->next
)
482 total_len
+= 128 + 6 * strlen (((struct dll_info
*) dll_ptr
)->name
);
484 document
= malloc (total_len
);
485 strcpy (document
, "<library-list>\n");
486 p
= document
+ strlen (document
);
488 for (dll_ptr
= all_dlls
.head
; dll_ptr
!= NULL
; dll_ptr
= dll_ptr
->next
)
490 struct dll_info
*dll
= (struct dll_info
*) dll_ptr
;
493 strcpy (p
, " <library name=\"");
495 name
= xml_escape_text (dll
->name
);
499 strcpy (p
, "\"><segment address=\"");
501 sprintf (p
, "0x%lx", (long) dll
->base_addr
);
503 strcpy (p
, "\"/></library>\n");
507 strcpy (p
, "</library-list>\n");
509 total_len
= strlen (document
);
510 if (len
> PBUFSIZ
- 2)
515 else if (len
< total_len
- ofs
)
516 *new_packet_len_p
= write_qxfer_response (own_buf
, document
+ ofs
,
519 *new_packet_len_p
= write_qxfer_response (own_buf
, document
+ ofs
,
526 /* Protocol features query. */
527 if (strncmp ("qSupported", own_buf
, 10) == 0
528 && (own_buf
[10] == ':' || own_buf
[10] == '\0'))
530 sprintf (own_buf
, "PacketSize=%x;QPassSignals+", PBUFSIZ
- 1);
532 /* We do not have any hook to indicate whether the target backend
533 supports qXfer:libraries:read, so always report it. */
534 strcat (own_buf
, ";qXfer:libraries:read+");
536 if (the_target
->read_auxv
!= NULL
)
537 strcat (own_buf
, ";qXfer:auxv:read+");
539 if (the_target
->qxfer_spu
!= NULL
)
540 strcat (own_buf
, ";qXfer:spu:read+;qXfer:spu:write+");
542 if (get_features_xml ("target.xml") != NULL
)
543 strcat (own_buf
, ";qXfer:features:read+");
548 /* Thread-local storage support. */
549 if (the_target
->get_tls_address
!= NULL
550 && strncmp ("qGetTLSAddr:", own_buf
, 12) == 0)
552 char *p
= own_buf
+ 12;
553 CORE_ADDR parts
[3], address
= 0;
556 for (i
= 0; i
< 3; i
++)
564 p2
= strchr (p
, ',');
576 decode_address (&parts
[i
], p
, len
);
580 if (p
!= NULL
|| i
< 3)
584 struct thread_info
*thread
= gdb_id_to_thread (parts
[0]);
589 err
= the_target
->get_tls_address (thread
, parts
[1], parts
[2],
595 sprintf (own_buf
, "%llx", address
);
604 /* Otherwise, pretend we do not understand this packet. */
607 /* Handle "monitor" commands. */
608 if (strncmp ("qRcmd,", own_buf
, 6) == 0)
610 char *mon
= malloc (PBUFSIZ
);
611 int len
= strlen (own_buf
+ 6);
613 if ((len
% 1) != 0 || unhexify (mon
, own_buf
+ 6, len
/ 2) != len
/ 2)
623 if (strcmp (mon
, "set debug 1") == 0)
626 monitor_output ("Debug output enabled.\n");
628 else if (strcmp (mon
, "set debug 0") == 0)
631 monitor_output ("Debug output disabled.\n");
633 else if (strcmp (mon
, "set remote-debug 1") == 0)
636 monitor_output ("Protocol debug output enabled.\n");
638 else if (strcmp (mon
, "set remote-debug 0") == 0)
641 monitor_output ("Protocol debug output disabled.\n");
643 else if (strcmp (mon
, "help") == 0)
644 monitor_show_help ();
647 monitor_output ("Unknown monitor command.\n\n");
648 monitor_show_help ();
656 /* Otherwise we didn't know what packet it was. Say we didn't
661 /* Parse vCont packets. */
663 handle_v_cont (char *own_buf
, char *status
, int *signal
)
667 struct thread_resume
*resume_info
, default_action
;
669 /* Count the number of semicolons in the packet. There should be one
678 /* Allocate room for one extra action, for the default remain-stopped
679 behavior; if no default action is in the list, we'll need the extra
681 resume_info
= malloc ((n
+ 1) * sizeof (resume_info
[0]));
683 default_action
.thread
= -1;
684 default_action
.leave_stopped
= 1;
685 default_action
.step
= 0;
686 default_action
.sig
= 0;
694 resume_info
[i
].leave_stopped
= 0;
696 if (p
[0] == 's' || p
[0] == 'S')
697 resume_info
[i
].step
= 1;
698 else if (p
[0] == 'c' || p
[0] == 'C')
699 resume_info
[i
].step
= 0;
703 if (p
[0] == 'S' || p
[0] == 'C')
706 sig
= strtol (p
+ 1, &q
, 16);
711 if (!target_signal_to_host_p (sig
))
713 resume_info
[i
].sig
= target_signal_to_host (sig
);
717 resume_info
[i
].sig
= 0;
723 resume_info
[i
].thread
= -1;
724 default_action
= resume_info
[i
];
726 /* Note: we don't increment i here, we'll overwrite this entry
727 the next time through. */
729 else if (p
[0] == ':')
731 unsigned int gdb_id
= strtoul (p
+ 1, &q
, 16);
732 unsigned long thread_id
;
737 if (p
[0] != ';' && p
[0] != 0)
740 thread_id
= gdb_id_to_thread_id (gdb_id
);
742 resume_info
[i
].thread
= thread_id
;
750 resume_info
[i
] = default_action
;
752 /* Still used in occasional places in the backend. */
753 if (n
== 1 && resume_info
[0].thread
!= -1)
754 cont_thread
= resume_info
[0].thread
;
757 set_desired_inferior (0);
759 (*the_target
->resume
) (resume_info
);
763 *signal
= mywait (status
, 1);
764 prepare_resume_reply (own_buf
, *status
, *signal
);
773 /* Handle all of the extended 'v' packets. */
775 handle_v_requests (char *own_buf
, char *status
, int *signal
,
776 int packet_len
, int *new_packet_len
)
778 if (strncmp (own_buf
, "vCont;", 6) == 0)
780 handle_v_cont (own_buf
, status
, signal
);
784 if (strncmp (own_buf
, "vCont?", 6) == 0)
786 strcpy (own_buf
, "vCont;c;C;s;S");
790 if (strncmp (own_buf
, "vFile:", 6) == 0
791 && handle_vFile (own_buf
, packet_len
, new_packet_len
))
794 /* Otherwise we didn't know what packet it was. Say we didn't
801 myresume (int step
, int sig
)
803 struct thread_resume resume_info
[2];
806 if (step
|| sig
|| (cont_thread
!= 0 && cont_thread
!= -1))
808 resume_info
[0].thread
809 = ((struct inferior_list_entry
*) current_inferior
)->id
;
810 resume_info
[0].step
= step
;
811 resume_info
[0].sig
= sig
;
812 resume_info
[0].leave_stopped
= 0;
815 resume_info
[n
].thread
= -1;
816 resume_info
[n
].step
= 0;
817 resume_info
[n
].sig
= 0;
818 resume_info
[n
].leave_stopped
= (cont_thread
!= 0 && cont_thread
!= -1);
820 (*the_target
->resume
) (resume_info
);
826 gdbserver_version (void)
828 printf ("GNU gdbserver %s\n"
829 "Copyright (C) 2007 Free Software Foundation, Inc.\n"
830 "gdbserver is free software, covered by the GNU General Public License.\n"
831 "This gdbserver was configured as \"%s\"\n",
836 gdbserver_usage (void)
838 printf ("Usage:\tgdbserver COMM PROG [ARGS ...]\n"
839 "\tgdbserver COMM --attach PID\n"
841 "COMM may either be a tty device (for serial debugging), or \n"
842 "HOST:PORT to listen for a TCP connection.\n");
846 main (int argc
, char *argv
[])
848 char ch
, status
, *own_buf
;
849 unsigned char *mem_buf
;
858 if (argc
>= 2 && strcmp (argv
[1], "--version") == 0)
860 gdbserver_version ();
864 if (argc
>= 2 && strcmp (argv
[1], "--help") == 0)
870 if (setjmp (toplevel
))
872 fprintf (stderr
, "Exiting\n");
879 if (argc
>= 3 && strcmp (argv
[2], "--attach") == 0)
882 && argv
[3][0] != '\0'
883 && (pid
= strtoul (argv
[3], &arg_end
, 10)) != 0
892 if (argc
< 3 || bad_attach
)
900 own_buf
= malloc (PBUFSIZ
+ 1);
901 mem_buf
= malloc (PBUFSIZ
);
905 /* Wait till we are at first instruction in program. */
906 signal
= start_inferior (&argv
[2], &status
);
908 /* We are now (hopefully) stopped at the first instruction of
909 the target process. This assumes that the target process was
910 successfully created. */
912 /* Don't report shared library events on the initial connection,
913 even if some libraries are preloaded. */
918 switch (attach_inferior (pid
, &status
, &signal
))
921 error ("Attaching not supported on this target");
929 if (setjmp (toplevel
))
931 fprintf (stderr
, "Killing inferior\n");
936 if (status
== 'W' || status
== 'X')
938 fprintf (stderr
, "No inferior, GDBserver exiting.\n");
944 remote_open (argv
[1]);
952 int new_packet_len
= -1;
954 packet_len
= getpkt (own_buf
);
963 handle_query (own_buf
, packet_len
, &new_packet_len
);
966 handle_general_set (own_buf
);
969 fprintf (stderr
, "Detaching from inferior\n");
970 if (detach_inferior () != 0)
981 /* If we are attached, then we can exit. Otherwise, we
982 need to hang around doing nothing, until the child
992 extended_protocol
= 1;
993 prepare_resume_reply (own_buf
, status
, signal
);
997 /* We can not use the extended protocol if we are
998 attached, because we can not restart the running
999 program. So return unrecognized. */
1004 prepare_resume_reply (own_buf
, status
, signal
);
1007 if (own_buf
[1] == 'c' || own_buf
[1] == 'g' || own_buf
[1] == 's')
1009 unsigned long gdb_id
, thread_id
;
1011 gdb_id
= strtoul (&own_buf
[2], NULL
, 16);
1012 thread_id
= gdb_id_to_thread_id (gdb_id
);
1015 write_enn (own_buf
);
1019 if (own_buf
[1] == 'g')
1021 general_thread
= thread_id
;
1022 set_desired_inferior (1);
1024 else if (own_buf
[1] == 'c')
1025 cont_thread
= thread_id
;
1026 else if (own_buf
[1] == 's')
1027 step_thread
= thread_id
;
1033 /* Silently ignore it so that gdb can extend the protocol
1034 without compatibility headaches. */
1039 set_desired_inferior (1);
1040 registers_to_string (own_buf
);
1043 set_desired_inferior (1);
1044 registers_from_string (&own_buf
[1]);
1048 decode_m_packet (&own_buf
[1], &mem_addr
, &len
);
1049 if (read_inferior_memory (mem_addr
, mem_buf
, len
) == 0)
1050 convert_int_to_ascii (mem_buf
, own_buf
, len
);
1052 write_enn (own_buf
);
1055 decode_M_packet (&own_buf
[1], &mem_addr
, &len
, mem_buf
);
1056 if (write_inferior_memory (mem_addr
, mem_buf
, len
) == 0)
1059 write_enn (own_buf
);
1062 if (decode_X_packet (&own_buf
[1], packet_len
- 1,
1063 &mem_addr
, &len
, mem_buf
) < 0
1064 || write_inferior_memory (mem_addr
, mem_buf
, len
) != 0)
1065 write_enn (own_buf
);
1070 convert_ascii_to_int (own_buf
+ 1, &sig
, 1);
1071 if (target_signal_to_host_p (sig
))
1072 signal
= target_signal_to_host (sig
);
1075 set_desired_inferior (0);
1076 myresume (0, signal
);
1077 signal
= mywait (&status
, 1);
1078 prepare_resume_reply (own_buf
, status
, signal
);
1081 convert_ascii_to_int (own_buf
+ 1, &sig
, 1);
1082 if (target_signal_to_host_p (sig
))
1083 signal
= target_signal_to_host (sig
);
1086 set_desired_inferior (0);
1087 myresume (1, signal
);
1088 signal
= mywait (&status
, 1);
1089 prepare_resume_reply (own_buf
, status
, signal
);
1092 set_desired_inferior (0);
1094 signal
= mywait (&status
, 1);
1095 prepare_resume_reply (own_buf
, status
, signal
);
1098 set_desired_inferior (0);
1100 signal
= mywait (&status
, 1);
1101 prepare_resume_reply (own_buf
, status
, signal
);
1107 CORE_ADDR addr
= strtoul (&own_buf
[3], &lenptr
, 16);
1108 int len
= strtol (lenptr
+ 1, &dataptr
, 16);
1109 char type
= own_buf
[1];
1111 if (the_target
->insert_watchpoint
== NULL
1112 || (type
< '2' || type
> '4'))
1114 /* No watchpoint support or not a watchpoint command;
1115 unrecognized either way. */
1122 res
= (*the_target
->insert_watchpoint
) (type
, addr
, len
);
1129 write_enn (own_buf
);
1137 CORE_ADDR addr
= strtoul (&own_buf
[3], &lenptr
, 16);
1138 int len
= strtol (lenptr
+ 1, &dataptr
, 16);
1139 char type
= own_buf
[1];
1141 if (the_target
->remove_watchpoint
== NULL
1142 || (type
< '2' || type
> '4'))
1144 /* No watchpoint support or not a watchpoint command;
1145 unrecognized either way. */
1152 res
= (*the_target
->remove_watchpoint
) (type
, addr
, len
);
1159 write_enn (own_buf
);
1164 fprintf (stderr
, "Killing inferior\n");
1166 /* When using the extended protocol, we start up a new
1167 debugging session. The traditional protocol will
1169 if (extended_protocol
)
1172 fprintf (stderr
, "GDBserver restarting\n");
1174 /* Wait till we are at 1st instruction in prog. */
1175 signal
= start_inferior (&argv
[2], &status
);
1186 unsigned long gdb_id
, thread_id
;
1188 gdb_id
= strtoul (&own_buf
[1], NULL
, 16);
1189 thread_id
= gdb_id_to_thread_id (gdb_id
);
1192 write_enn (own_buf
);
1196 if (mythread_alive (thread_id
))
1199 write_enn (own_buf
);
1203 /* Restarting the inferior is only supported in the
1204 extended protocol. */
1205 if (extended_protocol
)
1209 fprintf (stderr
, "GDBserver restarting\n");
1211 /* Wait till we are at 1st instruction in prog. */
1212 signal
= start_inferior (&argv
[2], &status
);
1218 /* It is a request we don't understand. Respond with an
1219 empty packet so that gdb knows that we don't support this
1225 /* Extended (long) request. */
1226 handle_v_requests (own_buf
, &status
, &signal
,
1227 packet_len
, &new_packet_len
);
1231 /* It is a request we don't understand. Respond with an
1232 empty packet so that gdb knows that we don't support this
1238 if (new_packet_len
!= -1)
1239 putpkt_binary (own_buf
, new_packet_len
);
1245 "\nChild exited with status %d\n", signal
);
1247 fprintf (stderr
, "\nChild terminated with signal = 0x%x (%s)\n",
1248 target_signal_to_host (signal
),
1249 target_signal_to_name (signal
));
1250 if (status
== 'W' || status
== 'X')
1252 if (extended_protocol
)
1254 fprintf (stderr
, "Killing inferior\n");
1257 fprintf (stderr
, "GDBserver restarting\n");
1259 /* Wait till we are at 1st instruction in prog. */
1260 signal
= start_inferior (&argv
[2], &status
);
1266 fprintf (stderr
, "GDBserver exiting\n");
1272 /* We come here when getpkt fails.
1274 For the extended remote protocol we exit (and this is the only
1275 way we gracefully exit!).
1277 For the traditional remote protocol close the connection,
1278 and re-open it at the top of the loop. */
1279 if (extended_protocol
)
1286 fprintf (stderr
, "Remote side has terminated connection. "
1287 "GDBserver will reopen the connection.\n");