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 2 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, write to the Free Software
19 Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 Boston, MA 02110-1301, USA. */
34 unsigned long cont_thread
;
35 unsigned long general_thread
;
36 unsigned long step_thread
;
37 unsigned long thread_from_wait
;
38 unsigned long old_thread_from_wait
;
39 int extended_protocol
;
42 /* Enable miscellaneous debugging output. The name is historical - it
43 was originally used to debug LinuxThreads support. */
46 int pass_signals
[TARGET_SIGNAL_LAST
];
50 /* The PID of the originally created or attached inferior. Used to
51 send signals to the process when GDB sends us an asynchronous interrupt
52 (user hitting Control-C in the client), and to wait for the child to exit
53 when no longer debugging it. */
55 unsigned long signal_pid
;
58 /* A file descriptor for the controlling terminal. */
61 /* TERMINAL_FD's original foreground group. */
62 pid_t old_foreground_pgrp
;
64 /* Hand back terminal ownership to the original foreground group. */
67 restore_old_foreground_pgrp (void)
69 tcsetpgrp (terminal_fd
, old_foreground_pgrp
);
74 start_inferior (char *argv
[], char *statusptr
)
77 signal (SIGTTOU
, SIG_DFL
);
78 signal (SIGTTIN
, SIG_DFL
);
81 signal_pid
= create_inferior (argv
[0], argv
);
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 number. */
97 return mywait (statusptr
, 0);
101 attach_inferior (int pid
, char *statusptr
, int *sigptr
)
103 /* myattach should return -1 if attaching is unsupported,
104 0 if it succeeded, and call error() otherwise. */
106 if (myattach (pid
) != 0)
109 fprintf (stderr
, "Attached; pid = %d\n", pid
);
112 /* FIXME - It may be that we should get the SIGNAL_PID from the
113 attach function, so that it can be the main thread instead of
114 whichever we were told to attach to. */
117 *sigptr
= mywait (statusptr
, 0);
119 /* GDB knows to ignore the first SIGSTOP after attaching to a running
120 process using the "attach" command, but this is different; it's
121 just using "target remote". Pretend it's just starting up. */
122 if (*statusptr
== 'T' && *sigptr
== TARGET_SIGNAL_STOP
)
123 *sigptr
= TARGET_SIGNAL_TRAP
;
128 extern int remote_debug
;
130 /* Decode a qXfer read request. Return 0 if everything looks OK,
134 decode_xfer_read (char *buf
, char **annex
, CORE_ADDR
*ofs
, unsigned int *len
)
136 /* Extract and NUL-terminate the annex. */
138 while (*buf
&& *buf
!= ':')
144 /* After the read/write marker and annex, qXfer looks like a
145 traditional 'm' packet. */
146 decode_m_packet (buf
, ofs
, len
);
151 /* Write the response to a successful qXfer read. Returns the
152 length of the (binary) data stored in BUF, corresponding
153 to as much of DATA/LEN as we could fit. IS_MORE controls
154 the first character of the response. */
156 write_qxfer_response (char *buf
, const void *data
, int len
, int is_more
)
165 return remote_escape_output (data
, len
, (unsigned char *) buf
+ 1, &out_len
,
169 /* Handle all of the extended 'Q' packets. */
171 handle_general_set (char *own_buf
)
173 if (strncmp ("QPassSignals:", own_buf
, strlen ("QPassSignals:")) == 0)
175 int numsigs
= (int) TARGET_SIGNAL_LAST
, i
;
176 const char *p
= own_buf
+ strlen ("QPassSignals:");
179 p
= decode_address_to_semicolon (&cursig
, p
);
180 for (i
= 0; i
< numsigs
; i
++)
186 /* Keep looping, to clear the remaining signals. */
189 p
= decode_address_to_semicolon (&cursig
, p
);
194 strcpy (own_buf
, "OK");
198 /* Otherwise we didn't know what packet it was. Say we didn't
204 get_features_xml (const char *annex
)
206 static int features_supported
= -1;
207 static char *document
;
210 extern const char *const xml_builtin
[][2];
213 /* Look for the annex. */
214 for (i
= 0; xml_builtin
[i
][0] != NULL
; i
++)
215 if (strcmp (annex
, xml_builtin
[i
][0]) == 0)
218 if (xml_builtin
[i
][0] != NULL
)
219 return xml_builtin
[i
][1];
222 if (strcmp (annex
, "target.xml") != 0)
225 if (features_supported
== -1)
227 const char *arch
= NULL
;
228 if (the_target
->arch_string
!= NULL
)
229 arch
= (*the_target
->arch_string
) ();
232 features_supported
= 0;
235 features_supported
= 1;
236 document
= malloc (64 + strlen (arch
));
237 snprintf (document
, 64 + strlen (arch
),
238 "<target><architecture>%s</architecture></target>",
247 monitor_show_help (void)
249 monitor_output ("The following monitor commands are supported:\n");
250 monitor_output (" set debug <0|1>\n");
251 monitor_output (" Enable general debugging messages\n");
252 monitor_output (" set remote-debug <0|1>\n");
253 monitor_output (" Enable remote protocol debugging messages\n");
256 /* Handle all of the extended 'q' packets. */
258 handle_query (char *own_buf
, int *new_packet_len_p
)
260 static struct inferior_list_entry
*thread_ptr
;
262 if (strcmp ("qSymbol::", own_buf
) == 0)
264 if (the_target
->look_up_symbols
!= NULL
)
265 (*the_target
->look_up_symbols
) ();
267 strcpy (own_buf
, "OK");
271 if (strcmp ("qfThreadInfo", own_buf
) == 0)
273 thread_ptr
= all_threads
.head
;
274 sprintf (own_buf
, "m%x", thread_to_gdb_id ((struct thread_info
*)thread_ptr
));
275 thread_ptr
= thread_ptr
->next
;
279 if (strcmp ("qsThreadInfo", own_buf
) == 0)
281 if (thread_ptr
!= NULL
)
283 sprintf (own_buf
, "m%x", thread_to_gdb_id ((struct thread_info
*)thread_ptr
));
284 thread_ptr
= thread_ptr
->next
;
289 sprintf (own_buf
, "l");
294 if (the_target
->read_offsets
!= NULL
295 && strcmp ("qOffsets", own_buf
) == 0)
297 CORE_ADDR text
, data
;
299 if (the_target
->read_offsets (&text
, &data
))
300 sprintf (own_buf
, "Text=%lX;Data=%lX;Bss=%lX",
301 (long)text
, (long)data
, (long)data
);
308 if (the_target
->read_auxv
!= NULL
309 && strncmp ("qXfer:auxv:read:", own_buf
, 16) == 0)
317 /* Reject any annex; grab the offset and length. */
318 if (decode_xfer_read (own_buf
+ 16, &annex
, &ofs
, &len
) < 0
321 strcpy (own_buf
, "E00");
325 /* Read one extra byte, as an indicator of whether there is
327 if (len
> PBUFSIZ
- 2)
329 data
= malloc (len
+ 1);
330 n
= (*the_target
->read_auxv
) (ofs
, data
, len
+ 1);
334 *new_packet_len_p
= write_qxfer_response (own_buf
, data
, len
, 1);
336 *new_packet_len_p
= write_qxfer_response (own_buf
, data
, n
, 0);
343 if (strncmp ("qXfer:features:read:", own_buf
, 20) == 0)
346 unsigned int len
, total_len
;
347 const char *document
;
350 /* Check for support. */
351 document
= get_features_xml ("target.xml");
352 if (document
== NULL
)
358 /* Grab the annex, offset, and length. */
359 if (decode_xfer_read (own_buf
+ 20, &annex
, &ofs
, &len
) < 0)
361 strcpy (own_buf
, "E00");
365 /* Now grab the correct annex. */
366 document
= get_features_xml (annex
);
367 if (document
== NULL
)
369 strcpy (own_buf
, "E00");
373 total_len
= strlen (document
);
374 if (len
> PBUFSIZ
- 2)
379 else if (len
< total_len
- ofs
)
380 *new_packet_len_p
= write_qxfer_response (own_buf
, document
+ ofs
,
383 *new_packet_len_p
= write_qxfer_response (own_buf
, document
+ ofs
,
389 /* Protocol features query. */
390 if (strncmp ("qSupported", own_buf
, 10) == 0
391 && (own_buf
[10] == ':' || own_buf
[10] == '\0'))
393 sprintf (own_buf
, "PacketSize=%x;QPassSignals+", PBUFSIZ
- 1);
395 if (the_target
->read_auxv
!= NULL
)
396 strcat (own_buf
, ";qXfer:auxv:read+");
398 if (get_features_xml ("target.xml") != NULL
)
399 strcat (own_buf
, ";qXfer:features:read+");
404 /* Thread-local storage support. */
405 if (the_target
->get_tls_address
!= NULL
406 && strncmp ("qGetTLSAddr:", own_buf
, 12) == 0)
408 char *p
= own_buf
+ 12;
409 CORE_ADDR parts
[3], address
= 0;
412 for (i
= 0; i
< 3; i
++)
420 p2
= strchr (p
, ',');
432 decode_address (&parts
[i
], p
, len
);
436 if (p
!= NULL
|| i
< 3)
440 struct thread_info
*thread
= gdb_id_to_thread (parts
[0]);
445 err
= the_target
->get_tls_address (thread
, parts
[1], parts
[2],
451 sprintf (own_buf
, "%llx", address
);
460 /* Otherwise, pretend we do not understand this packet. */
463 /* Handle "monitor" commands. */
464 if (strncmp ("qRcmd,", own_buf
, 6) == 0)
466 char *mon
= malloc (PBUFSIZ
);
467 int len
= strlen (own_buf
+ 6);
469 if ((len
% 1) != 0 || unhexify (mon
, own_buf
+ 6, len
/ 2) != len
/ 2)
479 if (strcmp (mon
, "set debug 1") == 0)
482 monitor_output ("Debug output enabled.\n");
484 else if (strcmp (mon
, "set debug 0") == 0)
487 monitor_output ("Debug output disabled.\n");
489 else if (strcmp (mon
, "set remote-debug 1") == 0)
492 monitor_output ("Protocol debug output enabled.\n");
494 else if (strcmp (mon
, "set remote-debug 0") == 0)
497 monitor_output ("Protocol debug output disabled.\n");
499 else if (strcmp (mon
, "help") == 0)
500 monitor_show_help ();
503 monitor_output ("Unknown monitor command.\n\n");
504 monitor_show_help ();
512 /* Otherwise we didn't know what packet it was. Say we didn't
517 /* Parse vCont packets. */
519 handle_v_cont (char *own_buf
, char *status
, int *signal
)
523 struct thread_resume
*resume_info
, default_action
;
525 /* Count the number of semicolons in the packet. There should be one
534 /* Allocate room for one extra action, for the default remain-stopped
535 behavior; if no default action is in the list, we'll need the extra
537 resume_info
= malloc ((n
+ 1) * sizeof (resume_info
[0]));
539 default_action
.thread
= -1;
540 default_action
.leave_stopped
= 1;
541 default_action
.step
= 0;
542 default_action
.sig
= 0;
550 resume_info
[i
].leave_stopped
= 0;
552 if (p
[0] == 's' || p
[0] == 'S')
553 resume_info
[i
].step
= 1;
554 else if (p
[0] == 'c' || p
[0] == 'C')
555 resume_info
[i
].step
= 0;
559 if (p
[0] == 'S' || p
[0] == 'C')
562 sig
= strtol (p
+ 1, &q
, 16);
567 if (!target_signal_to_host_p (sig
))
569 resume_info
[i
].sig
= target_signal_to_host (sig
);
573 resume_info
[i
].sig
= 0;
579 resume_info
[i
].thread
= -1;
580 default_action
= resume_info
[i
];
582 /* Note: we don't increment i here, we'll overwrite this entry
583 the next time through. */
585 else if (p
[0] == ':')
587 unsigned int gdb_id
= strtoul (p
+ 1, &q
, 16);
588 unsigned long thread_id
;
593 if (p
[0] != ';' && p
[0] != 0)
596 thread_id
= gdb_id_to_thread_id (gdb_id
);
598 resume_info
[i
].thread
= thread_id
;
606 resume_info
[i
] = default_action
;
608 /* Still used in occasional places in the backend. */
609 if (n
== 1 && resume_info
[0].thread
!= -1)
610 cont_thread
= resume_info
[0].thread
;
613 set_desired_inferior (0);
615 (*the_target
->resume
) (resume_info
);
619 *signal
= mywait (status
, 1);
620 prepare_resume_reply (own_buf
, *status
, *signal
);
624 /* No other way to report an error... */
625 strcpy (own_buf
, "");
630 /* Handle all of the extended 'v' packets. */
632 handle_v_requests (char *own_buf
, char *status
, int *signal
)
634 if (strncmp (own_buf
, "vCont;", 6) == 0)
636 handle_v_cont (own_buf
, status
, signal
);
640 if (strncmp (own_buf
, "vCont?", 6) == 0)
642 strcpy (own_buf
, "vCont;c;C;s;S");
646 /* Otherwise we didn't know what packet it was. Say we didn't
653 myresume (int step
, int sig
)
655 struct thread_resume resume_info
[2];
658 if (step
|| sig
|| (cont_thread
!= 0 && cont_thread
!= -1))
660 resume_info
[0].thread
661 = ((struct inferior_list_entry
*) current_inferior
)->id
;
662 resume_info
[0].step
= step
;
663 resume_info
[0].sig
= sig
;
664 resume_info
[0].leave_stopped
= 0;
667 resume_info
[n
].thread
= -1;
668 resume_info
[n
].step
= 0;
669 resume_info
[n
].sig
= 0;
670 resume_info
[n
].leave_stopped
= (cont_thread
!= 0 && cont_thread
!= -1);
672 (*the_target
->resume
) (resume_info
);
678 gdbserver_version (void)
680 printf ("GNU gdbserver %s\n"
681 "Copyright (C) 2006 Free Software Foundation, Inc.\n"
682 "gdbserver is free software, covered by the GNU General Public License.\n"
683 "This gdbserver was configured as \"%s\"\n",
688 gdbserver_usage (void)
690 printf ("Usage:\tgdbserver COMM PROG [ARGS ...]\n"
691 "\tgdbserver COMM --attach PID\n"
693 "COMM may either be a tty device (for serial debugging), or \n"
694 "HOST:PORT to listen for a TCP connection.\n");
698 main (int argc
, char *argv
[])
700 char ch
, status
, *own_buf
;
701 unsigned char *mem_buf
;
710 if (argc
>= 2 && strcmp (argv
[1], "--version") == 0)
712 gdbserver_version ();
716 if (argc
>= 2 && strcmp (argv
[1], "--help") == 0)
722 if (setjmp (toplevel
))
724 fprintf (stderr
, "Exiting\n");
731 if (argc
>= 3 && strcmp (argv
[2], "--attach") == 0)
734 && argv
[3][0] != '\0'
735 && (pid
= strtoul (argv
[3], &arg_end
, 10)) != 0
744 if (argc
< 3 || bad_attach
)
752 own_buf
= malloc (PBUFSIZ
);
753 mem_buf
= malloc (PBUFSIZ
);
757 /* Wait till we are at first instruction in program. */
758 signal
= start_inferior (&argv
[2], &status
);
760 /* We are now stopped at the first instruction of the target process */
764 switch (attach_inferior (pid
, &status
, &signal
))
767 error ("Attaching not supported on this target");
775 if (setjmp (toplevel
))
777 fprintf (stderr
, "Killing inferior\n");
784 remote_open (argv
[1]);
792 int new_packet_len
= -1;
794 packet_len
= getpkt (own_buf
);
803 handle_query (own_buf
, &new_packet_len
);
806 handle_general_set (own_buf
);
809 /* Skip "detach" support on mingw32, since we don't have
812 fprintf (stderr
, "Detaching from inferior\n");
818 /* If we are attached, then we can exit. Otherwise, we need to
819 hang around doing nothing, until the child is gone. */
825 ret
= waitpid (signal_pid
, &status
, 0);
826 if (WIFEXITED (status
) || WIFSIGNALED (status
))
828 } while (ret
!= -1 || errno
!= ECHILD
);
837 extended_protocol
= 1;
838 prepare_resume_reply (own_buf
, status
, signal
);
842 /* We can not use the extended protocol if we are
843 attached, because we can not restart the running
844 program. So return unrecognized. */
849 prepare_resume_reply (own_buf
, status
, signal
);
852 if (own_buf
[1] == 'c' || own_buf
[1] == 'g' || own_buf
[1] == 's')
854 unsigned long gdb_id
, thread_id
;
856 gdb_id
= strtoul (&own_buf
[2], NULL
, 16);
857 thread_id
= gdb_id_to_thread_id (gdb_id
);
864 if (own_buf
[1] == 'g')
866 general_thread
= thread_id
;
867 set_desired_inferior (1);
869 else if (own_buf
[1] == 'c')
870 cont_thread
= thread_id
;
871 else if (own_buf
[1] == 's')
872 step_thread
= thread_id
;
878 /* Silently ignore it so that gdb can extend the protocol
879 without compatibility headaches. */
884 set_desired_inferior (1);
885 registers_to_string (own_buf
);
888 set_desired_inferior (1);
889 registers_from_string (&own_buf
[1]);
893 decode_m_packet (&own_buf
[1], &mem_addr
, &len
);
894 if (read_inferior_memory (mem_addr
, mem_buf
, len
) == 0)
895 convert_int_to_ascii (mem_buf
, own_buf
, len
);
900 decode_M_packet (&own_buf
[1], &mem_addr
, &len
, mem_buf
);
901 if (write_inferior_memory (mem_addr
, mem_buf
, len
) == 0)
907 if (decode_X_packet (&own_buf
[1], packet_len
- 1,
908 &mem_addr
, &len
, mem_buf
) < 0
909 || write_inferior_memory (mem_addr
, mem_buf
, len
) != 0)
915 convert_ascii_to_int (own_buf
+ 1, &sig
, 1);
916 if (target_signal_to_host_p (sig
))
917 signal
= target_signal_to_host (sig
);
920 set_desired_inferior (0);
921 myresume (0, signal
);
922 signal
= mywait (&status
, 1);
923 prepare_resume_reply (own_buf
, status
, signal
);
926 convert_ascii_to_int (own_buf
+ 1, &sig
, 1);
927 if (target_signal_to_host_p (sig
))
928 signal
= target_signal_to_host (sig
);
931 set_desired_inferior (0);
932 myresume (1, signal
);
933 signal
= mywait (&status
, 1);
934 prepare_resume_reply (own_buf
, status
, signal
);
937 set_desired_inferior (0);
939 signal
= mywait (&status
, 1);
940 prepare_resume_reply (own_buf
, status
, signal
);
943 set_desired_inferior (0);
945 signal
= mywait (&status
, 1);
946 prepare_resume_reply (own_buf
, status
, signal
);
952 CORE_ADDR addr
= strtoul (&own_buf
[3], &lenptr
, 16);
953 int len
= strtol (lenptr
+ 1, &dataptr
, 16);
954 char type
= own_buf
[1];
956 if (the_target
->insert_watchpoint
== NULL
957 || (type
< '2' || type
> '4'))
959 /* No watchpoint support or not a watchpoint command;
960 unrecognized either way. */
967 res
= (*the_target
->insert_watchpoint
) (type
, addr
, len
);
982 CORE_ADDR addr
= strtoul (&own_buf
[3], &lenptr
, 16);
983 int len
= strtol (lenptr
+ 1, &dataptr
, 16);
984 char type
= own_buf
[1];
986 if (the_target
->remove_watchpoint
== NULL
987 || (type
< '2' || type
> '4'))
989 /* No watchpoint support or not a watchpoint command;
990 unrecognized either way. */
997 res
= (*the_target
->remove_watchpoint
) (type
, addr
, len
);
1004 write_enn (own_buf
);
1009 fprintf (stderr
, "Killing inferior\n");
1011 /* When using the extended protocol, we start up a new
1012 debugging session. The traditional protocol will
1014 if (extended_protocol
)
1017 fprintf (stderr
, "GDBserver restarting\n");
1019 /* Wait till we are at 1st instruction in prog. */
1020 signal
= start_inferior (&argv
[2], &status
);
1031 unsigned long gdb_id
, thread_id
;
1033 gdb_id
= strtoul (&own_buf
[1], NULL
, 16);
1034 thread_id
= gdb_id_to_thread_id (gdb_id
);
1037 write_enn (own_buf
);
1041 if (mythread_alive (thread_id
))
1044 write_enn (own_buf
);
1048 /* Restarting the inferior is only supported in the
1049 extended protocol. */
1050 if (extended_protocol
)
1054 fprintf (stderr
, "GDBserver restarting\n");
1056 /* Wait till we are at 1st instruction in prog. */
1057 signal
= start_inferior (&argv
[2], &status
);
1063 /* It is a request we don't understand. Respond with an
1064 empty packet so that gdb knows that we don't support this
1070 /* Extended (long) request. */
1071 handle_v_requests (own_buf
, &status
, &signal
);
1074 /* It is a request we don't understand. Respond with an
1075 empty packet so that gdb knows that we don't support this
1081 if (new_packet_len
!= -1)
1082 putpkt_binary (own_buf
, new_packet_len
);
1088 "\nChild exited with status %d\n", signal
);
1090 fprintf (stderr
, "\nChild terminated with signal = 0x%x (%s)\n",
1091 target_signal_to_host (signal
),
1092 target_signal_to_name (signal
));
1093 if (status
== 'W' || status
== 'X')
1095 if (extended_protocol
)
1097 fprintf (stderr
, "Killing inferior\n");
1100 fprintf (stderr
, "GDBserver restarting\n");
1102 /* Wait till we are at 1st instruction in prog. */
1103 signal
= start_inferior (&argv
[2], &status
);
1109 fprintf (stderr
, "GDBserver exiting\n");
1115 /* We come here when getpkt fails.
1117 For the extended remote protocol we exit (and this is the only
1118 way we gracefully exit!).
1120 For the traditional remote protocol close the connection,
1121 and re-open it at the top of the loop. */
1122 if (extended_protocol
)
1129 fprintf (stderr
, "Remote side has terminated connection. "
1130 "GDBserver will reopen the connection.\n");