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 /* Otherwise we didn't know what packet it was. Say we didn't
279 get_features_xml (const char *annex
)
281 /* gdbserver_xmltarget defines what to return when looking
282 for the "target.xml" file. Its contents can either be
283 verbatim XML code (prefixed with a '@') or else the name
284 of the actual XML file to be used in place of "target.xml".
286 This variable is set up from the auto-generated
287 init_registers_... routine for the current target. */
289 if (gdbserver_xmltarget
290 && strcmp (annex
, "target.xml") == 0)
292 if (*gdbserver_xmltarget
== '@')
293 return gdbserver_xmltarget
+ 1;
295 annex
= gdbserver_xmltarget
;
300 extern const char *const xml_builtin
[][2];
303 /* Look for the annex. */
304 for (i
= 0; xml_builtin
[i
][0] != NULL
; i
++)
305 if (strcmp (annex
, xml_builtin
[i
][0]) == 0)
308 if (xml_builtin
[i
][0] != NULL
)
309 return xml_builtin
[i
][1];
317 monitor_show_help (void)
319 monitor_output ("The following monitor commands are supported:\n");
320 monitor_output (" set debug <0|1>\n");
321 monitor_output (" Enable general debugging messages\n");
322 monitor_output (" set remote-debug <0|1>\n");
323 monitor_output (" Enable remote protocol debugging messages\n");
324 monitor_output (" exit\n");
325 monitor_output (" Quit GDBserver\n");
328 /* Subroutine of handle_search_memory to simplify it. */
331 handle_search_memory_1 (CORE_ADDR start_addr
, CORE_ADDR search_space_len
,
332 gdb_byte
*pattern
, unsigned pattern_len
,
333 gdb_byte
*search_buf
,
334 unsigned chunk_size
, unsigned search_buf_size
,
335 CORE_ADDR
*found_addrp
)
337 /* Prime the search buffer. */
339 if (read_inferior_memory (start_addr
, search_buf
, search_buf_size
) != 0)
341 warning ("Unable to access target memory at 0x%lx, halting search.",
346 /* Perform the search.
348 The loop is kept simple by allocating [N + pattern-length - 1] bytes.
349 When we've scanned N bytes we copy the trailing bytes to the start and
350 read in another N bytes. */
352 while (search_space_len
>= pattern_len
)
355 unsigned nr_search_bytes
= (search_space_len
< search_buf_size
359 found_ptr
= memmem (search_buf
, nr_search_bytes
, pattern
, pattern_len
);
361 if (found_ptr
!= NULL
)
363 CORE_ADDR found_addr
= start_addr
+ (found_ptr
- search_buf
);
364 *found_addrp
= found_addr
;
368 /* Not found in this chunk, skip to next chunk. */
370 /* Don't let search_space_len wrap here, it's unsigned. */
371 if (search_space_len
>= chunk_size
)
372 search_space_len
-= chunk_size
;
374 search_space_len
= 0;
376 if (search_space_len
>= pattern_len
)
378 unsigned keep_len
= search_buf_size
- chunk_size
;
379 CORE_ADDR read_addr
= start_addr
+ keep_len
;
382 /* Copy the trailing part of the previous iteration to the front
383 of the buffer for the next iteration. */
384 memcpy (search_buf
, search_buf
+ chunk_size
, keep_len
);
386 nr_to_read
= (search_space_len
- keep_len
< chunk_size
387 ? search_space_len
- keep_len
390 if (read_inferior_memory (read_addr
, search_buf
+ keep_len
,
393 warning ("Unable to access target memory at 0x%lx, halting search.",
398 start_addr
+= chunk_size
;
407 /* Handle qSearch:memory packets. */
410 handle_search_memory (char *own_buf
, int packet_len
)
412 CORE_ADDR start_addr
;
413 CORE_ADDR search_space_len
;
415 unsigned int pattern_len
;
416 /* NOTE: also defined in find.c testcase. */
417 #define SEARCH_CHUNK_SIZE 16000
418 const unsigned chunk_size
= SEARCH_CHUNK_SIZE
;
419 /* Buffer to hold memory contents for searching. */
420 gdb_byte
*search_buf
;
421 unsigned search_buf_size
;
423 CORE_ADDR found_addr
;
424 int cmd_name_len
= sizeof ("qSearch:memory:") - 1;
426 pattern
= malloc (packet_len
);
429 error ("Unable to allocate memory to perform the search");
430 strcpy (own_buf
, "E00");
433 if (decode_search_memory_packet (own_buf
+ cmd_name_len
,
434 packet_len
- cmd_name_len
,
435 &start_addr
, &search_space_len
,
436 pattern
, &pattern_len
) < 0)
439 error ("Error in parsing qSearch:memory packet");
440 strcpy (own_buf
, "E00");
444 search_buf_size
= chunk_size
+ pattern_len
- 1;
446 /* No point in trying to allocate a buffer larger than the search space. */
447 if (search_space_len
< search_buf_size
)
448 search_buf_size
= search_space_len
;
450 search_buf
= malloc (search_buf_size
);
451 if (search_buf
== NULL
)
454 error ("Unable to allocate memory to perform the search");
455 strcpy (own_buf
, "E00");
459 found
= handle_search_memory_1 (start_addr
, search_space_len
,
460 pattern
, pattern_len
,
461 search_buf
, chunk_size
, search_buf_size
,
465 sprintf (own_buf
, "1,%lx", (long) found_addr
);
467 strcpy (own_buf
, "0");
469 strcpy (own_buf
, "E00");
475 #define require_running(BUF) \
476 if (!target_running ()) \
482 /* Handle all of the extended 'q' packets. */
484 handle_query (char *own_buf
, int packet_len
, int *new_packet_len_p
)
486 static struct inferior_list_entry
*thread_ptr
;
488 /* Reply the current thread id. */
489 if (strcmp ("qC", own_buf
) == 0 && !disable_packet_qC
)
491 require_running (own_buf
);
492 thread_ptr
= all_threads
.head
;
493 sprintf (own_buf
, "QC%x",
494 thread_to_gdb_id ((struct thread_info
*)thread_ptr
));
498 if (strcmp ("qSymbol::", own_buf
) == 0)
500 if (target_running () && the_target
->look_up_symbols
!= NULL
)
501 (*the_target
->look_up_symbols
) ();
503 strcpy (own_buf
, "OK");
507 if (!disable_packet_qfThreadInfo
)
509 if (strcmp ("qfThreadInfo", own_buf
) == 0)
511 require_running (own_buf
);
512 thread_ptr
= all_threads
.head
;
513 sprintf (own_buf
, "m%x", thread_to_gdb_id ((struct thread_info
*)thread_ptr
));
514 thread_ptr
= thread_ptr
->next
;
518 if (strcmp ("qsThreadInfo", own_buf
) == 0)
520 require_running (own_buf
);
521 if (thread_ptr
!= NULL
)
523 sprintf (own_buf
, "m%x", thread_to_gdb_id ((struct thread_info
*)thread_ptr
));
524 thread_ptr
= thread_ptr
->next
;
529 sprintf (own_buf
, "l");
535 if (the_target
->read_offsets
!= NULL
536 && strcmp ("qOffsets", own_buf
) == 0)
538 CORE_ADDR text
, data
;
540 require_running (own_buf
);
541 if (the_target
->read_offsets (&text
, &data
))
542 sprintf (own_buf
, "Text=%lX;Data=%lX;Bss=%lX",
543 (long)text
, (long)data
, (long)data
);
550 if (the_target
->qxfer_spu
!= NULL
551 && strncmp ("qXfer:spu:read:", own_buf
, 15) == 0)
557 unsigned char *spu_buf
;
559 require_running (own_buf
);
560 strcpy (own_buf
, "E00");
561 if (decode_xfer_read (own_buf
+ 15, &annex
, &ofs
, &len
) < 0)
563 if (len
> PBUFSIZ
- 2)
565 spu_buf
= malloc (len
+ 1);
569 n
= (*the_target
->qxfer_spu
) (annex
, spu_buf
, NULL
, ofs
, len
+ 1);
573 *new_packet_len_p
= write_qxfer_response
574 (own_buf
, spu_buf
, len
, 1);
576 *new_packet_len_p
= write_qxfer_response
577 (own_buf
, spu_buf
, n
, 0);
583 if (the_target
->qxfer_spu
!= NULL
584 && strncmp ("qXfer:spu:write:", own_buf
, 16) == 0)
590 unsigned char *spu_buf
;
592 require_running (own_buf
);
593 strcpy (own_buf
, "E00");
594 spu_buf
= malloc (packet_len
- 15);
597 if (decode_xfer_write (own_buf
+ 16, packet_len
- 16, &annex
,
598 &ofs
, &len
, spu_buf
) < 0)
604 n
= (*the_target
->qxfer_spu
)
605 (annex
, NULL
, (unsigned const char *)spu_buf
, ofs
, len
);
609 sprintf (own_buf
, "%x", n
);
615 if (the_target
->read_auxv
!= NULL
616 && strncmp ("qXfer:auxv:read:", own_buf
, 16) == 0)
624 require_running (own_buf
);
626 /* Reject any annex; grab the offset and length. */
627 if (decode_xfer_read (own_buf
+ 16, &annex
, &ofs
, &len
) < 0
630 strcpy (own_buf
, "E00");
634 /* Read one extra byte, as an indicator of whether there is
636 if (len
> PBUFSIZ
- 2)
638 data
= malloc (len
+ 1);
639 n
= (*the_target
->read_auxv
) (ofs
, data
, len
+ 1);
643 *new_packet_len_p
= write_qxfer_response (own_buf
, data
, len
, 1);
645 *new_packet_len_p
= write_qxfer_response (own_buf
, data
, n
, 0);
652 if (strncmp ("qXfer:features:read:", own_buf
, 20) == 0)
655 unsigned int len
, total_len
;
656 const char *document
;
659 require_running (own_buf
);
661 /* Grab the annex, offset, and length. */
662 if (decode_xfer_read (own_buf
+ 20, &annex
, &ofs
, &len
) < 0)
664 strcpy (own_buf
, "E00");
668 /* Now grab the correct annex. */
669 document
= get_features_xml (annex
);
670 if (document
== NULL
)
672 strcpy (own_buf
, "E00");
676 total_len
= strlen (document
);
677 if (len
> PBUFSIZ
- 2)
682 else if (len
< total_len
- ofs
)
683 *new_packet_len_p
= write_qxfer_response (own_buf
, document
+ ofs
,
686 *new_packet_len_p
= write_qxfer_response (own_buf
, document
+ ofs
,
692 if (strncmp ("qXfer:libraries:read:", own_buf
, 21) == 0)
695 unsigned int len
, total_len
;
697 struct inferior_list_entry
*dll_ptr
;
700 require_running (own_buf
);
702 /* Reject any annex; grab the offset and length. */
703 if (decode_xfer_read (own_buf
+ 21, &annex
, &ofs
, &len
) < 0
706 strcpy (own_buf
, "E00");
710 /* Over-estimate the necessary memory. Assume that every character
711 in the library name must be escaped. */
713 for (dll_ptr
= all_dlls
.head
; dll_ptr
!= NULL
; dll_ptr
= dll_ptr
->next
)
714 total_len
+= 128 + 6 * strlen (((struct dll_info
*) dll_ptr
)->name
);
716 document
= malloc (total_len
);
717 strcpy (document
, "<library-list>\n");
718 p
= document
+ strlen (document
);
720 for (dll_ptr
= all_dlls
.head
; dll_ptr
!= NULL
; dll_ptr
= dll_ptr
->next
)
722 struct dll_info
*dll
= (struct dll_info
*) dll_ptr
;
725 strcpy (p
, " <library name=\"");
727 name
= xml_escape_text (dll
->name
);
731 strcpy (p
, "\"><segment address=\"");
733 sprintf (p
, "0x%lx", (long) dll
->base_addr
);
735 strcpy (p
, "\"/></library>\n");
739 strcpy (p
, "</library-list>\n");
741 total_len
= strlen (document
);
742 if (len
> PBUFSIZ
- 2)
747 else if (len
< total_len
- ofs
)
748 *new_packet_len_p
= write_qxfer_response (own_buf
, document
+ ofs
,
751 *new_packet_len_p
= write_qxfer_response (own_buf
, document
+ ofs
,
758 /* Protocol features query. */
759 if (strncmp ("qSupported", own_buf
, 10) == 0
760 && (own_buf
[10] == ':' || own_buf
[10] == '\0'))
762 sprintf (own_buf
, "PacketSize=%x;QPassSignals+", PBUFSIZ
- 1);
764 /* We do not have any hook to indicate whether the target backend
765 supports qXfer:libraries:read, so always report it. */
766 strcat (own_buf
, ";qXfer:libraries:read+");
768 if (the_target
->read_auxv
!= NULL
)
769 strcat (own_buf
, ";qXfer:auxv:read+");
771 if (the_target
->qxfer_spu
!= NULL
)
772 strcat (own_buf
, ";qXfer:spu:read+;qXfer:spu:write+");
774 /* We always report qXfer:features:read, as targets may
775 install XML files on a subsequent call to arch_setup.
776 If we reported to GDB on startup that we don't support
777 qXfer:feature:read at all, we will never be re-queried. */
778 strcat (own_buf
, ";qXfer:features:read+");
783 /* Thread-local storage support. */
784 if (the_target
->get_tls_address
!= NULL
785 && strncmp ("qGetTLSAddr:", own_buf
, 12) == 0)
787 char *p
= own_buf
+ 12;
788 CORE_ADDR parts
[3], address
= 0;
791 require_running (own_buf
);
793 for (i
= 0; i
< 3; i
++)
801 p2
= strchr (p
, ',');
813 decode_address (&parts
[i
], p
, len
);
817 if (p
!= NULL
|| i
< 3)
821 struct thread_info
*thread
= gdb_id_to_thread (parts
[0]);
826 err
= the_target
->get_tls_address (thread
, parts
[1], parts
[2],
832 sprintf (own_buf
, "%llx", address
);
841 /* Otherwise, pretend we do not understand this packet. */
844 /* Handle "monitor" commands. */
845 if (strncmp ("qRcmd,", own_buf
, 6) == 0)
847 char *mon
= malloc (PBUFSIZ
);
848 int len
= strlen (own_buf
+ 6);
850 if ((len
% 2) != 0 || unhexify (mon
, own_buf
+ 6, len
/ 2) != len
/ 2)
860 if (strcmp (mon
, "set debug 1") == 0)
863 monitor_output ("Debug output enabled.\n");
865 else if (strcmp (mon
, "set debug 0") == 0)
868 monitor_output ("Debug output disabled.\n");
870 else if (strcmp (mon
, "set remote-debug 1") == 0)
873 monitor_output ("Protocol debug output enabled.\n");
875 else if (strcmp (mon
, "set remote-debug 0") == 0)
878 monitor_output ("Protocol debug output disabled.\n");
880 else if (strcmp (mon
, "help") == 0)
881 monitor_show_help ();
882 else if (strcmp (mon
, "exit") == 0)
886 monitor_output ("Unknown monitor command.\n\n");
887 monitor_show_help ();
895 if (strncmp ("qSearch:memory:", own_buf
, sizeof ("qSearch:memory:") - 1) == 0)
897 require_running (own_buf
);
898 handle_search_memory (own_buf
, packet_len
);
902 /* Otherwise we didn't know what packet it was. Say we didn't
907 /* Parse vCont packets. */
909 handle_v_cont (char *own_buf
, char *status
, int *signal
)
913 struct thread_resume
*resume_info
, default_action
;
915 /* Count the number of semicolons in the packet. There should be one
924 /* Allocate room for one extra action, for the default remain-stopped
925 behavior; if no default action is in the list, we'll need the extra
927 resume_info
= malloc ((n
+ 1) * sizeof (resume_info
[0]));
929 default_action
.thread
= -1;
930 default_action
.leave_stopped
= 1;
931 default_action
.step
= 0;
932 default_action
.sig
= 0;
940 resume_info
[i
].leave_stopped
= 0;
942 if (p
[0] == 's' || p
[0] == 'S')
943 resume_info
[i
].step
= 1;
944 else if (p
[0] == 'c' || p
[0] == 'C')
945 resume_info
[i
].step
= 0;
949 if (p
[0] == 'S' || p
[0] == 'C')
952 sig
= strtol (p
+ 1, &q
, 16);
957 if (!target_signal_to_host_p (sig
))
959 resume_info
[i
].sig
= target_signal_to_host (sig
);
963 resume_info
[i
].sig
= 0;
969 resume_info
[i
].thread
= -1;
970 default_action
= resume_info
[i
];
972 /* Note: we don't increment i here, we'll overwrite this entry
973 the next time through. */
975 else if (p
[0] == ':')
977 unsigned int gdb_id
= strtoul (p
+ 1, &q
, 16);
978 unsigned long thread_id
;
983 if (p
[0] != ';' && p
[0] != 0)
986 thread_id
= gdb_id_to_thread_id (gdb_id
);
988 resume_info
[i
].thread
= thread_id
;
996 resume_info
[i
] = default_action
;
998 /* Still used in occasional places in the backend. */
999 if (n
== 1 && resume_info
[0].thread
!= -1)
1000 cont_thread
= resume_info
[0].thread
;
1003 set_desired_inferior (0);
1006 (*the_target
->resume
) (resume_info
);
1010 *signal
= mywait (status
, 1);
1011 prepare_resume_reply (own_buf
, *status
, *signal
);
1012 disable_async_io ();
1016 write_enn (own_buf
);
1021 /* Attach to a new program. Return 1 if successful, 0 if failure. */
1023 handle_v_attach (char *own_buf
, char *status
, int *signal
)
1027 pid
= strtol (own_buf
+ 8, NULL
, 16);
1028 if (pid
!= 0 && attach_inferior (pid
, status
, signal
) == 0)
1030 /* Don't report shared library events after attaching, even if
1031 some libraries are preloaded. GDB will always poll the
1032 library list. Avoids the "stopped by shared library event"
1033 notice on the GDB side. */
1035 prepare_resume_reply (own_buf
, *status
, *signal
);
1040 write_enn (own_buf
);
1045 /* Run a new program. Return 1 if successful, 0 if failure. */
1047 handle_v_run (char *own_buf
, char *status
, int *signal
)
1049 char *p
, **pp
, *next_p
, **new_argv
;
1053 for (p
= own_buf
+ strlen ("vRun;"); p
&& *p
; p
= strchr (p
, ';'))
1059 new_argv
= malloc ((new_argc
+ 2) * sizeof (char *));
1061 for (p
= own_buf
+ strlen ("vRun;"); *p
; p
= next_p
)
1063 next_p
= strchr (p
, ';');
1065 next_p
= p
+ strlen (p
);
1067 if (i
== 0 && p
== next_p
)
1071 new_argv
[i
] = malloc (1 + (next_p
- p
) / 2);
1072 unhexify (new_argv
[i
], p
, (next_p
- p
) / 2);
1073 new_argv
[i
][(next_p
- p
) / 2] = '\0';
1082 if (new_argv
[0] == NULL
)
1084 if (program_argv
== NULL
)
1086 write_enn (own_buf
);
1090 new_argv
[0] = strdup (program_argv
[0]);
1093 /* Free the old argv. */
1096 for (pp
= program_argv
; *pp
!= NULL
; pp
++)
1098 free (program_argv
);
1100 program_argv
= new_argv
;
1102 *signal
= start_inferior (program_argv
, status
);
1105 prepare_resume_reply (own_buf
, *status
, *signal
);
1110 write_enn (own_buf
);
1115 /* Handle all of the extended 'v' packets. */
1117 handle_v_requests (char *own_buf
, char *status
, int *signal
,
1118 int packet_len
, int *new_packet_len
)
1120 if (!disable_packet_vCont
)
1122 if (strncmp (own_buf
, "vCont;", 6) == 0)
1124 require_running (own_buf
);
1125 handle_v_cont (own_buf
, status
, signal
);
1129 if (strncmp (own_buf
, "vCont?", 6) == 0)
1131 strcpy (own_buf
, "vCont;c;C;s;S");
1136 if (strncmp (own_buf
, "vFile:", 6) == 0
1137 && handle_vFile (own_buf
, packet_len
, new_packet_len
))
1140 if (strncmp (own_buf
, "vAttach;", 8) == 0)
1142 if (target_running ())
1144 fprintf (stderr
, "Already debugging a process\n");
1145 write_enn (own_buf
);
1148 handle_v_attach (own_buf
, status
, signal
);
1152 if (strncmp (own_buf
, "vRun;", 5) == 0)
1154 if (target_running ())
1156 fprintf (stderr
, "Already debugging a process\n");
1157 write_enn (own_buf
);
1160 handle_v_run (own_buf
, status
, signal
);
1164 /* Otherwise we didn't know what packet it was. Say we didn't
1171 myresume (char *own_buf
, int step
, int *signalp
, char *statusp
)
1173 struct thread_resume resume_info
[2];
1177 set_desired_inferior (0);
1179 if (step
|| sig
|| (cont_thread
!= 0 && cont_thread
!= -1))
1181 resume_info
[0].thread
1182 = ((struct inferior_list_entry
*) current_inferior
)->id
;
1183 resume_info
[0].step
= step
;
1184 resume_info
[0].sig
= sig
;
1185 resume_info
[0].leave_stopped
= 0;
1188 resume_info
[n
].thread
= -1;
1189 resume_info
[n
].step
= 0;
1190 resume_info
[n
].sig
= 0;
1191 resume_info
[n
].leave_stopped
= (cont_thread
!= 0 && cont_thread
!= -1);
1194 (*the_target
->resume
) (resume_info
);
1195 *signalp
= mywait (statusp
, 1);
1196 prepare_resume_reply (own_buf
, *statusp
, *signalp
);
1197 disable_async_io ();
1201 gdbserver_version (void)
1203 printf ("GNU gdbserver %s%s\n"
1204 "Copyright (C) 2007 Free Software Foundation, Inc.\n"
1205 "gdbserver is free software, covered by the GNU General Public License.\n"
1206 "This gdbserver was configured as \"%s\"\n",
1207 PKGVERSION
, version
, host_name
);
1211 gdbserver_usage (FILE *stream
)
1213 fprintf (stream
, "Usage:\tgdbserver [OPTIONS] COMM PROG [ARGS ...]\n"
1214 "\tgdbserver [OPTIONS] --attach COMM PID\n"
1215 "\tgdbserver [OPTIONS] --multi COMM\n"
1217 "COMM may either be a tty device (for serial debugging), or \n"
1218 "HOST:PORT to listen for a TCP connection.\n"
1221 " --debug\t\tEnable debugging output.\n"
1222 " --version\t\tDisplay version information and exit.\n"
1223 " --wrapper WRAPPER --\tRun WRAPPER to start new programs.\n");
1224 if (REPORT_BUGS_TO
[0] && stream
== stdout
)
1225 fprintf (stream
, "Report bugs to \"%s\".\n", REPORT_BUGS_TO
);
1229 gdbserver_show_disableable (FILE *stream
)
1231 fprintf (stream
, "Disableable packets:\n"
1232 " vCont \tAll vCont packets\n"
1233 " qC \tQuerying the current thread\n"
1234 " qfThreadInfo\tThread listing\n"
1235 " Tthread \tPassing the thread specifier in the T stop reply packet\n"
1236 " threads \tAll of the above\n");
1240 #undef require_running
1241 #define require_running(BUF) \
1242 if (!target_running ()) \
1249 main (int argc
, char *argv
[])
1251 char ch
, status
, *own_buf
;
1252 unsigned char *mem_buf
;
1259 char *arg_end
, *port
;
1260 char **next_arg
= &argv
[1];
1265 while (*next_arg
!= NULL
&& **next_arg
== '-')
1267 if (strcmp (*next_arg
, "--version") == 0)
1269 gdbserver_version ();
1272 else if (strcmp (*next_arg
, "--help") == 0)
1274 gdbserver_usage (stdout
);
1277 else if (strcmp (*next_arg
, "--attach") == 0)
1279 else if (strcmp (*next_arg
, "--multi") == 0)
1281 else if (strcmp (*next_arg
, "--wrapper") == 0)
1285 wrapper_argv
= next_arg
;
1286 while (*next_arg
!= NULL
&& strcmp (*next_arg
, "--") != 0)
1289 if (next_arg
== wrapper_argv
|| *next_arg
== NULL
)
1291 gdbserver_usage (stderr
);
1295 /* Consume the "--". */
1298 else if (strcmp (*next_arg
, "--debug") == 0)
1300 else if (strcmp (*next_arg
, "--disable-packet") == 0)
1302 gdbserver_show_disableable (stdout
);
1305 else if (strncmp (*next_arg
,
1306 "--disable-packet=",
1307 sizeof ("--disable-packet=") - 1) == 0)
1309 char *packets
, *tok
;
1311 packets
= *next_arg
+= sizeof ("--disable-packet=") - 1;
1312 for (tok
= strtok (packets
, ",");
1314 tok
= strtok (NULL
, ","))
1316 if (strcmp ("vCont", tok
) == 0)
1317 disable_packet_vCont
= 1;
1318 else if (strcmp ("Tthread", tok
) == 0)
1319 disable_packet_Tthread
= 1;
1320 else if (strcmp ("qC", tok
) == 0)
1321 disable_packet_qC
= 1;
1322 else if (strcmp ("qfThreadInfo", tok
) == 0)
1323 disable_packet_qfThreadInfo
= 1;
1324 else if (strcmp ("threads", tok
) == 0)
1326 disable_packet_vCont
= 1;
1327 disable_packet_Tthread
= 1;
1328 disable_packet_qC
= 1;
1329 disable_packet_qfThreadInfo
= 1;
1333 fprintf (stderr
, "Don't know how to disable \"%s\".\n\n",
1335 gdbserver_show_disableable (stderr
);
1342 fprintf (stderr
, "Unknown argument: %s\n", *next_arg
);
1350 if (setjmp (toplevel
))
1352 fprintf (stderr
, "Exiting\n");
1358 if (port
== NULL
|| (!attach
&& !multi_mode
&& *next_arg
== NULL
))
1360 gdbserver_usage (stderr
);
1367 /* --attach used to come after PORT, so allow it there for
1369 if (*next_arg
!= NULL
&& strcmp (*next_arg
, "--attach") == 0)
1376 && (*next_arg
== NULL
1377 || (*next_arg
)[0] == '\0'
1378 || (pid
= strtoul (*next_arg
, &arg_end
, 0)) == 0
1380 || next_arg
[1] != NULL
))
1385 gdbserver_usage (stderr
);
1389 initialize_async_io ();
1392 own_buf
= malloc (PBUFSIZ
+ 1);
1393 mem_buf
= malloc (PBUFSIZ
);
1395 if (pid
== 0 && *next_arg
!= NULL
)
1399 n
= argc
- (next_arg
- argv
);
1400 program_argv
= malloc (sizeof (char *) * (n
+ 1));
1401 for (i
= 0; i
< n
; i
++)
1402 program_argv
[i
] = strdup (next_arg
[i
]);
1403 program_argv
[i
] = NULL
;
1405 /* Wait till we are at first instruction in program. */
1406 signal
= start_inferior (program_argv
, &status
);
1408 /* We are now (hopefully) stopped at the first instruction of
1409 the target process. This assumes that the target process was
1410 successfully created. */
1414 if (attach_inferior (pid
, &status
, &signal
) == -1)
1415 error ("Attaching not supported on this target");
1417 /* Otherwise succeeded. */
1425 /* Don't report shared library events on the initial connection,
1426 even if some libraries are preloaded. Avoids the "stopped by
1427 shared library event" notice on gdb side. */
1430 if (setjmp (toplevel
))
1432 fprintf (stderr
, "Killing inferior\n");
1437 if (status
== 'W' || status
== 'X')
1442 if (!was_running
&& !multi_mode
)
1444 fprintf (stderr
, "No program to debug. GDBserver exiting.\n");
1453 if (setjmp (toplevel
) != 0)
1455 /* An error occurred. */
1456 if (response_needed
)
1458 write_enn (own_buf
);
1463 disable_async_io ();
1464 while (!exit_requested
)
1468 int new_packet_len
= -1;
1470 response_needed
= 0;
1471 packet_len
= getpkt (own_buf
);
1472 if (packet_len
<= 0)
1474 response_needed
= 1;
1481 handle_query (own_buf
, packet_len
, &new_packet_len
);
1484 handle_general_set (own_buf
);
1487 require_running (own_buf
);
1488 fprintf (stderr
, "Detaching from inferior\n");
1489 if (detach_inferior () != 0)
1490 write_enn (own_buf
);
1495 if (extended_protocol
)
1497 /* Treat this like a normal program exit. */
1506 /* If we are attached, then we can exit. Otherwise, we
1507 need to hang around doing nothing, until the child
1517 extended_protocol
= 1;
1521 prepare_resume_reply (own_buf
, status
, signal
);
1524 if (own_buf
[1] == 'c' || own_buf
[1] == 'g' || own_buf
[1] == 's')
1526 unsigned long gdb_id
, thread_id
;
1528 require_running (own_buf
);
1529 gdb_id
= strtoul (&own_buf
[2], NULL
, 16);
1530 if (gdb_id
== 0 || gdb_id
== -1)
1534 thread_id
= gdb_id_to_thread_id (gdb_id
);
1537 write_enn (own_buf
);
1542 if (own_buf
[1] == 'g')
1544 general_thread
= thread_id
;
1545 set_desired_inferior (1);
1547 else if (own_buf
[1] == 'c')
1548 cont_thread
= thread_id
;
1549 else if (own_buf
[1] == 's')
1550 step_thread
= thread_id
;
1556 /* Silently ignore it so that gdb can extend the protocol
1557 without compatibility headaches. */
1562 require_running (own_buf
);
1563 set_desired_inferior (1);
1564 registers_to_string (own_buf
);
1567 require_running (own_buf
);
1568 set_desired_inferior (1);
1569 registers_from_string (&own_buf
[1]);
1573 require_running (own_buf
);
1574 decode_m_packet (&own_buf
[1], &mem_addr
, &len
);
1575 if (read_inferior_memory (mem_addr
, mem_buf
, len
) == 0)
1576 convert_int_to_ascii (mem_buf
, own_buf
, len
);
1578 write_enn (own_buf
);
1581 require_running (own_buf
);
1582 decode_M_packet (&own_buf
[1], &mem_addr
, &len
, mem_buf
);
1583 if (write_inferior_memory (mem_addr
, mem_buf
, len
) == 0)
1586 write_enn (own_buf
);
1589 require_running (own_buf
);
1590 if (decode_X_packet (&own_buf
[1], packet_len
- 1,
1591 &mem_addr
, &len
, mem_buf
) < 0
1592 || write_inferior_memory (mem_addr
, mem_buf
, len
) != 0)
1593 write_enn (own_buf
);
1598 require_running (own_buf
);
1599 convert_ascii_to_int (own_buf
+ 1, &sig
, 1);
1600 if (target_signal_to_host_p (sig
))
1601 signal
= target_signal_to_host (sig
);
1604 myresume (own_buf
, 0, &signal
, &status
);
1607 require_running (own_buf
);
1608 convert_ascii_to_int (own_buf
+ 1, &sig
, 1);
1609 if (target_signal_to_host_p (sig
))
1610 signal
= target_signal_to_host (sig
);
1613 myresume (own_buf
, 1, &signal
, &status
);
1616 require_running (own_buf
);
1618 myresume (own_buf
, 0, &signal
, &status
);
1621 require_running (own_buf
);
1623 myresume (own_buf
, 1, &signal
, &status
);
1629 CORE_ADDR addr
= strtoul (&own_buf
[3], &lenptr
, 16);
1630 int len
= strtol (lenptr
+ 1, &dataptr
, 16);
1631 char type
= own_buf
[1];
1633 if (the_target
->insert_watchpoint
== NULL
1634 || (type
< '2' || type
> '4'))
1636 /* No watchpoint support or not a watchpoint command;
1637 unrecognized either way. */
1644 require_running (own_buf
);
1645 res
= (*the_target
->insert_watchpoint
) (type
, addr
, len
);
1652 write_enn (own_buf
);
1660 CORE_ADDR addr
= strtoul (&own_buf
[3], &lenptr
, 16);
1661 int len
= strtol (lenptr
+ 1, &dataptr
, 16);
1662 char type
= own_buf
[1];
1664 if (the_target
->remove_watchpoint
== NULL
1665 || (type
< '2' || type
> '4'))
1667 /* No watchpoint support or not a watchpoint command;
1668 unrecognized either way. */
1675 require_running (own_buf
);
1676 res
= (*the_target
->remove_watchpoint
) (type
, addr
, len
);
1683 write_enn (own_buf
);
1688 response_needed
= 0;
1689 if (!target_running ())
1690 /* The packet we received doesn't make sense - but we
1691 can't reply to it, either. */
1694 fprintf (stderr
, "Killing inferior\n");
1697 /* When using the extended protocol, we wait with no
1698 program running. The traditional protocol will exit
1700 if (extended_protocol
)
1703 signal
= TARGET_SIGNAL_KILL
;
1714 unsigned long gdb_id
, thread_id
;
1716 require_running (own_buf
);
1717 gdb_id
= strtoul (&own_buf
[1], NULL
, 16);
1718 thread_id
= gdb_id_to_thread_id (gdb_id
);
1721 write_enn (own_buf
);
1725 if (mythread_alive (thread_id
))
1728 write_enn (own_buf
);
1732 response_needed
= 0;
1734 /* Restarting the inferior is only supported in the
1735 extended protocol. */
1736 if (extended_protocol
)
1738 if (target_running ())
1740 fprintf (stderr
, "GDBserver restarting\n");
1742 /* Wait till we are at 1st instruction in prog. */
1743 if (program_argv
!= NULL
)
1744 signal
= start_inferior (program_argv
, &status
);
1748 signal
= TARGET_SIGNAL_KILL
;
1754 /* It is a request we don't understand. Respond with an
1755 empty packet so that gdb knows that we don't support this
1761 /* Extended (long) request. */
1762 handle_v_requests (own_buf
, &status
, &signal
,
1763 packet_len
, &new_packet_len
);
1767 /* It is a request we don't understand. Respond with an
1768 empty packet so that gdb knows that we don't support this
1774 if (new_packet_len
!= -1)
1775 putpkt_binary (own_buf
, new_packet_len
);
1779 response_needed
= 0;
1781 if (was_running
&& (status
== 'W' || status
== 'X'))
1787 "\nChild exited with status %d\n", signal
);
1789 fprintf (stderr
, "\nChild terminated with signal = 0x%x (%s)\n",
1790 target_signal_to_host (signal
),
1791 target_signal_to_name (signal
));
1793 if (extended_protocol
)
1797 fprintf (stderr
, "GDBserver exiting\n");
1802 if (status
!= 'W' && status
!= 'X')
1806 /* If an exit was requested (using the "monitor exit" command),
1807 terminate now. The only other way to get here is for
1808 getpkt to fail; close the connection and reopen it at the
1814 if (attached
&& target_running ())
1816 else if (target_running ())
1822 fprintf (stderr
, "Remote side has terminated connection. "
1823 "GDBserver will reopen the connection.\n");