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, 2008 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 3 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, see <http://www.gnu.org/licenses/>. */
35 unsigned long cont_thread
;
36 unsigned long general_thread
;
37 unsigned long step_thread
;
38 unsigned long thread_from_wait
;
39 unsigned long old_thread_from_wait
;
42 static int extended_protocol
;
44 static int response_needed
;
45 static int exit_requested
;
47 static char **program_argv
, **wrapper_argv
;
49 /* Enable miscellaneous debugging output. The name is historical - it
50 was originally used to debug LinuxThreads support. */
53 int pass_signals
[TARGET_SIGNAL_LAST
];
57 const char *gdbserver_xmltarget
;
59 /* The PID of the originally created or attached inferior. Used to
60 send signals to the process when GDB sends us an asynchronous interrupt
61 (user hitting Control-C in the client), and to wait for the child to exit
62 when no longer debugging it. */
64 unsigned long signal_pid
;
67 /* A file descriptor for the controlling terminal. */
70 /* TERMINAL_FD's original foreground group. */
71 pid_t old_foreground_pgrp
;
73 /* Hand back terminal ownership to the original foreground group. */
76 restore_old_foreground_pgrp (void)
78 tcsetpgrp (terminal_fd
, old_foreground_pgrp
);
82 /* Set if you want to disable optional thread related packets support
83 in gdbserver, for the sake of testing GDB against stubs that don't
85 int disable_packet_vCont
;
86 int disable_packet_Tthread
;
87 int disable_packet_qC
;
88 int disable_packet_qfThreadInfo
;
93 return all_threads
.head
!= NULL
;
97 start_inferior (char **argv
, char *statusptr
)
99 char **new_argv
= argv
;
102 if (wrapper_argv
!= NULL
)
106 for (i
= 0; wrapper_argv
[i
] != NULL
; i
++)
108 for (i
= 0; argv
[i
] != NULL
; i
++)
110 new_argv
= alloca (sizeof (char *) * count
);
112 for (i
= 0; wrapper_argv
[i
] != NULL
; i
++)
113 new_argv
[count
++] = wrapper_argv
[i
];
114 for (i
= 0; argv
[i
] != NULL
; i
++)
115 new_argv
[count
++] = argv
[i
];
116 new_argv
[count
] = NULL
;
120 signal (SIGTTOU
, SIG_DFL
);
121 signal (SIGTTIN
, SIG_DFL
);
124 signal_pid
= create_inferior (new_argv
[0], new_argv
);
126 /* FIXME: we don't actually know at this point that the create
127 actually succeeded. We won't know that until we wait. */
128 fprintf (stderr
, "Process %s created; pid = %ld\n", argv
[0],
133 signal (SIGTTOU
, SIG_IGN
);
134 signal (SIGTTIN
, SIG_IGN
);
135 terminal_fd
= fileno (stderr
);
136 old_foreground_pgrp
= tcgetpgrp (terminal_fd
);
137 tcsetpgrp (terminal_fd
, signal_pid
);
138 atexit (restore_old_foreground_pgrp
);
141 if (wrapper_argv
!= NULL
)
143 struct thread_resume resume_info
;
146 resume_info
.thread
= -1;
147 resume_info
.step
= 0;
149 resume_info
.leave_stopped
= 0;
151 sig
= mywait (statusptr
, 0);
152 if (*statusptr
!= 'T')
157 (*the_target
->resume
) (&resume_info
);
159 sig
= mywait (statusptr
, 0);
160 if (*statusptr
!= 'T')
163 while (sig
!= TARGET_SIGNAL_TRAP
);
168 /* Wait till we are at 1st instruction in program, return signal
169 number (assuming success). */
170 return mywait (statusptr
, 0);
174 attach_inferior (int pid
, char *statusptr
, int *sigptr
)
176 /* myattach should return -1 if attaching is unsupported,
177 0 if it succeeded, and call error() otherwise. */
179 if (myattach (pid
) != 0)
184 fprintf (stderr
, "Attached; pid = %d\n", pid
);
187 /* FIXME - It may be that we should get the SIGNAL_PID from the
188 attach function, so that it can be the main thread instead of
189 whichever we were told to attach to. */
192 *sigptr
= mywait (statusptr
, 0);
194 /* GDB knows to ignore the first SIGSTOP after attaching to a running
195 process using the "attach" command, but this is different; it's
196 just using "target remote". Pretend it's just starting up. */
197 if (*statusptr
== 'T' && *sigptr
== TARGET_SIGNAL_STOP
)
198 *sigptr
= TARGET_SIGNAL_TRAP
;
203 extern int remote_debug
;
205 /* Decode a qXfer read request. Return 0 if everything looks OK,
209 decode_xfer_read (char *buf
, char **annex
, CORE_ADDR
*ofs
, unsigned int *len
)
211 /* Extract and NUL-terminate the annex. */
213 while (*buf
&& *buf
!= ':')
219 /* After the read marker and annex, qXfer looks like a
220 traditional 'm' packet. */
221 decode_m_packet (buf
, ofs
, len
);
226 /* Write the response to a successful qXfer read. Returns the
227 length of the (binary) data stored in BUF, corresponding
228 to as much of DATA/LEN as we could fit. IS_MORE controls
229 the first character of the response. */
231 write_qxfer_response (char *buf
, const void *data
, int len
, int is_more
)
240 return remote_escape_output (data
, len
, (unsigned char *) buf
+ 1, &out_len
,
244 /* Handle all of the extended 'Q' packets. */
246 handle_general_set (char *own_buf
)
248 if (strncmp ("QPassSignals:", own_buf
, strlen ("QPassSignals:")) == 0)
250 int numsigs
= (int) TARGET_SIGNAL_LAST
, i
;
251 const char *p
= own_buf
+ strlen ("QPassSignals:");
254 p
= decode_address_to_semicolon (&cursig
, p
);
255 for (i
= 0; i
< numsigs
; i
++)
261 /* Keep looping, to clear the remaining signals. */
264 p
= decode_address_to_semicolon (&cursig
, p
);
269 strcpy (own_buf
, "OK");
273 if (strcmp (own_buf
, "QStartNoAckMode") == 0)
277 fprintf (stderr
, "[noack mode enabled]\n");
286 /* Otherwise we didn't know what packet it was. Say we didn't
292 get_features_xml (const char *annex
)
294 /* gdbserver_xmltarget defines what to return when looking
295 for the "target.xml" file. Its contents can either be
296 verbatim XML code (prefixed with a '@') or else the name
297 of the actual XML file to be used in place of "target.xml".
299 This variable is set up from the auto-generated
300 init_registers_... routine for the current target. */
302 if (gdbserver_xmltarget
303 && strcmp (annex
, "target.xml") == 0)
305 if (*gdbserver_xmltarget
== '@')
306 return gdbserver_xmltarget
+ 1;
308 annex
= gdbserver_xmltarget
;
313 extern const char *const xml_builtin
[][2];
316 /* Look for the annex. */
317 for (i
= 0; xml_builtin
[i
][0] != NULL
; i
++)
318 if (strcmp (annex
, xml_builtin
[i
][0]) == 0)
321 if (xml_builtin
[i
][0] != NULL
)
322 return xml_builtin
[i
][1];
330 monitor_show_help (void)
332 monitor_output ("The following monitor commands are supported:\n");
333 monitor_output (" set debug <0|1>\n");
334 monitor_output (" Enable general debugging messages\n");
335 monitor_output (" set remote-debug <0|1>\n");
336 monitor_output (" Enable remote protocol debugging messages\n");
337 monitor_output (" exit\n");
338 monitor_output (" Quit GDBserver\n");
341 /* Subroutine of handle_search_memory to simplify it. */
344 handle_search_memory_1 (CORE_ADDR start_addr
, CORE_ADDR search_space_len
,
345 gdb_byte
*pattern
, unsigned pattern_len
,
346 gdb_byte
*search_buf
,
347 unsigned chunk_size
, unsigned search_buf_size
,
348 CORE_ADDR
*found_addrp
)
350 /* Prime the search buffer. */
352 if (read_inferior_memory (start_addr
, search_buf
, search_buf_size
) != 0)
354 warning ("Unable to access target memory at 0x%lx, halting search.",
359 /* Perform the search.
361 The loop is kept simple by allocating [N + pattern-length - 1] bytes.
362 When we've scanned N bytes we copy the trailing bytes to the start and
363 read in another N bytes. */
365 while (search_space_len
>= pattern_len
)
368 unsigned nr_search_bytes
= (search_space_len
< search_buf_size
372 found_ptr
= memmem (search_buf
, nr_search_bytes
, pattern
, pattern_len
);
374 if (found_ptr
!= NULL
)
376 CORE_ADDR found_addr
= start_addr
+ (found_ptr
- search_buf
);
377 *found_addrp
= found_addr
;
381 /* Not found in this chunk, skip to next chunk. */
383 /* Don't let search_space_len wrap here, it's unsigned. */
384 if (search_space_len
>= chunk_size
)
385 search_space_len
-= chunk_size
;
387 search_space_len
= 0;
389 if (search_space_len
>= pattern_len
)
391 unsigned keep_len
= search_buf_size
- chunk_size
;
392 CORE_ADDR read_addr
= start_addr
+ keep_len
;
395 /* Copy the trailing part of the previous iteration to the front
396 of the buffer for the next iteration. */
397 memcpy (search_buf
, search_buf
+ chunk_size
, keep_len
);
399 nr_to_read
= (search_space_len
- keep_len
< chunk_size
400 ? search_space_len
- keep_len
403 if (read_inferior_memory (read_addr
, search_buf
+ keep_len
,
406 warning ("Unable to access target memory at 0x%lx, halting search.",
411 start_addr
+= chunk_size
;
420 /* Handle qSearch:memory packets. */
423 handle_search_memory (char *own_buf
, int packet_len
)
425 CORE_ADDR start_addr
;
426 CORE_ADDR search_space_len
;
428 unsigned int pattern_len
;
429 /* NOTE: also defined in find.c testcase. */
430 #define SEARCH_CHUNK_SIZE 16000
431 const unsigned chunk_size
= SEARCH_CHUNK_SIZE
;
432 /* Buffer to hold memory contents for searching. */
433 gdb_byte
*search_buf
;
434 unsigned search_buf_size
;
436 CORE_ADDR found_addr
;
437 int cmd_name_len
= sizeof ("qSearch:memory:") - 1;
439 pattern
= malloc (packet_len
);
442 error ("Unable to allocate memory to perform the search");
443 strcpy (own_buf
, "E00");
446 if (decode_search_memory_packet (own_buf
+ cmd_name_len
,
447 packet_len
- cmd_name_len
,
448 &start_addr
, &search_space_len
,
449 pattern
, &pattern_len
) < 0)
452 error ("Error in parsing qSearch:memory packet");
453 strcpy (own_buf
, "E00");
457 search_buf_size
= chunk_size
+ pattern_len
- 1;
459 /* No point in trying to allocate a buffer larger than the search space. */
460 if (search_space_len
< search_buf_size
)
461 search_buf_size
= search_space_len
;
463 search_buf
= malloc (search_buf_size
);
464 if (search_buf
== NULL
)
467 error ("Unable to allocate memory to perform the search");
468 strcpy (own_buf
, "E00");
472 found
= handle_search_memory_1 (start_addr
, search_space_len
,
473 pattern
, pattern_len
,
474 search_buf
, chunk_size
, search_buf_size
,
478 sprintf (own_buf
, "1,%lx", (long) found_addr
);
480 strcpy (own_buf
, "0");
482 strcpy (own_buf
, "E00");
488 #define require_running(BUF) \
489 if (!target_running ()) \
495 /* Handle all of the extended 'q' packets. */
497 handle_query (char *own_buf
, int packet_len
, int *new_packet_len_p
)
499 static struct inferior_list_entry
*thread_ptr
;
501 /* Reply the current thread id. */
502 if (strcmp ("qC", own_buf
) == 0 && !disable_packet_qC
)
504 require_running (own_buf
);
505 thread_ptr
= all_threads
.head
;
506 sprintf (own_buf
, "QC%x",
507 thread_to_gdb_id ((struct thread_info
*)thread_ptr
));
511 if (strcmp ("qSymbol::", own_buf
) == 0)
513 if (target_running () && the_target
->look_up_symbols
!= NULL
)
514 (*the_target
->look_up_symbols
) ();
516 strcpy (own_buf
, "OK");
520 if (!disable_packet_qfThreadInfo
)
522 if (strcmp ("qfThreadInfo", own_buf
) == 0)
524 require_running (own_buf
);
525 thread_ptr
= all_threads
.head
;
526 sprintf (own_buf
, "m%x", thread_to_gdb_id ((struct thread_info
*)thread_ptr
));
527 thread_ptr
= thread_ptr
->next
;
531 if (strcmp ("qsThreadInfo", own_buf
) == 0)
533 require_running (own_buf
);
534 if (thread_ptr
!= NULL
)
536 sprintf (own_buf
, "m%x", thread_to_gdb_id ((struct thread_info
*)thread_ptr
));
537 thread_ptr
= thread_ptr
->next
;
542 sprintf (own_buf
, "l");
548 if (the_target
->read_offsets
!= NULL
549 && strcmp ("qOffsets", own_buf
) == 0)
551 CORE_ADDR text
, data
;
553 require_running (own_buf
);
554 if (the_target
->read_offsets (&text
, &data
))
555 sprintf (own_buf
, "Text=%lX;Data=%lX;Bss=%lX",
556 (long)text
, (long)data
, (long)data
);
563 if (the_target
->qxfer_spu
!= NULL
564 && strncmp ("qXfer:spu:read:", own_buf
, 15) == 0)
570 unsigned char *spu_buf
;
572 require_running (own_buf
);
573 strcpy (own_buf
, "E00");
574 if (decode_xfer_read (own_buf
+ 15, &annex
, &ofs
, &len
) < 0)
576 if (len
> PBUFSIZ
- 2)
578 spu_buf
= malloc (len
+ 1);
582 n
= (*the_target
->qxfer_spu
) (annex
, spu_buf
, NULL
, ofs
, len
+ 1);
586 *new_packet_len_p
= write_qxfer_response
587 (own_buf
, spu_buf
, len
, 1);
589 *new_packet_len_p
= write_qxfer_response
590 (own_buf
, spu_buf
, n
, 0);
596 if (the_target
->qxfer_spu
!= NULL
597 && strncmp ("qXfer:spu:write:", own_buf
, 16) == 0)
603 unsigned char *spu_buf
;
605 require_running (own_buf
);
606 strcpy (own_buf
, "E00");
607 spu_buf
= malloc (packet_len
- 15);
610 if (decode_xfer_write (own_buf
+ 16, packet_len
- 16, &annex
,
611 &ofs
, &len
, spu_buf
) < 0)
617 n
= (*the_target
->qxfer_spu
)
618 (annex
, NULL
, (unsigned const char *)spu_buf
, ofs
, len
);
622 sprintf (own_buf
, "%x", n
);
628 if (the_target
->read_auxv
!= NULL
629 && strncmp ("qXfer:auxv:read:", own_buf
, 16) == 0)
637 require_running (own_buf
);
639 /* Reject any annex; grab the offset and length. */
640 if (decode_xfer_read (own_buf
+ 16, &annex
, &ofs
, &len
) < 0
643 strcpy (own_buf
, "E00");
647 /* Read one extra byte, as an indicator of whether there is
649 if (len
> PBUFSIZ
- 2)
651 data
= malloc (len
+ 1);
652 n
= (*the_target
->read_auxv
) (ofs
, data
, len
+ 1);
656 *new_packet_len_p
= write_qxfer_response (own_buf
, data
, len
, 1);
658 *new_packet_len_p
= write_qxfer_response (own_buf
, data
, n
, 0);
665 if (strncmp ("qXfer:features:read:", own_buf
, 20) == 0)
668 unsigned int len
, total_len
;
669 const char *document
;
672 require_running (own_buf
);
674 /* Grab the annex, offset, and length. */
675 if (decode_xfer_read (own_buf
+ 20, &annex
, &ofs
, &len
) < 0)
677 strcpy (own_buf
, "E00");
681 /* Now grab the correct annex. */
682 document
= get_features_xml (annex
);
683 if (document
== NULL
)
685 strcpy (own_buf
, "E00");
689 total_len
= strlen (document
);
690 if (len
> PBUFSIZ
- 2)
695 else if (len
< total_len
- ofs
)
696 *new_packet_len_p
= write_qxfer_response (own_buf
, document
+ ofs
,
699 *new_packet_len_p
= write_qxfer_response (own_buf
, document
+ ofs
,
705 if (strncmp ("qXfer:libraries:read:", own_buf
, 21) == 0)
708 unsigned int len
, total_len
;
710 struct inferior_list_entry
*dll_ptr
;
713 require_running (own_buf
);
715 /* Reject any annex; grab the offset and length. */
716 if (decode_xfer_read (own_buf
+ 21, &annex
, &ofs
, &len
) < 0
719 strcpy (own_buf
, "E00");
723 /* Over-estimate the necessary memory. Assume that every character
724 in the library name must be escaped. */
726 for (dll_ptr
= all_dlls
.head
; dll_ptr
!= NULL
; dll_ptr
= dll_ptr
->next
)
727 total_len
+= 128 + 6 * strlen (((struct dll_info
*) dll_ptr
)->name
);
729 document
= malloc (total_len
);
730 strcpy (document
, "<library-list>\n");
731 p
= document
+ strlen (document
);
733 for (dll_ptr
= all_dlls
.head
; dll_ptr
!= NULL
; dll_ptr
= dll_ptr
->next
)
735 struct dll_info
*dll
= (struct dll_info
*) dll_ptr
;
738 strcpy (p
, " <library name=\"");
740 name
= xml_escape_text (dll
->name
);
744 strcpy (p
, "\"><segment address=\"");
746 sprintf (p
, "0x%lx", (long) dll
->base_addr
);
748 strcpy (p
, "\"/></library>\n");
752 strcpy (p
, "</library-list>\n");
754 total_len
= strlen (document
);
755 if (len
> PBUFSIZ
- 2)
760 else if (len
< total_len
- ofs
)
761 *new_packet_len_p
= write_qxfer_response (own_buf
, document
+ ofs
,
764 *new_packet_len_p
= write_qxfer_response (own_buf
, document
+ ofs
,
771 /* Protocol features query. */
772 if (strncmp ("qSupported", own_buf
, 10) == 0
773 && (own_buf
[10] == ':' || own_buf
[10] == '\0'))
775 sprintf (own_buf
, "PacketSize=%x;QPassSignals+", PBUFSIZ
- 1);
777 /* We do not have any hook to indicate whether the target backend
778 supports qXfer:libraries:read, so always report it. */
779 strcat (own_buf
, ";qXfer:libraries:read+");
781 if (the_target
->read_auxv
!= NULL
)
782 strcat (own_buf
, ";qXfer:auxv:read+");
784 if (the_target
->qxfer_spu
!= NULL
)
785 strcat (own_buf
, ";qXfer:spu:read+;qXfer:spu:write+");
787 /* We always report qXfer:features:read, as targets may
788 install XML files on a subsequent call to arch_setup.
789 If we reported to GDB on startup that we don't support
790 qXfer:feature:read at all, we will never be re-queried. */
791 strcat (own_buf
, ";qXfer:features:read+");
793 if (transport_is_reliable
)
794 strcat (own_buf
, ";QStartNoAckMode+");
798 /* Thread-local storage support. */
799 if (the_target
->get_tls_address
!= NULL
800 && strncmp ("qGetTLSAddr:", own_buf
, 12) == 0)
802 char *p
= own_buf
+ 12;
803 CORE_ADDR parts
[3], address
= 0;
806 require_running (own_buf
);
808 for (i
= 0; i
< 3; i
++)
816 p2
= strchr (p
, ',');
828 decode_address (&parts
[i
], p
, len
);
832 if (p
!= NULL
|| i
< 3)
836 struct thread_info
*thread
= gdb_id_to_thread (parts
[0]);
841 err
= the_target
->get_tls_address (thread
, parts
[1], parts
[2],
847 sprintf (own_buf
, "%llx", address
);
856 /* Otherwise, pretend we do not understand this packet. */
859 /* Handle "monitor" commands. */
860 if (strncmp ("qRcmd,", own_buf
, 6) == 0)
862 char *mon
= malloc (PBUFSIZ
);
863 int len
= strlen (own_buf
+ 6);
865 if ((len
% 2) != 0 || unhexify (mon
, own_buf
+ 6, len
/ 2) != len
/ 2)
875 if (strcmp (mon
, "set debug 1") == 0)
878 monitor_output ("Debug output enabled.\n");
880 else if (strcmp (mon
, "set debug 0") == 0)
883 monitor_output ("Debug output disabled.\n");
885 else if (strcmp (mon
, "set remote-debug 1") == 0)
888 monitor_output ("Protocol debug output enabled.\n");
890 else if (strcmp (mon
, "set remote-debug 0") == 0)
893 monitor_output ("Protocol debug output disabled.\n");
895 else if (strcmp (mon
, "help") == 0)
896 monitor_show_help ();
897 else if (strcmp (mon
, "exit") == 0)
901 monitor_output ("Unknown monitor command.\n\n");
902 monitor_show_help ();
910 if (strncmp ("qSearch:memory:", own_buf
, sizeof ("qSearch:memory:") - 1) == 0)
912 require_running (own_buf
);
913 handle_search_memory (own_buf
, packet_len
);
917 /* Otherwise we didn't know what packet it was. Say we didn't
922 /* Parse vCont packets. */
924 handle_v_cont (char *own_buf
, char *status
, int *signal
)
928 struct thread_resume
*resume_info
, default_action
;
930 /* Count the number of semicolons in the packet. There should be one
939 /* Allocate room for one extra action, for the default remain-stopped
940 behavior; if no default action is in the list, we'll need the extra
942 resume_info
= malloc ((n
+ 1) * sizeof (resume_info
[0]));
944 default_action
.thread
= -1;
945 default_action
.leave_stopped
= 1;
946 default_action
.step
= 0;
947 default_action
.sig
= 0;
955 resume_info
[i
].leave_stopped
= 0;
957 if (p
[0] == 's' || p
[0] == 'S')
958 resume_info
[i
].step
= 1;
959 else if (p
[0] == 'c' || p
[0] == 'C')
960 resume_info
[i
].step
= 0;
964 if (p
[0] == 'S' || p
[0] == 'C')
967 sig
= strtol (p
+ 1, &q
, 16);
972 if (!target_signal_to_host_p (sig
))
974 resume_info
[i
].sig
= target_signal_to_host (sig
);
978 resume_info
[i
].sig
= 0;
984 resume_info
[i
].thread
= -1;
985 default_action
= resume_info
[i
];
987 /* Note: we don't increment i here, we'll overwrite this entry
988 the next time through. */
990 else if (p
[0] == ':')
992 unsigned int gdb_id
= strtoul (p
+ 1, &q
, 16);
993 unsigned long thread_id
;
998 if (p
[0] != ';' && p
[0] != 0)
1001 thread_id
= gdb_id_to_thread_id (gdb_id
);
1003 resume_info
[i
].thread
= thread_id
;
1011 resume_info
[i
] = default_action
;
1013 /* Still used in occasional places in the backend. */
1014 if (n
== 1 && resume_info
[0].thread
!= -1)
1015 cont_thread
= resume_info
[0].thread
;
1018 set_desired_inferior (0);
1021 (*the_target
->resume
) (resume_info
);
1025 *signal
= mywait (status
, 1);
1026 prepare_resume_reply (own_buf
, *status
, *signal
);
1027 disable_async_io ();
1031 write_enn (own_buf
);
1036 /* Attach to a new program. Return 1 if successful, 0 if failure. */
1038 handle_v_attach (char *own_buf
, char *status
, int *signal
)
1042 pid
= strtol (own_buf
+ 8, NULL
, 16);
1043 if (pid
!= 0 && attach_inferior (pid
, status
, signal
) == 0)
1045 /* Don't report shared library events after attaching, even if
1046 some libraries are preloaded. GDB will always poll the
1047 library list. Avoids the "stopped by shared library event"
1048 notice on the GDB side. */
1050 prepare_resume_reply (own_buf
, *status
, *signal
);
1055 write_enn (own_buf
);
1060 /* Run a new program. Return 1 if successful, 0 if failure. */
1062 handle_v_run (char *own_buf
, char *status
, int *signal
)
1064 char *p
, **pp
, *next_p
, **new_argv
;
1068 for (p
= own_buf
+ strlen ("vRun;"); p
&& *p
; p
= strchr (p
, ';'))
1074 new_argv
= malloc ((new_argc
+ 2) * sizeof (char *));
1076 for (p
= own_buf
+ strlen ("vRun;"); *p
; p
= next_p
)
1078 next_p
= strchr (p
, ';');
1080 next_p
= p
+ strlen (p
);
1082 if (i
== 0 && p
== next_p
)
1086 new_argv
[i
] = malloc (1 + (next_p
- p
) / 2);
1087 unhexify (new_argv
[i
], p
, (next_p
- p
) / 2);
1088 new_argv
[i
][(next_p
- p
) / 2] = '\0';
1097 if (new_argv
[0] == NULL
)
1099 /* GDB didn't specify a program to run. Try to use the argv
1100 from the last run: either from the last vRun with a non-empty
1101 argv, or from what the user specified if gdbserver was
1102 started as: `gdbserver :1234 PROG ARGS'. */
1104 if (program_argv
== NULL
)
1106 write_enn (own_buf
);
1110 /* We can reuse the old args. We don't need this then. */
1115 /* Free the old argv. */
1118 for (pp
= program_argv
; *pp
!= NULL
; pp
++)
1120 free (program_argv
);
1122 program_argv
= new_argv
;
1125 *signal
= start_inferior (program_argv
, status
);
1128 prepare_resume_reply (own_buf
, *status
, *signal
);
1133 write_enn (own_buf
);
1138 /* Handle all of the extended 'v' packets. */
1140 handle_v_requests (char *own_buf
, char *status
, int *signal
,
1141 int packet_len
, int *new_packet_len
)
1143 if (!disable_packet_vCont
)
1145 if (strncmp (own_buf
, "vCont;", 6) == 0)
1147 require_running (own_buf
);
1148 handle_v_cont (own_buf
, status
, signal
);
1152 if (strncmp (own_buf
, "vCont?", 6) == 0)
1154 strcpy (own_buf
, "vCont;c;C;s;S");
1159 if (strncmp (own_buf
, "vFile:", 6) == 0
1160 && handle_vFile (own_buf
, packet_len
, new_packet_len
))
1163 if (strncmp (own_buf
, "vAttach;", 8) == 0)
1165 if (target_running ())
1167 fprintf (stderr
, "Already debugging a process\n");
1168 write_enn (own_buf
);
1171 handle_v_attach (own_buf
, status
, signal
);
1175 if (strncmp (own_buf
, "vRun;", 5) == 0)
1177 if (target_running ())
1179 fprintf (stderr
, "Already debugging a process\n");
1180 write_enn (own_buf
);
1183 handle_v_run (own_buf
, status
, signal
);
1187 /* Otherwise we didn't know what packet it was. Say we didn't
1194 myresume (char *own_buf
, int step
, int *signalp
, char *statusp
)
1196 struct thread_resume resume_info
[2];
1200 set_desired_inferior (0);
1202 if (step
|| sig
|| (cont_thread
!= 0 && cont_thread
!= -1))
1204 resume_info
[0].thread
1205 = ((struct inferior_list_entry
*) current_inferior
)->id
;
1206 resume_info
[0].step
= step
;
1207 resume_info
[0].sig
= sig
;
1208 resume_info
[0].leave_stopped
= 0;
1211 resume_info
[n
].thread
= -1;
1212 resume_info
[n
].step
= 0;
1213 resume_info
[n
].sig
= 0;
1214 resume_info
[n
].leave_stopped
= (cont_thread
!= 0 && cont_thread
!= -1);
1217 (*the_target
->resume
) (resume_info
);
1218 *signalp
= mywait (statusp
, 1);
1219 prepare_resume_reply (own_buf
, *statusp
, *signalp
);
1220 disable_async_io ();
1224 gdbserver_version (void)
1226 printf ("GNU gdbserver %s%s\n"
1227 "Copyright (C) 2007 Free Software Foundation, Inc.\n"
1228 "gdbserver is free software, covered by the GNU General Public License.\n"
1229 "This gdbserver was configured as \"%s\"\n",
1230 PKGVERSION
, version
, host_name
);
1234 gdbserver_usage (FILE *stream
)
1236 fprintf (stream
, "Usage:\tgdbserver [OPTIONS] COMM PROG [ARGS ...]\n"
1237 "\tgdbserver [OPTIONS] --attach COMM PID\n"
1238 "\tgdbserver [OPTIONS] --multi COMM\n"
1240 "COMM may either be a tty device (for serial debugging), or \n"
1241 "HOST:PORT to listen for a TCP connection.\n"
1244 " --debug\t\tEnable debugging output.\n"
1245 " --version\t\tDisplay version information and exit.\n"
1246 " --wrapper WRAPPER --\tRun WRAPPER to start new programs.\n");
1247 if (REPORT_BUGS_TO
[0] && stream
== stdout
)
1248 fprintf (stream
, "Report bugs to \"%s\".\n", REPORT_BUGS_TO
);
1252 gdbserver_show_disableable (FILE *stream
)
1254 fprintf (stream
, "Disableable packets:\n"
1255 " vCont \tAll vCont packets\n"
1256 " qC \tQuerying the current thread\n"
1257 " qfThreadInfo\tThread listing\n"
1258 " Tthread \tPassing the thread specifier in the T stop reply packet\n"
1259 " threads \tAll of the above\n");
1263 #undef require_running
1264 #define require_running(BUF) \
1265 if (!target_running ()) \
1272 main (int argc
, char *argv
[])
1274 char ch
, status
, *own_buf
;
1275 unsigned char *mem_buf
;
1282 char *arg_end
, *port
;
1283 char **next_arg
= &argv
[1];
1288 while (*next_arg
!= NULL
&& **next_arg
== '-')
1290 if (strcmp (*next_arg
, "--version") == 0)
1292 gdbserver_version ();
1295 else if (strcmp (*next_arg
, "--help") == 0)
1297 gdbserver_usage (stdout
);
1300 else if (strcmp (*next_arg
, "--attach") == 0)
1302 else if (strcmp (*next_arg
, "--multi") == 0)
1304 else if (strcmp (*next_arg
, "--wrapper") == 0)
1308 wrapper_argv
= next_arg
;
1309 while (*next_arg
!= NULL
&& strcmp (*next_arg
, "--") != 0)
1312 if (next_arg
== wrapper_argv
|| *next_arg
== NULL
)
1314 gdbserver_usage (stderr
);
1318 /* Consume the "--". */
1321 else if (strcmp (*next_arg
, "--debug") == 0)
1323 else if (strcmp (*next_arg
, "--disable-packet") == 0)
1325 gdbserver_show_disableable (stdout
);
1328 else if (strncmp (*next_arg
,
1329 "--disable-packet=",
1330 sizeof ("--disable-packet=") - 1) == 0)
1332 char *packets
, *tok
;
1334 packets
= *next_arg
+= sizeof ("--disable-packet=") - 1;
1335 for (tok
= strtok (packets
, ",");
1337 tok
= strtok (NULL
, ","))
1339 if (strcmp ("vCont", tok
) == 0)
1340 disable_packet_vCont
= 1;
1341 else if (strcmp ("Tthread", tok
) == 0)
1342 disable_packet_Tthread
= 1;
1343 else if (strcmp ("qC", tok
) == 0)
1344 disable_packet_qC
= 1;
1345 else if (strcmp ("qfThreadInfo", tok
) == 0)
1346 disable_packet_qfThreadInfo
= 1;
1347 else if (strcmp ("threads", tok
) == 0)
1349 disable_packet_vCont
= 1;
1350 disable_packet_Tthread
= 1;
1351 disable_packet_qC
= 1;
1352 disable_packet_qfThreadInfo
= 1;
1356 fprintf (stderr
, "Don't know how to disable \"%s\".\n\n",
1358 gdbserver_show_disableable (stderr
);
1365 fprintf (stderr
, "Unknown argument: %s\n", *next_arg
);
1373 if (setjmp (toplevel
))
1375 fprintf (stderr
, "Exiting\n");
1381 if (port
== NULL
|| (!attach
&& !multi_mode
&& *next_arg
== NULL
))
1383 gdbserver_usage (stderr
);
1390 /* --attach used to come after PORT, so allow it there for
1392 if (*next_arg
!= NULL
&& strcmp (*next_arg
, "--attach") == 0)
1399 && (*next_arg
== NULL
1400 || (*next_arg
)[0] == '\0'
1401 || (pid
= strtoul (*next_arg
, &arg_end
, 0)) == 0
1403 || next_arg
[1] != NULL
))
1408 gdbserver_usage (stderr
);
1412 initialize_async_io ();
1415 own_buf
= malloc (PBUFSIZ
+ 1);
1416 mem_buf
= malloc (PBUFSIZ
);
1418 if (pid
== 0 && *next_arg
!= NULL
)
1422 n
= argc
- (next_arg
- argv
);
1423 program_argv
= malloc (sizeof (char *) * (n
+ 1));
1424 for (i
= 0; i
< n
; i
++)
1425 program_argv
[i
] = strdup (next_arg
[i
]);
1426 program_argv
[i
] = NULL
;
1428 /* Wait till we are at first instruction in program. */
1429 signal
= start_inferior (program_argv
, &status
);
1431 /* We are now (hopefully) stopped at the first instruction of
1432 the target process. This assumes that the target process was
1433 successfully created. */
1437 if (attach_inferior (pid
, &status
, &signal
) == -1)
1438 error ("Attaching not supported on this target");
1440 /* Otherwise succeeded. */
1448 /* Don't report shared library events on the initial connection,
1449 even if some libraries are preloaded. Avoids the "stopped by
1450 shared library event" notice on gdb side. */
1453 if (setjmp (toplevel
))
1455 fprintf (stderr
, "Killing inferior\n");
1460 if (status
== 'W' || status
== 'X')
1465 if (!was_running
&& !multi_mode
)
1467 fprintf (stderr
, "No program to debug. GDBserver exiting.\n");
1477 if (setjmp (toplevel
) != 0)
1479 /* An error occurred. */
1480 if (response_needed
)
1482 write_enn (own_buf
);
1487 disable_async_io ();
1488 while (!exit_requested
)
1492 int new_packet_len
= -1;
1494 response_needed
= 0;
1495 packet_len
= getpkt (own_buf
);
1496 if (packet_len
<= 0)
1498 response_needed
= 1;
1505 handle_query (own_buf
, packet_len
, &new_packet_len
);
1508 handle_general_set (own_buf
);
1511 require_running (own_buf
);
1512 fprintf (stderr
, "Detaching from inferior\n");
1513 if (detach_inferior () != 0)
1514 write_enn (own_buf
);
1519 if (extended_protocol
)
1521 /* Treat this like a normal program exit. */
1530 /* If we are attached, then we can exit. Otherwise, we
1531 need to hang around doing nothing, until the child
1541 extended_protocol
= 1;
1545 prepare_resume_reply (own_buf
, status
, signal
);
1548 if (own_buf
[1] == 'c' || own_buf
[1] == 'g' || own_buf
[1] == 's')
1550 unsigned long gdb_id
, thread_id
;
1552 require_running (own_buf
);
1553 gdb_id
= strtoul (&own_buf
[2], NULL
, 16);
1554 if (gdb_id
== 0 || gdb_id
== -1)
1558 thread_id
= gdb_id_to_thread_id (gdb_id
);
1561 write_enn (own_buf
);
1566 if (own_buf
[1] == 'g')
1568 general_thread
= thread_id
;
1569 set_desired_inferior (1);
1571 else if (own_buf
[1] == 'c')
1572 cont_thread
= thread_id
;
1573 else if (own_buf
[1] == 's')
1574 step_thread
= thread_id
;
1580 /* Silently ignore it so that gdb can extend the protocol
1581 without compatibility headaches. */
1586 require_running (own_buf
);
1587 set_desired_inferior (1);
1588 registers_to_string (own_buf
);
1591 require_running (own_buf
);
1592 set_desired_inferior (1);
1593 registers_from_string (&own_buf
[1]);
1597 require_running (own_buf
);
1598 decode_m_packet (&own_buf
[1], &mem_addr
, &len
);
1599 if (read_inferior_memory (mem_addr
, mem_buf
, len
) == 0)
1600 convert_int_to_ascii (mem_buf
, own_buf
, len
);
1602 write_enn (own_buf
);
1605 require_running (own_buf
);
1606 decode_M_packet (&own_buf
[1], &mem_addr
, &len
, mem_buf
);
1607 if (write_inferior_memory (mem_addr
, mem_buf
, len
) == 0)
1610 write_enn (own_buf
);
1613 require_running (own_buf
);
1614 if (decode_X_packet (&own_buf
[1], packet_len
- 1,
1615 &mem_addr
, &len
, mem_buf
) < 0
1616 || write_inferior_memory (mem_addr
, mem_buf
, len
) != 0)
1617 write_enn (own_buf
);
1622 require_running (own_buf
);
1623 convert_ascii_to_int (own_buf
+ 1, &sig
, 1);
1624 if (target_signal_to_host_p (sig
))
1625 signal
= target_signal_to_host (sig
);
1628 myresume (own_buf
, 0, &signal
, &status
);
1631 require_running (own_buf
);
1632 convert_ascii_to_int (own_buf
+ 1, &sig
, 1);
1633 if (target_signal_to_host_p (sig
))
1634 signal
= target_signal_to_host (sig
);
1637 myresume (own_buf
, 1, &signal
, &status
);
1640 require_running (own_buf
);
1642 myresume (own_buf
, 0, &signal
, &status
);
1645 require_running (own_buf
);
1647 myresume (own_buf
, 1, &signal
, &status
);
1653 CORE_ADDR addr
= strtoul (&own_buf
[3], &lenptr
, 16);
1654 int len
= strtol (lenptr
+ 1, &dataptr
, 16);
1655 char type
= own_buf
[1];
1657 if (the_target
->insert_watchpoint
== NULL
1658 || (type
< '2' || type
> '4'))
1660 /* No watchpoint support or not a watchpoint command;
1661 unrecognized either way. */
1668 require_running (own_buf
);
1669 res
= (*the_target
->insert_watchpoint
) (type
, addr
, len
);
1676 write_enn (own_buf
);
1684 CORE_ADDR addr
= strtoul (&own_buf
[3], &lenptr
, 16);
1685 int len
= strtol (lenptr
+ 1, &dataptr
, 16);
1686 char type
= own_buf
[1];
1688 if (the_target
->remove_watchpoint
== NULL
1689 || (type
< '2' || type
> '4'))
1691 /* No watchpoint support or not a watchpoint command;
1692 unrecognized either way. */
1699 require_running (own_buf
);
1700 res
= (*the_target
->remove_watchpoint
) (type
, addr
, len
);
1707 write_enn (own_buf
);
1712 response_needed
= 0;
1713 if (!target_running ())
1714 /* The packet we received doesn't make sense - but we
1715 can't reply to it, either. */
1718 fprintf (stderr
, "Killing inferior\n");
1721 /* When using the extended protocol, we wait with no
1722 program running. The traditional protocol will exit
1724 if (extended_protocol
)
1727 signal
= TARGET_SIGNAL_KILL
;
1738 unsigned long gdb_id
, thread_id
;
1740 require_running (own_buf
);
1741 gdb_id
= strtoul (&own_buf
[1], NULL
, 16);
1742 thread_id
= gdb_id_to_thread_id (gdb_id
);
1745 write_enn (own_buf
);
1749 if (mythread_alive (thread_id
))
1752 write_enn (own_buf
);
1756 response_needed
= 0;
1758 /* Restarting the inferior is only supported in the
1759 extended protocol. */
1760 if (extended_protocol
)
1762 if (target_running ())
1764 fprintf (stderr
, "GDBserver restarting\n");
1766 /* Wait till we are at 1st instruction in prog. */
1767 if (program_argv
!= NULL
)
1768 signal
= start_inferior (program_argv
, &status
);
1772 signal
= TARGET_SIGNAL_KILL
;
1778 /* It is a request we don't understand. Respond with an
1779 empty packet so that gdb knows that we don't support this
1785 /* Extended (long) request. */
1786 handle_v_requests (own_buf
, &status
, &signal
,
1787 packet_len
, &new_packet_len
);
1791 /* It is a request we don't understand. Respond with an
1792 empty packet so that gdb knows that we don't support this
1798 if (new_packet_len
!= -1)
1799 putpkt_binary (own_buf
, new_packet_len
);
1803 response_needed
= 0;
1805 if (was_running
&& (status
== 'W' || status
== 'X'))
1811 "\nChild exited with status %d\n", signal
);
1813 fprintf (stderr
, "\nChild terminated with signal = 0x%x (%s)\n",
1814 target_signal_to_host (signal
),
1815 target_signal_to_name (signal
));
1817 if (extended_protocol
)
1821 fprintf (stderr
, "GDBserver exiting\n");
1826 if (status
!= 'W' && status
!= 'X')
1830 /* If an exit was requested (using the "monitor exit" command),
1831 terminate now. The only other way to get here is for
1832 getpkt to fail; close the connection and reopen it at the
1838 if (attached
&& target_running ())
1840 else if (target_running ())
1846 fprintf (stderr
, "Remote side has terminated connection. "
1847 "GDBserver will reopen the connection.\n");