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. */
30 unsigned long cont_thread
;
31 unsigned long general_thread
;
32 unsigned long step_thread
;
33 unsigned long thread_from_wait
;
34 unsigned long old_thread_from_wait
;
35 int extended_protocol
;
38 int pass_signals
[TARGET_SIGNAL_LAST
];
42 /* The PID of the originally created or attached inferior. Used to
43 send signals to the process when GDB sends us an asynchronous interrupt
44 (user hitting Control-C in the client), and to wait for the child to exit
45 when no longer debugging it. */
47 unsigned long signal_pid
;
50 /* A file descriptor for the controlling terminal. */
53 /* TERMINAL_FD's original foreground group. */
54 pid_t old_foreground_pgrp
;
56 /* Hand back terminal ownership to the original foreground group. */
59 restore_old_foreground_pgrp (void)
61 tcsetpgrp (terminal_fd
, old_foreground_pgrp
);
66 start_inferior (char *argv
[], char *statusptr
)
69 signal (SIGTTOU
, SIG_DFL
);
70 signal (SIGTTIN
, SIG_DFL
);
73 signal_pid
= create_inferior (argv
[0], argv
);
75 fprintf (stderr
, "Process %s created; pid = %ld\n", argv
[0],
80 signal (SIGTTOU
, SIG_IGN
);
81 signal (SIGTTIN
, SIG_IGN
);
82 terminal_fd
= fileno (stderr
);
83 old_foreground_pgrp
= tcgetpgrp (terminal_fd
);
84 tcsetpgrp (terminal_fd
, signal_pid
);
85 atexit (restore_old_foreground_pgrp
);
88 /* Wait till we are at 1st instruction in program, return signal number. */
89 return mywait (statusptr
, 0);
93 attach_inferior (int pid
, char *statusptr
, int *sigptr
)
95 /* myattach should return -1 if attaching is unsupported,
96 0 if it succeeded, and call error() otherwise. */
98 if (myattach (pid
) != 0)
101 fprintf (stderr
, "Attached; pid = %d\n", pid
);
104 /* FIXME - It may be that we should get the SIGNAL_PID from the
105 attach function, so that it can be the main thread instead of
106 whichever we were told to attach to. */
109 *sigptr
= mywait (statusptr
, 0);
111 /* GDB knows to ignore the first SIGSTOP after attaching to a running
112 process using the "attach" command, but this is different; it's
113 just using "target remote". Pretend it's just starting up. */
114 if (*statusptr
== 'T' && *sigptr
== TARGET_SIGNAL_STOP
)
115 *sigptr
= TARGET_SIGNAL_TRAP
;
120 extern int remote_debug
;
122 /* Decode a qXfer read request. Return 0 if everything looks OK,
126 decode_xfer_read (char *buf
, char **annex
, CORE_ADDR
*ofs
, unsigned int *len
)
128 /* Extract and NUL-terminate the annex. */
130 while (*buf
&& *buf
!= ':')
136 /* After the read/write marker and annex, qXfer looks like a
137 traditional 'm' packet. */
138 decode_m_packet (buf
, ofs
, len
);
143 /* Write the response to a successful qXfer read. Returns the
144 length of the (binary) data stored in BUF, corresponding
145 to as much of DATA/LEN as we could fit. IS_MORE controls
146 the first character of the response. */
148 write_qxfer_response (char *buf
, const void *data
, int len
, int is_more
)
157 return remote_escape_output (data
, len
, (unsigned char *) buf
+ 1, &out_len
,
161 /* Handle all of the extended 'Q' packets. */
163 handle_general_set (char *own_buf
)
165 if (strncmp ("QPassSignals:", own_buf
, strlen ("QPassSignals:")) == 0)
167 int numsigs
= (int) TARGET_SIGNAL_LAST
, i
;
168 const char *p
= own_buf
+ strlen ("QPassSignals:");
171 p
= decode_address_to_semicolon (&cursig
, p
);
172 for (i
= 0; i
< numsigs
; i
++)
178 /* Keep looping, to clear the remaining signals. */
181 p
= decode_address_to_semicolon (&cursig
, p
);
186 strcpy (own_buf
, "OK");
190 /* Otherwise we didn't know what packet it was. Say we didn't
196 get_features_xml (const char *annex
)
198 static int features_supported
= -1;
199 static char *document
;
202 extern const char *const xml_builtin
[][2];
205 /* Look for the annex. */
206 for (i
= 0; xml_builtin
[i
][0] != NULL
; i
++)
207 if (strcmp (annex
, xml_builtin
[i
][0]) == 0)
210 if (xml_builtin
[i
][0] != NULL
)
211 return xml_builtin
[i
][1];
214 if (strcmp (annex
, "target.xml") != 0)
217 if (features_supported
== -1)
219 const char *arch
= NULL
;
220 if (the_target
->arch_string
!= NULL
)
221 arch
= (*the_target
->arch_string
) ();
224 features_supported
= 0;
227 features_supported
= 1;
228 document
= malloc (64 + strlen (arch
));
229 snprintf (document
, 64 + strlen (arch
),
230 "<target><architecture>%s</architecture></target>",
238 /* Handle all of the extended 'q' packets. */
240 handle_query (char *own_buf
, int *new_packet_len_p
)
242 static struct inferior_list_entry
*thread_ptr
;
244 if (strcmp ("qSymbol::", own_buf
) == 0)
246 if (the_target
->look_up_symbols
!= NULL
)
247 (*the_target
->look_up_symbols
) ();
249 strcpy (own_buf
, "OK");
253 if (strcmp ("qfThreadInfo", own_buf
) == 0)
255 thread_ptr
= all_threads
.head
;
256 sprintf (own_buf
, "m%x", thread_to_gdb_id ((struct thread_info
*)thread_ptr
));
257 thread_ptr
= thread_ptr
->next
;
261 if (strcmp ("qsThreadInfo", own_buf
) == 0)
263 if (thread_ptr
!= NULL
)
265 sprintf (own_buf
, "m%x", thread_to_gdb_id ((struct thread_info
*)thread_ptr
));
266 thread_ptr
= thread_ptr
->next
;
271 sprintf (own_buf
, "l");
276 if (the_target
->read_offsets
!= NULL
277 && strcmp ("qOffsets", own_buf
) == 0)
279 CORE_ADDR text
, data
;
281 if (the_target
->read_offsets (&text
, &data
))
282 sprintf (own_buf
, "Text=%lX;Data=%lX;Bss=%lX",
283 (long)text
, (long)data
, (long)data
);
290 if (the_target
->read_auxv
!= NULL
291 && strncmp ("qXfer:auxv:read:", own_buf
, 16) == 0)
299 /* Reject any annex; grab the offset and length. */
300 if (decode_xfer_read (own_buf
+ 16, &annex
, &ofs
, &len
) < 0
303 strcpy (own_buf
, "E00");
307 /* Read one extra byte, as an indicator of whether there is
309 if (len
> PBUFSIZ
- 2)
311 data
= malloc (len
+ 1);
312 n
= (*the_target
->read_auxv
) (ofs
, data
, len
+ 1);
316 *new_packet_len_p
= write_qxfer_response (own_buf
, data
, len
, 1);
318 *new_packet_len_p
= write_qxfer_response (own_buf
, data
, n
, 0);
325 if (strncmp ("qXfer:features:read:", own_buf
, 20) == 0)
328 unsigned int len
, total_len
;
329 const char *document
;
332 /* Check for support. */
333 document
= get_features_xml ("target.xml");
334 if (document
== NULL
)
340 /* Grab the annex, offset, and length. */
341 if (decode_xfer_read (own_buf
+ 20, &annex
, &ofs
, &len
) < 0)
343 strcpy (own_buf
, "E00");
347 /* Now grab the correct annex. */
348 document
= get_features_xml (annex
);
349 if (document
== NULL
)
351 strcpy (own_buf
, "E00");
355 total_len
= strlen (document
);
356 if (len
> PBUFSIZ
- 2)
361 else if (len
< total_len
- ofs
)
362 *new_packet_len_p
= write_qxfer_response (own_buf
, document
+ ofs
,
365 *new_packet_len_p
= write_qxfer_response (own_buf
, document
+ ofs
,
371 /* Protocol features query. */
372 if (strncmp ("qSupported", own_buf
, 10) == 0
373 && (own_buf
[10] == ':' || own_buf
[10] == '\0'))
375 sprintf (own_buf
, "PacketSize=%x;QPassSignals+", PBUFSIZ
- 1);
377 if (the_target
->read_auxv
!= NULL
)
378 strcat (own_buf
, ";qXfer:auxv:read+");
380 if (get_features_xml ("target.xml") != NULL
)
381 strcat (own_buf
, ";qXfer:features:read+");
386 /* Thread-local storage support. */
387 if (the_target
->get_tls_address
!= NULL
388 && strncmp ("qGetTLSAddr:", own_buf
, 12) == 0)
390 char *p
= own_buf
+ 12;
391 CORE_ADDR parts
[3], address
= 0;
394 for (i
= 0; i
< 3; i
++)
402 p2
= strchr (p
, ',');
414 decode_address (&parts
[i
], p
, len
);
418 if (p
!= NULL
|| i
< 3)
422 struct thread_info
*thread
= gdb_id_to_thread (parts
[0]);
427 err
= the_target
->get_tls_address (thread
, parts
[1], parts
[2],
433 sprintf (own_buf
, "%llx", address
);
442 /* Otherwise, pretend we do not understand this packet. */
445 /* Otherwise we didn't know what packet it was. Say we didn't
450 /* Parse vCont packets. */
452 handle_v_cont (char *own_buf
, char *status
, int *signal
)
456 struct thread_resume
*resume_info
, default_action
;
458 /* Count the number of semicolons in the packet. There should be one
467 /* Allocate room for one extra action, for the default remain-stopped
468 behavior; if no default action is in the list, we'll need the extra
470 resume_info
= malloc ((n
+ 1) * sizeof (resume_info
[0]));
472 default_action
.thread
= -1;
473 default_action
.leave_stopped
= 1;
474 default_action
.step
= 0;
475 default_action
.sig
= 0;
483 resume_info
[i
].leave_stopped
= 0;
485 if (p
[0] == 's' || p
[0] == 'S')
486 resume_info
[i
].step
= 1;
487 else if (p
[0] == 'c' || p
[0] == 'C')
488 resume_info
[i
].step
= 0;
492 if (p
[0] == 'S' || p
[0] == 'C')
495 sig
= strtol (p
+ 1, &q
, 16);
500 if (!target_signal_to_host_p (sig
))
502 resume_info
[i
].sig
= target_signal_to_host (sig
);
506 resume_info
[i
].sig
= 0;
512 resume_info
[i
].thread
= -1;
513 default_action
= resume_info
[i
];
515 /* Note: we don't increment i here, we'll overwrite this entry
516 the next time through. */
518 else if (p
[0] == ':')
520 unsigned int gdb_id
= strtoul (p
+ 1, &q
, 16);
521 unsigned long thread_id
;
526 if (p
[0] != ';' && p
[0] != 0)
529 thread_id
= gdb_id_to_thread_id (gdb_id
);
531 resume_info
[i
].thread
= thread_id
;
539 resume_info
[i
] = default_action
;
541 /* Still used in occasional places in the backend. */
542 if (n
== 1 && resume_info
[0].thread
!= -1)
543 cont_thread
= resume_info
[0].thread
;
546 set_desired_inferior (0);
548 (*the_target
->resume
) (resume_info
);
552 *signal
= mywait (status
, 1);
553 prepare_resume_reply (own_buf
, *status
, *signal
);
557 /* No other way to report an error... */
558 strcpy (own_buf
, "");
563 /* Handle all of the extended 'v' packets. */
565 handle_v_requests (char *own_buf
, char *status
, int *signal
)
567 if (strncmp (own_buf
, "vCont;", 6) == 0)
569 handle_v_cont (own_buf
, status
, signal
);
573 if (strncmp (own_buf
, "vCont?", 6) == 0)
575 strcpy (own_buf
, "vCont;c;C;s;S");
579 /* Otherwise we didn't know what packet it was. Say we didn't
586 myresume (int step
, int sig
)
588 struct thread_resume resume_info
[2];
591 if (step
|| sig
|| (cont_thread
!= 0 && cont_thread
!= -1))
593 resume_info
[0].thread
594 = ((struct inferior_list_entry
*) current_inferior
)->id
;
595 resume_info
[0].step
= step
;
596 resume_info
[0].sig
= sig
;
597 resume_info
[0].leave_stopped
= 0;
600 resume_info
[n
].thread
= -1;
601 resume_info
[n
].step
= 0;
602 resume_info
[n
].sig
= 0;
603 resume_info
[n
].leave_stopped
= (cont_thread
!= 0 && cont_thread
!= -1);
605 (*the_target
->resume
) (resume_info
);
611 gdbserver_version (void)
613 printf ("GNU gdbserver %s\n"
614 "Copyright (C) 2006 Free Software Foundation, Inc.\n"
615 "gdbserver is free software, covered by the GNU General Public License.\n"
616 "This gdbserver was configured as \"%s\"\n",
621 gdbserver_usage (void)
623 printf ("Usage:\tgdbserver COMM PROG [ARGS ...]\n"
624 "\tgdbserver COMM --attach PID\n"
626 "COMM may either be a tty device (for serial debugging), or \n"
627 "HOST:PORT to listen for a TCP connection.\n");
631 main (int argc
, char *argv
[])
633 char ch
, status
, *own_buf
;
634 unsigned char *mem_buf
;
643 if (argc
>= 2 && strcmp (argv
[1], "--version") == 0)
645 gdbserver_version ();
649 if (argc
>= 2 && strcmp (argv
[1], "--help") == 0)
655 if (setjmp (toplevel
))
657 fprintf (stderr
, "Exiting\n");
664 if (argc
>= 3 && strcmp (argv
[2], "--attach") == 0)
668 && (pid
= strtoul (argv
[3], &arg_end
, 10)) != 0
677 if (argc
< 3 || bad_attach
)
685 own_buf
= malloc (PBUFSIZ
);
686 mem_buf
= malloc (PBUFSIZ
);
690 /* Wait till we are at first instruction in program. */
691 signal
= start_inferior (&argv
[2], &status
);
693 /* We are now stopped at the first instruction of the target process */
697 switch (attach_inferior (pid
, &status
, &signal
))
700 error ("Attaching not supported on this target");
708 if (setjmp (toplevel
))
710 fprintf (stderr
, "Killing inferior\n");
717 remote_open (argv
[1]);
725 int new_packet_len
= -1;
727 packet_len
= getpkt (own_buf
);
736 handle_query (own_buf
, &new_packet_len
);
739 handle_general_set (own_buf
);
742 remote_debug
= !remote_debug
;
745 /* Skip "detach" support on mingw32, since we don't have
748 fprintf (stderr
, "Detaching from inferior\n");
754 /* If we are attached, then we can exit. Otherwise, we need to
755 hang around doing nothing, until the child is gone. */
761 ret
= waitpid (signal_pid
, &status
, 0);
762 if (WIFEXITED (status
) || WIFSIGNALED (status
))
764 } while (ret
!= -1 || errno
!= ECHILD
);
773 extended_protocol
= 1;
774 prepare_resume_reply (own_buf
, status
, signal
);
778 /* We can not use the extended protocol if we are
779 attached, because we can not restart the running
780 program. So return unrecognized. */
785 prepare_resume_reply (own_buf
, status
, signal
);
788 if (own_buf
[1] == 'c' || own_buf
[1] == 'g' || own_buf
[1] == 's')
790 unsigned long gdb_id
, thread_id
;
792 gdb_id
= strtoul (&own_buf
[2], NULL
, 16);
793 thread_id
= gdb_id_to_thread_id (gdb_id
);
800 if (own_buf
[1] == 'g')
802 general_thread
= thread_id
;
803 set_desired_inferior (1);
805 else if (own_buf
[1] == 'c')
806 cont_thread
= thread_id
;
807 else if (own_buf
[1] == 's')
808 step_thread
= thread_id
;
814 /* Silently ignore it so that gdb can extend the protocol
815 without compatibility headaches. */
820 set_desired_inferior (1);
821 registers_to_string (own_buf
);
824 set_desired_inferior (1);
825 registers_from_string (&own_buf
[1]);
829 decode_m_packet (&own_buf
[1], &mem_addr
, &len
);
830 if (read_inferior_memory (mem_addr
, mem_buf
, len
) == 0)
831 convert_int_to_ascii (mem_buf
, own_buf
, len
);
836 decode_M_packet (&own_buf
[1], &mem_addr
, &len
, mem_buf
);
837 if (write_inferior_memory (mem_addr
, mem_buf
, len
) == 0)
843 if (decode_X_packet (&own_buf
[1], packet_len
- 1,
844 &mem_addr
, &len
, mem_buf
) < 0
845 || write_inferior_memory (mem_addr
, mem_buf
, len
) != 0)
851 convert_ascii_to_int (own_buf
+ 1, &sig
, 1);
852 if (target_signal_to_host_p (sig
))
853 signal
= target_signal_to_host (sig
);
856 set_desired_inferior (0);
857 myresume (0, signal
);
858 signal
= mywait (&status
, 1);
859 prepare_resume_reply (own_buf
, status
, signal
);
862 convert_ascii_to_int (own_buf
+ 1, &sig
, 1);
863 if (target_signal_to_host_p (sig
))
864 signal
= target_signal_to_host (sig
);
867 set_desired_inferior (0);
868 myresume (1, signal
);
869 signal
= mywait (&status
, 1);
870 prepare_resume_reply (own_buf
, status
, signal
);
873 set_desired_inferior (0);
875 signal
= mywait (&status
, 1);
876 prepare_resume_reply (own_buf
, status
, signal
);
879 set_desired_inferior (0);
881 signal
= mywait (&status
, 1);
882 prepare_resume_reply (own_buf
, status
, signal
);
888 CORE_ADDR addr
= strtoul (&own_buf
[3], &lenptr
, 16);
889 int len
= strtol (lenptr
+ 1, &dataptr
, 16);
890 char type
= own_buf
[1];
892 if (the_target
->insert_watchpoint
== NULL
893 || (type
< '2' || type
> '4'))
895 /* No watchpoint support or not a watchpoint command;
896 unrecognized either way. */
903 res
= (*the_target
->insert_watchpoint
) (type
, addr
, len
);
918 CORE_ADDR addr
= strtoul (&own_buf
[3], &lenptr
, 16);
919 int len
= strtol (lenptr
+ 1, &dataptr
, 16);
920 char type
= own_buf
[1];
922 if (the_target
->remove_watchpoint
== NULL
923 || (type
< '2' || type
> '4'))
925 /* No watchpoint support or not a watchpoint command;
926 unrecognized either way. */
933 res
= (*the_target
->remove_watchpoint
) (type
, addr
, len
);
945 fprintf (stderr
, "Killing inferior\n");
947 /* When using the extended protocol, we start up a new
948 debugging session. The traditional protocol will
950 if (extended_protocol
)
953 fprintf (stderr
, "GDBserver restarting\n");
955 /* Wait till we are at 1st instruction in prog. */
956 signal
= start_inferior (&argv
[2], &status
);
967 unsigned long gdb_id
, thread_id
;
969 gdb_id
= strtoul (&own_buf
[1], NULL
, 16);
970 thread_id
= gdb_id_to_thread_id (gdb_id
);
977 if (mythread_alive (thread_id
))
984 /* Restarting the inferior is only supported in the
985 extended protocol. */
986 if (extended_protocol
)
990 fprintf (stderr
, "GDBserver restarting\n");
992 /* Wait till we are at 1st instruction in prog. */
993 signal
= start_inferior (&argv
[2], &status
);
999 /* It is a request we don't understand. Respond with an
1000 empty packet so that gdb knows that we don't support this
1006 /* Extended (long) request. */
1007 handle_v_requests (own_buf
, &status
, &signal
);
1010 /* It is a request we don't understand. Respond with an
1011 empty packet so that gdb knows that we don't support this
1017 if (new_packet_len
!= -1)
1018 putpkt_binary (own_buf
, new_packet_len
);
1024 "\nChild exited with status %d\n", signal
);
1026 fprintf (stderr
, "\nChild terminated with signal = 0x%x (%s)\n",
1027 target_signal_to_host (signal
),
1028 target_signal_to_name (signal
));
1029 if (status
== 'W' || status
== 'X')
1031 if (extended_protocol
)
1033 fprintf (stderr
, "Killing inferior\n");
1036 fprintf (stderr
, "GDBserver restarting\n");
1038 /* Wait till we are at 1st instruction in prog. */
1039 signal
= start_inferior (&argv
[2], &status
);
1045 fprintf (stderr
, "GDBserver exiting\n");
1051 /* We come here when getpkt fails.
1053 For the extended remote protocol we exit (and this is the only
1054 way we gracefully exit!).
1056 For the traditional remote protocol close the connection,
1057 and re-open it at the top of the loop. */
1058 if (extended_protocol
)
1065 fprintf (stderr
, "Remote side has terminated connection. "
1066 "GDBserver will reopen the connection.\n");