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 fprintf (stderr
, "Detaching from inferior\n");
810 if (detach_inferior () != 0)
821 /* If we are attached, then we can exit. Otherwise, we
822 need to hang around doing nothing, until the child
832 extended_protocol
= 1;
833 prepare_resume_reply (own_buf
, status
, signal
);
837 /* We can not use the extended protocol if we are
838 attached, because we can not restart the running
839 program. So return unrecognized. */
844 prepare_resume_reply (own_buf
, status
, signal
);
847 if (own_buf
[1] == 'c' || own_buf
[1] == 'g' || own_buf
[1] == 's')
849 unsigned long gdb_id
, thread_id
;
851 gdb_id
= strtoul (&own_buf
[2], NULL
, 16);
852 thread_id
= gdb_id_to_thread_id (gdb_id
);
859 if (own_buf
[1] == 'g')
861 general_thread
= thread_id
;
862 set_desired_inferior (1);
864 else if (own_buf
[1] == 'c')
865 cont_thread
= thread_id
;
866 else if (own_buf
[1] == 's')
867 step_thread
= thread_id
;
873 /* Silently ignore it so that gdb can extend the protocol
874 without compatibility headaches. */
879 set_desired_inferior (1);
880 registers_to_string (own_buf
);
883 set_desired_inferior (1);
884 registers_from_string (&own_buf
[1]);
888 decode_m_packet (&own_buf
[1], &mem_addr
, &len
);
889 if (read_inferior_memory (mem_addr
, mem_buf
, len
) == 0)
890 convert_int_to_ascii (mem_buf
, own_buf
, len
);
895 decode_M_packet (&own_buf
[1], &mem_addr
, &len
, mem_buf
);
896 if (write_inferior_memory (mem_addr
, mem_buf
, len
) == 0)
902 if (decode_X_packet (&own_buf
[1], packet_len
- 1,
903 &mem_addr
, &len
, mem_buf
) < 0
904 || write_inferior_memory (mem_addr
, mem_buf
, len
) != 0)
910 convert_ascii_to_int (own_buf
+ 1, &sig
, 1);
911 if (target_signal_to_host_p (sig
))
912 signal
= target_signal_to_host (sig
);
915 set_desired_inferior (0);
916 myresume (0, signal
);
917 signal
= mywait (&status
, 1);
918 prepare_resume_reply (own_buf
, status
, signal
);
921 convert_ascii_to_int (own_buf
+ 1, &sig
, 1);
922 if (target_signal_to_host_p (sig
))
923 signal
= target_signal_to_host (sig
);
926 set_desired_inferior (0);
927 myresume (1, signal
);
928 signal
= mywait (&status
, 1);
929 prepare_resume_reply (own_buf
, status
, signal
);
932 set_desired_inferior (0);
934 signal
= mywait (&status
, 1);
935 prepare_resume_reply (own_buf
, status
, signal
);
938 set_desired_inferior (0);
940 signal
= mywait (&status
, 1);
941 prepare_resume_reply (own_buf
, status
, signal
);
947 CORE_ADDR addr
= strtoul (&own_buf
[3], &lenptr
, 16);
948 int len
= strtol (lenptr
+ 1, &dataptr
, 16);
949 char type
= own_buf
[1];
951 if (the_target
->insert_watchpoint
== NULL
952 || (type
< '2' || type
> '4'))
954 /* No watchpoint support or not a watchpoint command;
955 unrecognized either way. */
962 res
= (*the_target
->insert_watchpoint
) (type
, addr
, len
);
977 CORE_ADDR addr
= strtoul (&own_buf
[3], &lenptr
, 16);
978 int len
= strtol (lenptr
+ 1, &dataptr
, 16);
979 char type
= own_buf
[1];
981 if (the_target
->remove_watchpoint
== NULL
982 || (type
< '2' || type
> '4'))
984 /* No watchpoint support or not a watchpoint command;
985 unrecognized either way. */
992 res
= (*the_target
->remove_watchpoint
) (type
, addr
, len
);
1004 fprintf (stderr
, "Killing inferior\n");
1006 /* When using the extended protocol, we start up a new
1007 debugging session. The traditional protocol will
1009 if (extended_protocol
)
1012 fprintf (stderr
, "GDBserver restarting\n");
1014 /* Wait till we are at 1st instruction in prog. */
1015 signal
= start_inferior (&argv
[2], &status
);
1026 unsigned long gdb_id
, thread_id
;
1028 gdb_id
= strtoul (&own_buf
[1], NULL
, 16);
1029 thread_id
= gdb_id_to_thread_id (gdb_id
);
1032 write_enn (own_buf
);
1036 if (mythread_alive (thread_id
))
1039 write_enn (own_buf
);
1043 /* Restarting the inferior is only supported in the
1044 extended protocol. */
1045 if (extended_protocol
)
1049 fprintf (stderr
, "GDBserver restarting\n");
1051 /* Wait till we are at 1st instruction in prog. */
1052 signal
= start_inferior (&argv
[2], &status
);
1058 /* It is a request we don't understand. Respond with an
1059 empty packet so that gdb knows that we don't support this
1065 /* Extended (long) request. */
1066 handle_v_requests (own_buf
, &status
, &signal
);
1069 /* It is a request we don't understand. Respond with an
1070 empty packet so that gdb knows that we don't support this
1076 if (new_packet_len
!= -1)
1077 putpkt_binary (own_buf
, new_packet_len
);
1083 "\nChild exited with status %d\n", signal
);
1085 fprintf (stderr
, "\nChild terminated with signal = 0x%x (%s)\n",
1086 target_signal_to_host (signal
),
1087 target_signal_to_name (signal
));
1088 if (status
== 'W' || status
== 'X')
1090 if (extended_protocol
)
1092 fprintf (stderr
, "Killing inferior\n");
1095 fprintf (stderr
, "GDBserver restarting\n");
1097 /* Wait till we are at 1st instruction in prog. */
1098 signal
= start_inferior (&argv
[2], &status
);
1104 fprintf (stderr
, "GDBserver exiting\n");
1110 /* We come here when getpkt fails.
1112 For the extended remote protocol we exit (and this is the only
1113 way we gracefully exit!).
1115 For the traditional remote protocol close the connection,
1116 and re-open it at the top of the loop. */
1117 if (extended_protocol
)
1124 fprintf (stderr
, "Remote side has terminated connection. "
1125 "GDBserver will reopen the connection.\n");