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 (void)
198 static int features_supported = -1;
199 static char *document;
201 if (features_supported == -1)
203 const char *arch = (*the_target->arch_string) ();
206 features_supported = 0;
209 features_supported = 1;
210 document = malloc (64 + strlen (arch));
211 snprintf (document, 64 + strlen (arch),
212 "<target><architecture>%s</architecture></target>",
220 /* Handle all of the extended 'q' packets. */
222 handle_query (char *own_buf, int *new_packet_len_p)
224 static struct inferior_list_entry *thread_ptr;
226 if (strcmp ("qSymbol::", own_buf) == 0)
228 if (the_target->look_up_symbols != NULL)
229 (*the_target->look_up_symbols) ();
231 strcpy (own_buf, "OK");
235 if (strcmp ("qfThreadInfo", own_buf) == 0)
237 thread_ptr = all_threads.head;
238 sprintf (own_buf, "m%x", thread_to_gdb_id ((struct thread_info *)thread_ptr));
239 thread_ptr = thread_ptr->next;
243 if (strcmp ("qsThreadInfo", own_buf) == 0)
245 if (thread_ptr != NULL)
247 sprintf (own_buf, "m%x", thread_to_gdb_id ((struct thread_info *)thread_ptr));
248 thread_ptr = thread_ptr->next;
253 sprintf (own_buf, "l");
258 if (the_target->read_offsets != NULL
259 && strcmp ("qOffsets", own_buf) == 0)
261 CORE_ADDR text, data;
263 if (the_target->read_offsets (&text, &data))
264 sprintf (own_buf, "Text=%lX;Data=%lX;Bss=%lX",
265 (long)text, (long)data, (long)data);
272 if (the_target->read_auxv != NULL
273 && strncmp ("qXfer:auxv:read:", own_buf, 16) == 0)
281 /* Reject any annex; grab the offset and length. */
282 if (decode_xfer_read (own_buf + 16, &annex, &ofs, &len) < 0
285 strcpy (own_buf, "E00");
289 /* Read one extra byte, as an indicator of whether there is
291 if (len > PBUFSIZ - 2)
293 data = malloc (len + 1);
294 n = (*the_target->read_auxv) (ofs, data, len + 1);
298 *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1);
300 *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0);
307 if (strncmp ("qXfer:features:read:", own_buf, 20) == 0)
310 unsigned int len, total_len;
311 const char *document;
314 document = get_features_xml ();
315 if (document == NULL)
321 /* Reject any annex other than target.xml; grab the offset and
323 if (decode_xfer_read (own_buf + 20, &annex, &ofs, &len) < 0
324 || strcmp (annex, "target.xml") != 0)
326 strcpy (own_buf, "E00");
330 total_len = strlen (document);
331 if (len > PBUFSIZ - 2)
336 else if (len < total_len - ofs)
337 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
340 *new_packet_len_p = write_qxfer_response (own_buf, document + ofs,
346 /* Protocol features query. */
347 if (strncmp ("qSupported", own_buf, 10) == 0
348 && (own_buf[10] == ':' || own_buf[10] == '\0'))
350 sprintf (own_buf, "PacketSize=%x;QPassSignals+", PBUFSIZ - 1);
352 if (the_target->read_auxv != NULL)
353 strcat (own_buf, ";qXfer:auxv:read+");
355 if (get_features_xml () != NULL)
356 strcat (own_buf, ";qXfer:features:read+");
361 /* Thread-local storage support. */
362 if (the_target->get_tls_address != NULL
363 && strncmp ("qGetTLSAddr:", own_buf, 12) == 0)
365 char *p = own_buf + 12;
366 CORE_ADDR parts[3], address = 0;
369 for (i = 0; i < 3; i++)
377 p2 = strchr (p, ',');
389 decode_address (&parts[i], p, len);
393 if (p != NULL || i < 3)
397 struct thread_info *thread = gdb_id_to_thread (parts[0]);
402 err = the_target->get_tls_address (thread, parts[1], parts[2],
408 sprintf (own_buf, "%llx", address);
417 /* Otherwise, pretend we do not understand this packet. */
420 /* Otherwise we didn't know what packet it was. Say we didn't
425 /* Parse vCont packets. */
427 handle_v_cont (char *own_buf, char *status, int *signal)
431 struct thread_resume *resume_info, default_action;
433 /* Count the number of semicolons in the packet. There should be one
442 /* Allocate room for one extra action, for the default remain-stopped
443 behavior; if no default action is in the list, we'll need the extra
445 resume_info = malloc ((n + 1) * sizeof (resume_info[0]));
447 default_action.thread = -1;
448 default_action.leave_stopped = 1;
449 default_action.step = 0;
450 default_action.sig = 0;
458 resume_info[i].leave_stopped = 0;
460 if (p[0] == 's' || p[0] == 'S')
461 resume_info[i].step = 1;
462 else if (p[0] == 'c' || p[0] == 'C')
463 resume_info[i].step = 0;
467 if (p[0] == 'S' || p[0] == 'C')
470 sig = strtol (p + 1, &q, 16);
475 if (!target_signal_to_host_p (sig))
477 resume_info[i].sig = target_signal_to_host (sig);
481 resume_info[i].sig = 0;
487 resume_info[i].thread = -1;
488 default_action = resume_info[i];
490 /* Note: we don't increment i here, we'll overwrite this entry
491 the next time through. */
493 else if (p[0] == ':')
495 unsigned int gdb_id = strtoul (p + 1, &q, 16);
496 unsigned long thread_id;
501 if (p[0] != ';' && p[0] != 0)
504 thread_id = gdb_id_to_thread_id (gdb_id);
506 resume_info[i].thread = thread_id;
514 resume_info[i] = default_action;
516 /* Still used in occasional places in the backend. */
517 if (n == 1 && resume_info[0].thread != -1)
518 cont_thread = resume_info[0].thread;
521 set_desired_inferior (0);
523 (*the_target->resume) (resume_info);
527 *signal = mywait (status, 1);
528 prepare_resume_reply (own_buf, *status, *signal);
532 /* No other way to report an error... */
533 strcpy (own_buf, "");
538 /* Handle all of the extended 'v' packets. */
540 handle_v_requests (char *own_buf, char *status, int *signal)
542 if (strncmp (own_buf, "vCont;", 6) == 0)
544 handle_v_cont (own_buf, status, signal);
548 if (strncmp (own_buf, "vCont?", 6) == 0)
550 strcpy (own_buf, "vCont;c;C;s;S");
554 /* Otherwise we didn't know what packet it was. Say we didn't
561 myresume (int step, int sig)
563 struct thread_resume resume_info[2];
566 if (step || sig || (cont_thread != 0 && cont_thread != -1))
568 resume_info[0].thread
569 = ((struct inferior_list_entry *) current_inferior)->id;
570 resume_info[0].step = step;
571 resume_info[0].sig = sig;
572 resume_info[0].leave_stopped = 0;
575 resume_info[n].thread = -1;
576 resume_info[n].step = 0;
577 resume_info[n].sig = 0;
578 resume_info[n].leave_stopped = (cont_thread != 0 && cont_thread != -1);
580 (*the_target->resume) (resume_info);
586 gdbserver_version (void)
588 printf ("GNU gdbserver %s\n"
589 "Copyright (C) 2006 Free Software Foundation, Inc.\n"
590 "gdbserver is free software, covered by the GNU General Public License.\n"
591 "This gdbserver was configured as \"%s\"\n",
596 gdbserver_usage (void)
598 printf ("Usage:\tgdbserver COMM PROG [ARGS ...]\n"
599 "\tgdbserver COMM --attach PID\n"
601 "COMM may either be a tty device (for serial debugging), or \n"
602 "HOST:PORT to listen for a TCP connection.\n");
606 main (int argc, char *argv[])
608 char ch, status, *own_buf;
609 unsigned char *mem_buf;
618 if (argc >= 2 && strcmp (argv[1], "--version") == 0)
620 gdbserver_version ();
624 if (argc >= 2 && strcmp (argv[1], "--help") == 0)
630 if (setjmp (toplevel))
632 fprintf (stderr, "Exiting\n");
639 if (argc >= 3 && strcmp (argv[2], "--attach") == 0)
643 && (pid = strtoul (argv[3], &arg_end, 10)) != 0
652 if (argc < 3 || bad_attach)
660 own_buf = malloc (PBUFSIZ);
661 mem_buf = malloc (PBUFSIZ);
665 /* Wait till we are at first instruction in program. */
666 signal = start_inferior (&argv[2], &status);
668 /* We are now stopped at the first instruction of the target process */
672 switch (attach_inferior (pid, &status, &signal))
675 error ("Attaching not supported on this target");
683 if (setjmp (toplevel))
685 fprintf (stderr, "Killing inferior\n");
692 remote_open (argv[1]);
700 int new_packet_len = -1;
702 packet_len = getpkt (own_buf);
711 handle_query (own_buf, &new_packet_len);
714 handle_general_set (own_buf);
717 remote_debug = !remote_debug;
720 /* Skip "detach" support on mingw32, since we don't have
723 fprintf (stderr, "Detaching from inferior\n");
729 /* If we are attached, then we can exit. Otherwise, we need to
730 hang around doing nothing, until the child is gone. */
736 ret = waitpid (signal_pid, &status, 0);
737 if (WIFEXITED (status) || WIFSIGNALED (status))
739 } while (ret != -1 || errno != ECHILD);
748 extended_protocol = 1;
749 prepare_resume_reply (own_buf, status, signal);
753 /* We can not use the extended protocol if we are
754 attached, because we can not restart the running
755 program. So return unrecognized. */
760 prepare_resume_reply (own_buf, status, signal);
763 if (own_buf[1] == 'c' || own_buf[1] == 'g' || own_buf[1] == 's')
765 unsigned long gdb_id, thread_id;
767 gdb_id = strtoul (&own_buf[2], NULL, 16);
768 thread_id = gdb_id_to_thread_id (gdb_id);
775 if (own_buf[1] == 'g')
777 general_thread = thread_id;
778 set_desired_inferior (1);
780 else if (own_buf[1] == 'c')
781 cont_thread = thread_id;
782 else if (own_buf[1] == 's')
783 step_thread = thread_id;
789 /* Silently ignore it so that gdb can extend the protocol
790 without compatibility headaches. */
795 set_desired_inferior (1);
796 registers_to_string (own_buf);
799 set_desired_inferior (1);
800 registers_from_string (&own_buf[1]);
804 decode_m_packet (&own_buf[1], &mem_addr, &len);
805 if (read_inferior_memory (mem_addr, mem_buf, len) == 0)
806 convert_int_to_ascii (mem_buf, own_buf, len);
811 decode_M_packet (&own_buf[1], &mem_addr, &len, mem_buf);
812 if (write_inferior_memory (mem_addr, mem_buf, len) == 0)
818 if (decode_X_packet (&own_buf[1], packet_len - 1,
819 &mem_addr, &len, mem_buf) < 0
820 || write_inferior_memory (mem_addr, mem_buf, len) != 0)
826 convert_ascii_to_int (own_buf + 1, &sig, 1);
827 if (target_signal_to_host_p (sig))
828 signal = target_signal_to_host (sig);
831 set_desired_inferior (0);
832 myresume (0, signal);
833 signal = mywait (&status, 1);
834 prepare_resume_reply (own_buf, status, signal);
837 convert_ascii_to_int (own_buf + 1, &sig, 1);
838 if (target_signal_to_host_p (sig))
839 signal = target_signal_to_host (sig);
842 set_desired_inferior (0);
843 myresume (1, signal);
844 signal = mywait (&status, 1);
845 prepare_resume_reply (own_buf, status, signal);
848 set_desired_inferior (0);
850 signal = mywait (&status, 1);
851 prepare_resume_reply (own_buf, status, signal);
854 set_desired_inferior (0);
856 signal = mywait (&status, 1);
857 prepare_resume_reply (own_buf, status, signal);
863 CORE_ADDR addr = strtoul (&own_buf[3], &lenptr, 16);
864 int len = strtol (lenptr + 1, &dataptr, 16);
865 char type = own_buf[1];
867 if (the_target->insert_watchpoint == NULL
868 || (type < '2' || type > '4'))
870 /* No watchpoint support or not a watchpoint command;
871 unrecognized either way. */
878 res = (*the_target->insert_watchpoint) (type, addr, len);
893 CORE_ADDR addr = strtoul (&own_buf[3], &lenptr, 16);
894 int len = strtol (lenptr + 1, &dataptr, 16);
895 char type = own_buf[1];
897 if (the_target->remove_watchpoint == NULL
898 || (type < '2' || type > '4'))
900 /* No watchpoint support or not a watchpoint command;
901 unrecognized either way. */
908 res = (*the_target->remove_watchpoint) (type, addr, len);
920 fprintf (stderr, "Killing inferior\n");
922 /* When using the extended protocol, we start up a new
923 debugging session. The traditional protocol will
925 if (extended_protocol)
928 fprintf (stderr, "GDBserver restarting\n");
930 /* Wait till we are at 1st instruction in prog. */
931 signal = start_inferior (&argv[2], &status);
942 unsigned long gdb_id, thread_id;
944 gdb_id = strtoul (&own_buf[1], NULL, 16);
945 thread_id = gdb_id_to_thread_id (gdb_id);
952 if (mythread_alive (thread_id))
959 /* Restarting the inferior is only supported in the
960 extended protocol. */
961 if (extended_protocol)
965 fprintf (stderr, "GDBserver restarting\n");
967 /* Wait till we are at 1st instruction in prog. */
968 signal = start_inferior (&argv[2], &status);
974 /* It is a request we don't understand. Respond with an
975 empty packet so that gdb knows that we don't support this
981 /* Extended (long) request. */
982 handle_v_requests (own_buf, &status, &signal);
985 /* It is a request we don't understand. Respond with an
986 empty packet so that gdb knows that we don't support this
992 if (new_packet_len != -1)
993 putpkt_binary (own_buf, new_packet_len);
999 "\nChild exited with status %d\n", signal);
1001 fprintf (stderr, "\nChild terminated with signal = 0x%x (%s)\n",
1002 target_signal_to_host (signal),
1003 target_signal_to_name (signal));
1004 if (status == 'W' || status == 'X')
1006 if (extended_protocol)
1008 fprintf (stderr, "Killing inferior\n");
1011 fprintf (stderr, "GDBserver restarting\n");
1013 /* Wait till we are at 1st instruction in prog. */
1014 signal = start_inferior (&argv[2], &status);
1020 fprintf (stderr, "GDBserver exiting\n");
1026 /* We come here when getpkt fails.
1028 For the extended remote protocol we exit (and this is the only
1029 way we gracefully exit!).
1031 For the traditional remote protocol close the connection,
1032 and re-open it at the top of the loop. */
1033 if (extended_protocol)
1040 fprintf (stderr, "Remote side has terminated connection. "
1041 "GDBserver will reopen the connection.\n");