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 = (*the_target->arch_string) ();
222 features_supported = 0;
225 features_supported = 1;
226 document = malloc (64 + strlen (arch));
227 snprintf (document, 64 + strlen (arch),
228 "<target><architecture>%s</architecture></target>",
236 /* Handle all of the extended 'q' packets. */
238 handle_query (char *own_buf, int *new_packet_len_p)
240 static struct inferior_list_entry *thread_ptr;
242 if (strcmp ("qSymbol::", own_buf) == 0)
244 if (the_target->look_up_symbols != NULL)
245 (*the_target->look_up_symbols) ();
247 strcpy (own_buf, "OK");
251 if (strcmp ("qfThreadInfo", own_buf) == 0)
253 thread_ptr = all_threads.head;
254 sprintf (own_buf, "m%x", thread_to_gdb_id ((struct thread_info *)thread_ptr));
255 thread_ptr = thread_ptr->next;
259 if (strcmp ("qsThreadInfo", own_buf) == 0)
261 if (thread_ptr != NULL)
263 sprintf (own_buf, "m%x", thread_to_gdb_id ((struct thread_info *)thread_ptr));
264 thread_ptr = thread_ptr->next;
269 sprintf (own_buf, "l");
274 if (the_target->read_offsets != NULL
275 && strcmp ("qOffsets", own_buf) == 0)
277 CORE_ADDR text, data;
279 if (the_target->read_offsets (&text, &data))
280 sprintf (own_buf, "Text=%lX;Data=%lX;Bss=%lX",
281 (long)text, (long)data, (long)data);
288 if (the_target->read_auxv != NULL
289 && strncmp ("qXfer:auxv:read:", own_buf, 16) == 0)
297 /* Reject any annex; grab the offset and length. */
298 if (decode_xfer_read (own_buf + 16, &annex, &ofs, &len) < 0
301 strcpy (own_buf, "E00");
305 /* Read one extra byte, as an indicator of whether there is
307 if (len > PBUFSIZ - 2)
309 data = malloc (len + 1);
310 n = (*the_target->read_auxv) (ofs, data, len + 1);
314 *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
316 *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
323 if (strncmp ("qXfer:features:read:", own_buf, 20) == 0)
326 unsigned int len, total_len;
327 const char *document;
330 /* Check for support. */
331 document = get_features_xml ("target.xml");
332 if (document == NULL)
338 /* Grab the annex, offset, and length. */
339 if (decode_xfer_read (own_buf + 20, &annex, &ofs, &len) < 0)
341 strcpy (own_buf, "E00");
345 /* Now grab the correct annex. */
346 document = get_features_xml (annex);
347 if (document == NULL)
349 strcpy (own_buf, "E00");
353 total_len = strlen (document);
354 if (len > PBUFSIZ - 2)
359 else if (len < total_len - ofs)
360 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
363 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
369 /* Protocol features query. */
370 if (strncmp ("qSupported", own_buf, 10) == 0
371 && (own_buf[10] == ':' || own_buf[10] == '\0'))
373 sprintf (own_buf, "PacketSize=%x;QPassSignals+", PBUFSIZ - 1);
375 if (the_target->read_auxv != NULL)
376 strcat (own_buf, ";qXfer:auxv:read+");
378 if (get_features_xml ("target.xml") != NULL)
379 strcat (own_buf, ";qXfer:features:read+");
384 /* Thread-local storage support. */
385 if (the_target->get_tls_address != NULL
386 && strncmp ("qGetTLSAddr:", own_buf, 12) == 0)
388 char *p = own_buf + 12;
389 CORE_ADDR parts[3], address = 0;
392 for (i = 0; i < 3; i++)
400 p2 = strchr (p, ',');
412 decode_address (&parts[i], p, len);
416 if (p != NULL || i < 3)
420 struct thread_info *thread = gdb_id_to_thread (parts[0]);
425 err = the_target->get_tls_address (thread, parts[1], parts[2],
431 sprintf (own_buf, "%llx", address);
440 /* Otherwise, pretend we do not understand this packet. */
443 /* Otherwise we didn't know what packet it was. Say we didn't
448 /* Parse vCont packets. */
450 handle_v_cont (char *own_buf, char *status, int *signal)
454 struct thread_resume *resume_info, default_action;
456 /* Count the number of semicolons in the packet. There should be one
465 /* Allocate room for one extra action, for the default remain-stopped
466 behavior; if no default action is in the list, we'll need the extra
468 resume_info = malloc ((n + 1) * sizeof (resume_info[0]));
470 default_action.thread = -1;
471 default_action.leave_stopped = 1;
472 default_action.step = 0;
473 default_action.sig = 0;
481 resume_info[i].leave_stopped = 0;
483 if (p[0] == 's' || p[0] == 'S')
484 resume_info[i].step = 1;
485 else if (p[0] == 'c' || p[0] == 'C')
486 resume_info[i].step = 0;
490 if (p[0] == 'S' || p[0] == 'C')
493 sig = strtol (p + 1, &q, 16);
498 if (!target_signal_to_host_p (sig))
500 resume_info[i].sig = target_signal_to_host (sig);
504 resume_info[i].sig = 0;
510 resume_info[i].thread = -1;
511 default_action = resume_info[i];
513 /* Note: we don't increment i here, we'll overwrite this entry
514 the next time through. */
516 else if (p[0] == ':')
518 unsigned int gdb_id = strtoul (p + 1, &q, 16);
519 unsigned long thread_id;
524 if (p[0] != ';' && p[0] != 0)
527 thread_id = gdb_id_to_thread_id (gdb_id);
529 resume_info[i].thread = thread_id;
537 resume_info[i] = default_action;
539 /* Still used in occasional places in the backend. */
540 if (n == 1 && resume_info[0].thread != -1)
541 cont_thread = resume_info[0].thread;
544 set_desired_inferior (0);
546 (*the_target->resume) (resume_info);
550 *signal = mywait (status, 1);
551 prepare_resume_reply (own_buf, *status, *signal);
555 /* No other way to report an error... */
556 strcpy (own_buf, "");
561 /* Handle all of the extended 'v' packets. */
563 handle_v_requests (char *own_buf, char *status, int *signal)
565 if (strncmp (own_buf, "vCont;", 6) == 0)
567 handle_v_cont (own_buf, status, signal);
571 if (strncmp (own_buf, "vCont?", 6) == 0)
573 strcpy (own_buf, "vCont;c;C;s;S");
577 /* Otherwise we didn't know what packet it was. Say we didn't
584 myresume (int step, int sig)
586 struct thread_resume resume_info[2];
589 if (step || sig || (cont_thread != 0 && cont_thread != -1))
591 resume_info[0].thread
592 = ((struct inferior_list_entry *) current_inferior)->id;
593 resume_info[0].step = step;
594 resume_info[0].sig = sig;
595 resume_info[0].leave_stopped = 0;
598 resume_info[n].thread = -1;
599 resume_info[n].step = 0;
600 resume_info[n].sig = 0;
601 resume_info[n].leave_stopped = (cont_thread != 0 && cont_thread != -1);
603 (*the_target->resume) (resume_info);
609 gdbserver_version (void)
611 printf ("GNU gdbserver %s\n"
612 "Copyright (C) 2006 Free Software Foundation, Inc.\n"
613 "gdbserver is free software, covered by the GNU General Public License.\n"
614 "This gdbserver was configured as \"%s\"\n",
619 gdbserver_usage (void)
621 printf ("Usage:\tgdbserver COMM PROG [ARGS ...]\n"
622 "\tgdbserver COMM --attach PID\n"
624 "COMM may either be a tty device (for serial debugging), or \n"
625 "HOST:PORT to listen for a TCP connection.\n");
629 main (int argc, char *argv[])
631 char ch, status, *own_buf;
632 unsigned char *mem_buf;
641 if (argc >= 2 && strcmp (argv[1], "--version") == 0)
643 gdbserver_version ();
647 if (argc >= 2 && strcmp (argv[1], "--help") == 0)
653 if (setjmp (toplevel))
655 fprintf (stderr, "Exiting\n");
662 if (argc >= 3 && strcmp (argv[2], "--attach") == 0)
666 && (pid = strtoul (argv[3], &arg_end, 10)) != 0
675 if (argc < 3 || bad_attach)
683 own_buf = malloc (PBUFSIZ);
684 mem_buf = malloc (PBUFSIZ);
688 /* Wait till we are at first instruction in program. */
689 signal = start_inferior (&argv[2], &status);
691 /* We are now stopped at the first instruction of the target process */
695 switch (attach_inferior (pid, &status, &signal))
698 error ("Attaching not supported on this target");
706 if (setjmp (toplevel))
708 fprintf (stderr, "Killing inferior\n");
715 remote_open (argv[1]);
723 int new_packet_len = -1;
725 packet_len = getpkt (own_buf);
734 handle_query (own_buf, &new_packet_len);
737 handle_general_set (own_buf);
740 remote_debug = !remote_debug;
743 /* Skip "detach" support on mingw32, since we don't have
746 fprintf (stderr, "Detaching from inferior\n");
752 /* If we are attached, then we can exit. Otherwise, we need to
753 hang around doing nothing, until the child is gone. */
759 ret = waitpid (signal_pid, &status, 0);
760 if (WIFEXITED (status) || WIFSIGNALED (status))
762 } while (ret != -1 || errno != ECHILD);
771 extended_protocol = 1;
772 prepare_resume_reply (own_buf, status, signal);
776 /* We can not use the extended protocol if we are
777 attached, because we can not restart the running
778 program. So return unrecognized. */
783 prepare_resume_reply (own_buf, status, signal);
786 if (own_buf[1] == 'c' || own_buf[1] == 'g' || own_buf[1] == 's')
788 unsigned long gdb_id, thread_id;
790 gdb_id = strtoul (&own_buf[2], NULL, 16);
791 thread_id = gdb_id_to_thread_id (gdb_id);
798 if (own_buf[1] == 'g')
800 general_thread = thread_id;
801 set_desired_inferior (1);
803 else if (own_buf[1] == 'c')
804 cont_thread = thread_id;
805 else if (own_buf[1] == 's')
806 step_thread = thread_id;
812 /* Silently ignore it so that gdb can extend the protocol
813 without compatibility headaches. */
818 set_desired_inferior (1);
819 registers_to_string (own_buf);
822 set_desired_inferior (1);
823 registers_from_string (&own_buf[1]);
827 decode_m_packet (&own_buf[1], &mem_addr, &len);
828 if (read_inferior_memory (mem_addr, mem_buf, len) == 0)
829 convert_int_to_ascii (mem_buf, own_buf, len);
834 decode_M_packet (&own_buf[1], &mem_addr, &len, mem_buf);
835 if (write_inferior_memory (mem_addr, mem_buf, len) == 0)
841 if (decode_X_packet (&own_buf[1], packet_len - 1,
842 &mem_addr, &len, mem_buf) < 0
843 || write_inferior_memory (mem_addr, mem_buf, len) != 0)
849 convert_ascii_to_int (own_buf + 1, &sig, 1);
850 if (target_signal_to_host_p (sig))
851 signal = target_signal_to_host (sig);
854 set_desired_inferior (0);
855 myresume (0, signal);
856 signal = mywait (&status, 1);
857 prepare_resume_reply (own_buf, status, signal);
860 convert_ascii_to_int (own_buf + 1, &sig, 1);
861 if (target_signal_to_host_p (sig))
862 signal = target_signal_to_host (sig);
865 set_desired_inferior (0);
866 myresume (1, signal);
867 signal = mywait (&status, 1);
868 prepare_resume_reply (own_buf, status, signal);
871 set_desired_inferior (0);
873 signal = mywait (&status, 1);
874 prepare_resume_reply (own_buf, status, signal);
877 set_desired_inferior (0);
879 signal = mywait (&status, 1);
880 prepare_resume_reply (own_buf, status, signal);
886 CORE_ADDR addr = strtoul (&own_buf[3], &lenptr, 16);
887 int len = strtol (lenptr + 1, &dataptr, 16);
888 char type = own_buf[1];
890 if (the_target->insert_watchpoint == NULL
891 || (type < '2' || type > '4'))
893 /* No watchpoint support or not a watchpoint command;
894 unrecognized either way. */
901 res = (*the_target->insert_watchpoint) (type, addr, len);
916 CORE_ADDR addr = strtoul (&own_buf[3], &lenptr, 16);
917 int len = strtol (lenptr + 1, &dataptr, 16);
918 char type = own_buf[1];
920 if (the_target->remove_watchpoint == NULL
921 || (type < '2' || type > '4'))
923 /* No watchpoint support or not a watchpoint command;
924 unrecognized either way. */
931 res = (*the_target->remove_watchpoint) (type, addr, len);
943 fprintf (stderr, "Killing inferior\n");
945 /* When using the extended protocol, we start up a new
946 debugging session. The traditional protocol will
948 if (extended_protocol)
951 fprintf (stderr, "GDBserver restarting\n");
953 /* Wait till we are at 1st instruction in prog. */
954 signal = start_inferior (&argv[2], &status);
965 unsigned long gdb_id, thread_id;
967 gdb_id = strtoul (&own_buf[1], NULL, 16);
968 thread_id = gdb_id_to_thread_id (gdb_id);
975 if (mythread_alive (thread_id))
982 /* Restarting the inferior is only supported in the
983 extended protocol. */
984 if (extended_protocol)
988 fprintf (stderr, "GDBserver restarting\n");
990 /* Wait till we are at 1st instruction in prog. */
991 signal = start_inferior (&argv[2], &status);
997 /* It is a request we don't understand. Respond with an
998 empty packet so that gdb knows that we don't support this
1004 /* Extended (long) request. */
1005 handle_v_requests (own_buf, &status, &signal);
1008 /* It is a request we don't understand. Respond with an
1009 empty packet so that gdb knows that we don't support this
1015 if (new_packet_len != -1)
1016 putpkt_binary (own_buf, new_packet_len);
1022 "\nChild exited with status %d\n", signal);
1024 fprintf (stderr, "\nChild terminated with signal = 0x%x (%s)\n",
1025 target_signal_to_host (signal),
1026 target_signal_to_name (signal));
1027 if (status == 'W' || status == 'X')
1029 if (extended_protocol)
1031 fprintf (stderr, "Killing inferior\n");
1034 fprintf (stderr, "GDBserver restarting\n");
1036 /* Wait till we are at 1st instruction in prog. */
1037 signal = start_inferior (&argv[2], &status);
1043 fprintf (stderr, "GDBserver exiting\n");
1049 /* We come here when getpkt fails.
1051 For the extended remote protocol we exit (and this is the only
1052 way we gracefully exit!).
1054 For the traditional remote protocol close the connection,
1055 and re-open it at the top of the loop. */
1056 if (extended_protocol)
1063 fprintf (stderr, "Remote side has terminated connection. "
1064 "GDBserver will reopen the connection.\n");