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/>. */
32 unsigned long cont_thread
;
33 unsigned long general_thread
;
34 unsigned long step_thread
;
35 unsigned long thread_from_wait
;
36 unsigned long old_thread_from_wait
;
39 static int extended_protocol
;
41 static int response_needed
;
42 static int exit_requested
;
44 static char **program_argv
, **wrapper_argv
;
46 /* Enable miscellaneous debugging output. The name is historical - it
47 was originally used to debug LinuxThreads support. */
50 int pass_signals
[TARGET_SIGNAL_LAST
];
54 const char *gdbserver_xmltarget
;
56 /* The PID of the originally created or attached inferior. Used to
57 send signals to the process when GDB sends us an asynchronous interrupt
58 (user hitting Control-C in the client), and to wait for the child to exit
59 when no longer debugging it. */
61 unsigned long signal_pid
;
64 /* A file descriptor for the controlling terminal. */
67 /* TERMINAL_FD's original foreground group. */
68 pid_t old_foreground_pgrp
;
70 /* Set if you want to disable optional thread related packets support
71 in gdbserver, for the sake of testing GDB against stubs that don't
73 int disable_packet_vCont
;
74 int disable_packet_Tthread
;
75 int disable_packet_qC
;
76 int disable_packet_qfThreadInfo
;
78 /* Hand back terminal ownership to the original foreground group. */
81 restore_old_foreground_pgrp (void)
83 tcsetpgrp (terminal_fd
, old_foreground_pgrp
);
90 return all_threads
.head
!= NULL
;
94 start_inferior (char **argv
, char *statusptr
)
96 char **new_argv
= argv
;
99 if (wrapper_argv
!= NULL
)
103 for (i
= 0; wrapper_argv
[i
] != NULL
; i
++)
105 for (i
= 0; argv
[i
] != NULL
; i
++)
107 new_argv
= alloca (sizeof (char *) * count
);
109 for (i
= 0; wrapper_argv
[i
] != NULL
; i
++)
110 new_argv
[count
++] = wrapper_argv
[i
];
111 for (i
= 0; argv
[i
] != NULL
; i
++)
112 new_argv
[count
++] = argv
[i
];
113 new_argv
[count
] = NULL
;
117 signal (SIGTTOU
, SIG_DFL
);
118 signal (SIGTTIN
, SIG_DFL
);
121 signal_pid
= create_inferior (new_argv
[0], new_argv
);
123 /* FIXME: we don't actually know at this point that the create
124 actually succeeded. We won't know that until we wait. */
125 fprintf (stderr
, "Process %s created; pid = %ld\n", argv
[0],
130 signal (SIGTTOU
, SIG_IGN
);
131 signal (SIGTTIN
, SIG_IGN
);
132 terminal_fd
= fileno (stderr
);
133 old_foreground_pgrp
= tcgetpgrp (terminal_fd
);
134 tcsetpgrp (terminal_fd
, signal_pid
);
135 atexit (restore_old_foreground_pgrp
);
138 if (wrapper_argv
!= NULL
)
140 struct thread_resume resume_info
;
143 resume_info
.thread
= -1;
144 resume_info
.step
= 0;
146 resume_info
.leave_stopped
= 0;
148 sig
= mywait (statusptr
, 0);
149 if (*statusptr
!= 'T')
154 (*the_target
->resume
) (&resume_info
);
156 sig
= mywait (statusptr
, 0);
157 if (*statusptr
!= 'T')
160 while (sig
!= TARGET_SIGNAL_TRAP
);
165 /* Wait till we are at 1st instruction in program, return signal
166 number (assuming success). */
167 return mywait (statusptr
, 0);
171 attach_inferior (int pid
, char *statusptr
, int *sigptr
)
173 /* myattach should return -1 if attaching is unsupported,
174 0 if it succeeded, and call error() otherwise. */
176 if (myattach (pid
) != 0)
181 fprintf (stderr
, "Attached; pid = %d\n", pid
);
184 /* FIXME - It may be that we should get the SIGNAL_PID from the
185 attach function, so that it can be the main thread instead of
186 whichever we were told to attach to. */
189 *sigptr
= mywait (statusptr
, 0);
191 /* GDB knows to ignore the first SIGSTOP after attaching to a running
192 process using the "attach" command, but this is different; it's
193 just using "target remote". Pretend it's just starting up. */
194 if (*statusptr
== 'T' && *sigptr
== TARGET_SIGNAL_STOP
)
195 *sigptr
= TARGET_SIGNAL_TRAP
;
200 extern int remote_debug
;
202 /* Decode a qXfer read request. Return 0 if everything looks OK,
206 decode_xfer_read (char *buf
, char **annex
, CORE_ADDR
*ofs
, unsigned int *len
)
208 /* Extract and NUL-terminate the annex. */
210 while (*buf
&& *buf
!= ':')
216 /* After the read marker and annex, qXfer looks like a
217 traditional 'm' packet. */
218 decode_m_packet (buf
, ofs
, len
);
223 /* Write the response to a successful qXfer read. Returns the
224 length of the (binary) data stored in BUF, corresponding
225 to as much of DATA/LEN as we could fit. IS_MORE controls
226 the first character of the response. */
228 write_qxfer_response (char *buf
, const void *data
, int len
, int is_more
)
237 return remote_escape_output (data
, len
, (unsigned char *) buf
+ 1, &out_len
,
241 /* Handle all of the extended 'Q' packets. */
243 handle_general_set (char *own_buf
)
245 if (strncmp ("QPassSignals:", own_buf
, strlen ("QPassSignals:")) == 0)
247 int numsigs
= (int) TARGET_SIGNAL_LAST
, i
;
248 const char *p
= own_buf
+ strlen ("QPassSignals:");
251 p
= decode_address_to_semicolon (&cursig
, p
);
252 for (i
= 0; i
< numsigs
; i
++)
258 /* Keep looping, to clear the remaining signals. */
261 p
= decode_address_to_semicolon (&cursig
, p
);
266 strcpy (own_buf
, "OK");
270 /* Otherwise we didn't know what packet it was. Say we didn't
276 get_features_xml (const char *annex
)
278 /* gdbserver_xmltarget defines what to return when looking
279 for the "target.xml" file. Its contents can either be
280 verbatim XML code (prefixed with a '@') or else the name
281 of the actual XML file to be used in place of "target.xml".
283 This variable is set up from the auto-generated
284 init_registers_... routine for the current target. */
286 if (gdbserver_xmltarget
287 && strcmp (annex
, "target.xml") == 0)
289 if (*gdbserver_xmltarget
== '@')
290 return gdbserver_xmltarget
+ 1;
292 annex
= gdbserver_xmltarget
;
297 extern const char *const xml_builtin
[][2];
300 /* Look for the annex. */
301 for (i
= 0; xml_builtin
[i
][0] != NULL
; i
++)
302 if (strcmp (annex
, xml_builtin
[i
][0]) == 0)
305 if (xml_builtin
[i
][0] != NULL
)
306 return xml_builtin
[i
][1];
314 monitor_show_help (void)
316 monitor_output ("The following monitor commands are supported:\n");
317 monitor_output (" set debug <0|1>\n");
318 monitor_output (" Enable general debugging messages\n");
319 monitor_output (" set remote-debug <0|1>\n");
320 monitor_output (" Enable remote protocol debugging messages\n");
321 monitor_output (" exit\n");
322 monitor_output (" Quit GDBserver\n");
325 /* Subroutine of handle_search_memory to simplify it. */
328 handle_search_memory_1 (CORE_ADDR start_addr
, CORE_ADDR search_space_len
,
329 gdb_byte
*pattern
, unsigned pattern_len
,
330 gdb_byte
*search_buf
,
331 unsigned chunk_size
, unsigned search_buf_size
,
332 CORE_ADDR
*found_addrp
)
334 /* Prime the search buffer. */
336 if (read_inferior_memory (start_addr
, search_buf
, search_buf_size
) != 0)
338 warning ("Unable to access target memory at 0x%lx, halting search.",
343 /* Perform the search.
345 The loop is kept simple by allocating [N + pattern-length - 1] bytes.
346 When we've scanned N bytes we copy the trailing bytes to the start and
347 read in another N bytes. */
349 while (search_space_len
>= pattern_len
)
352 unsigned nr_search_bytes
= (search_space_len
< search_buf_size
356 found_ptr
= memmem (search_buf
, nr_search_bytes
, pattern
, pattern_len
);
358 if (found_ptr
!= NULL
)
360 CORE_ADDR found_addr
= start_addr
+ (found_ptr
- search_buf
);
361 *found_addrp
= found_addr
;
365 /* Not found in this chunk, skip to next chunk. */
367 /* Don't let search_space_len wrap here, it's unsigned. */
368 if (search_space_len
>= chunk_size
)
369 search_space_len
-= chunk_size
;
371 search_space_len
= 0;
373 if (search_space_len
>= pattern_len
)
375 unsigned keep_len
= search_buf_size
- chunk_size
;
376 CORE_ADDR read_addr
= start_addr
+ keep_len
;
379 /* Copy the trailing part of the previous iteration to the front
380 of the buffer for the next iteration. */
381 memcpy (search_buf
, search_buf
+ chunk_size
, keep_len
);
383 nr_to_read
= (search_space_len
- keep_len
< chunk_size
384 ? search_space_len
- keep_len
387 if (read_inferior_memory (read_addr
, search_buf
+ keep_len
,
390 warning ("Unable to access target memory at 0x%lx, halting search.",
395 start_addr
+= chunk_size
;
404 /* Handle qSearch:memory packets. */
407 handle_search_memory (char *own_buf
, int packet_len
)
409 CORE_ADDR start_addr
;
410 CORE_ADDR search_space_len
;
412 unsigned int pattern_len
;
413 /* NOTE: also defined in find.c testcase. */
414 #define SEARCH_CHUNK_SIZE 16000
415 const unsigned chunk_size
= SEARCH_CHUNK_SIZE
;
416 /* Buffer to hold memory contents for searching. */
417 gdb_byte
*search_buf
;
418 unsigned search_buf_size
;
420 CORE_ADDR found_addr
;
421 int cmd_name_len
= sizeof ("qSearch:memory:") - 1;
423 pattern
= malloc (packet_len
);
426 error ("Unable to allocate memory to perform the search");
427 strcpy (own_buf
, "E00");
430 if (decode_search_memory_packet (own_buf
+ cmd_name_len
,
431 packet_len
- cmd_name_len
,
432 &start_addr
, &search_space_len
,
433 pattern
, &pattern_len
) < 0)
436 error ("Error in parsing qSearch:memory packet");
437 strcpy (own_buf
, "E00");
441 search_buf_size
= chunk_size
+ pattern_len
- 1;
443 /* No point in trying to allocate a buffer larger than the search space. */
444 if (search_space_len
< search_buf_size
)
445 search_buf_size
= search_space_len
;
447 search_buf
= malloc (search_buf_size
);
448 if (search_buf
== NULL
)
451 error ("Unable to allocate memory to perform the search");
452 strcpy (own_buf
, "E00");
456 found
= handle_search_memory_1 (start_addr
, search_space_len
,
457 pattern
, pattern_len
,
458 search_buf
, chunk_size
, search_buf_size
,
462 sprintf (own_buf
, "1,%lx", (long) found_addr
);
464 strcpy (own_buf
, "0");
466 strcpy (own_buf
, "E00");
472 #define require_running(BUF) \
473 if (!target_running ()) \
479 /* Handle all of the extended 'q' packets. */
481 handle_query (char *own_buf
, int packet_len
, int *new_packet_len_p
)
483 static struct inferior_list_entry
*thread_ptr
;
485 /* Reply the current thread id. */
486 if (strcmp ("qC", own_buf
) == 0 && !disable_packet_qC
)
488 require_running (own_buf
);
489 thread_ptr
= all_threads
.head
;
490 sprintf (own_buf
, "QC%x",
491 thread_to_gdb_id ((struct thread_info
*)thread_ptr
));
495 if (strcmp ("qSymbol::", own_buf
) == 0)
497 if (target_running () && the_target
->look_up_symbols
!= NULL
)
498 (*the_target
->look_up_symbols
) ();
500 strcpy (own_buf
, "OK");
504 if (!disable_packet_qfThreadInfo
)
506 if (strcmp ("qfThreadInfo", own_buf
) == 0)
508 require_running (own_buf
);
509 thread_ptr
= all_threads
.head
;
510 sprintf (own_buf
, "m%x", thread_to_gdb_id ((struct thread_info
*)thread_ptr
));
511 thread_ptr
= thread_ptr
->next
;
515 if (strcmp ("qsThreadInfo", own_buf
) == 0)
517 require_running (own_buf
);
518 if (thread_ptr
!= NULL
)
520 sprintf (own_buf
, "m%x", thread_to_gdb_id ((struct thread_info
*)thread_ptr
));
521 thread_ptr
= thread_ptr
->next
;
526 sprintf (own_buf
, "l");
532 if (the_target
->read_offsets
!= NULL
533 && strcmp ("qOffsets", own_buf
) == 0)
535 CORE_ADDR text
, data
;
537 require_running (own_buf
);
538 if (the_target
->read_offsets (&text
, &data
))
539 sprintf (own_buf
, "Text=%lX;Data=%lX;Bss=%lX",
540 (long)text
, (long)data
, (long)data
);
547 if (the_target
->qxfer_spu
!= NULL
548 && strncmp ("qXfer:spu:read:", own_buf
, 15) == 0)
554 unsigned char *spu_buf
;
556 require_running (own_buf
);
557 strcpy (own_buf
, "E00");
558 if (decode_xfer_read (own_buf
+ 15, &annex
, &ofs
, &len
) < 0)
560 if (len
> PBUFSIZ
- 2)
562 spu_buf
= malloc (len
+ 1);
566 n
= (*the_target
->qxfer_spu
) (annex
, spu_buf
, NULL
, ofs
, len
+ 1);
570 *new_packet_len_p
= write_qxfer_response
571 (own_buf
, spu_buf
, len
, 1);
573 *new_packet_len_p
= write_qxfer_response
574 (own_buf
, spu_buf
, n
, 0);
580 if (the_target
->qxfer_spu
!= NULL
581 && strncmp ("qXfer:spu:write:", own_buf
, 16) == 0)
587 unsigned char *spu_buf
;
589 require_running (own_buf
);
590 strcpy (own_buf
, "E00");
591 spu_buf
= malloc (packet_len
- 15);
594 if (decode_xfer_write (own_buf
+ 16, packet_len
- 16, &annex
,
595 &ofs
, &len
, spu_buf
) < 0)
601 n
= (*the_target
->qxfer_spu
)
602 (annex
, NULL
, (unsigned const char *)spu_buf
, ofs
, len
);
606 sprintf (own_buf
, "%x", n
);
612 if (the_target
->read_auxv
!= NULL
613 && strncmp ("qXfer:auxv:read:", own_buf
, 16) == 0)
621 require_running (own_buf
);
623 /* Reject any annex; grab the offset and length. */
624 if (decode_xfer_read (own_buf
+ 16, &annex
, &ofs
, &len
) < 0
627 strcpy (own_buf
, "E00");
631 /* Read one extra byte, as an indicator of whether there is
633 if (len
> PBUFSIZ
- 2)
635 data
= malloc (len
+ 1);
636 n
= (*the_target
->read_auxv
) (ofs
, data
, len
+ 1);
640 *new_packet_len_p
= write_qxfer_response (own_buf
, data
, len
, 1);
642 *new_packet_len_p
= write_qxfer_response (own_buf
, data
, n
, 0);
649 if (strncmp ("qXfer:features:read:", own_buf
, 20) == 0)
652 unsigned int len
, total_len
;
653 const char *document
;
656 require_running (own_buf
);
658 /* Grab the annex, offset, and length. */
659 if (decode_xfer_read (own_buf
+ 20, &annex
, &ofs
, &len
) < 0)
661 strcpy (own_buf
, "E00");
665 /* Now grab the correct annex. */
666 document
= get_features_xml (annex
);
667 if (document
== NULL
)
669 strcpy (own_buf
, "E00");
673 total_len
= strlen (document
);
674 if (len
> PBUFSIZ
- 2)
679 else if (len
< total_len
- ofs
)
680 *new_packet_len_p
= write_qxfer_response (own_buf
, document
+ ofs
,
683 *new_packet_len_p
= write_qxfer_response (own_buf
, document
+ ofs
,
689 if (strncmp ("qXfer:libraries:read:", own_buf
, 21) == 0)
692 unsigned int len
, total_len
;
694 struct inferior_list_entry
*dll_ptr
;
697 require_running (own_buf
);
699 /* Reject any annex; grab the offset and length. */
700 if (decode_xfer_read (own_buf
+ 21, &annex
, &ofs
, &len
) < 0
703 strcpy (own_buf
, "E00");
707 /* Over-estimate the necessary memory. Assume that every character
708 in the library name must be escaped. */
710 for (dll_ptr
= all_dlls
.head
; dll_ptr
!= NULL
; dll_ptr
= dll_ptr
->next
)
711 total_len
+= 128 + 6 * strlen (((struct dll_info
*) dll_ptr
)->name
);
713 document
= malloc (total_len
);
714 strcpy (document
, "<library-list>\n");
715 p
= document
+ strlen (document
);
717 for (dll_ptr
= all_dlls
.head
; dll_ptr
!= NULL
; dll_ptr
= dll_ptr
->next
)
719 struct dll_info
*dll
= (struct dll_info
*) dll_ptr
;
722 strcpy (p
, " <library name=\"");
724 name
= xml_escape_text (dll
->name
);
728 strcpy (p
, "\"><segment address=\"");
730 sprintf (p
, "0x%lx", (long) dll
->base_addr
);
732 strcpy (p
, "\"/></library>\n");
736 strcpy (p
, "</library-list>\n");
738 total_len
= strlen (document
);
739 if (len
> PBUFSIZ
- 2)
744 else if (len
< total_len
- ofs
)
745 *new_packet_len_p
= write_qxfer_response (own_buf
, document
+ ofs
,
748 *new_packet_len_p
= write_qxfer_response (own_buf
, document
+ ofs
,
755 /* Protocol features query. */
756 if (strncmp ("qSupported", own_buf
, 10) == 0
757 && (own_buf
[10] == ':' || own_buf
[10] == '\0'))
759 sprintf (own_buf
, "PacketSize=%x;QPassSignals+", PBUFSIZ
- 1);
761 /* We do not have any hook to indicate whether the target backend
762 supports qXfer:libraries:read, so always report it. */
763 strcat (own_buf
, ";qXfer:libraries:read+");
765 if (the_target
->read_auxv
!= NULL
)
766 strcat (own_buf
, ";qXfer:auxv:read+");
768 if (the_target
->qxfer_spu
!= NULL
)
769 strcat (own_buf
, ";qXfer:spu:read+;qXfer:spu:write+");
771 /* We always report qXfer:features:read, as targets may
772 install XML files on a subsequent call to arch_setup.
773 If we reported to GDB on startup that we don't support
774 qXfer:feature:read at all, we will never be re-queried. */
775 strcat (own_buf
, ";qXfer:features:read+");
780 /* Thread-local storage support. */
781 if (the_target
->get_tls_address
!= NULL
782 && strncmp ("qGetTLSAddr:", own_buf
, 12) == 0)
784 char *p
= own_buf
+ 12;
785 CORE_ADDR parts
[3], address
= 0;
788 require_running (own_buf
);
790 for (i
= 0; i
< 3; i
++)
798 p2
= strchr (p
, ',');
810 decode_address (&parts
[i
], p
, len
);
814 if (p
!= NULL
|| i
< 3)
818 struct thread_info
*thread
= gdb_id_to_thread (parts
[0]);
823 err
= the_target
->get_tls_address (thread
, parts
[1], parts
[2],
829 sprintf (own_buf
, "%llx", address
);
838 /* Otherwise, pretend we do not understand this packet. */
841 /* Handle "monitor" commands. */
842 if (strncmp ("qRcmd,", own_buf
, 6) == 0)
844 char *mon
= malloc (PBUFSIZ
);
845 int len
= strlen (own_buf
+ 6);
847 if ((len
% 2) != 0 || unhexify (mon
, own_buf
+ 6, len
/ 2) != len
/ 2)
857 if (strcmp (mon
, "set debug 1") == 0)
860 monitor_output ("Debug output enabled.\n");
862 else if (strcmp (mon
, "set debug 0") == 0)
865 monitor_output ("Debug output disabled.\n");
867 else if (strcmp (mon
, "set remote-debug 1") == 0)
870 monitor_output ("Protocol debug output enabled.\n");
872 else if (strcmp (mon
, "set remote-debug 0") == 0)
875 monitor_output ("Protocol debug output disabled.\n");
877 else if (strcmp (mon
, "help") == 0)
878 monitor_show_help ();
879 else if (strcmp (mon
, "exit") == 0)
883 monitor_output ("Unknown monitor command.\n\n");
884 monitor_show_help ();
892 if (strncmp ("qSearch:memory:", own_buf
, sizeof ("qSearch:memory:") - 1) == 0)
894 require_running (own_buf
);
895 handle_search_memory (own_buf
, packet_len
);
899 /* Otherwise we didn't know what packet it was. Say we didn't
904 /* Parse vCont packets. */
906 handle_v_cont (char *own_buf
, char *status
, int *signal
)
910 struct thread_resume
*resume_info
, default_action
;
912 /* Count the number of semicolons in the packet. There should be one
921 /* Allocate room for one extra action, for the default remain-stopped
922 behavior; if no default action is in the list, we'll need the extra
924 resume_info
= malloc ((n
+ 1) * sizeof (resume_info
[0]));
926 default_action
.thread
= -1;
927 default_action
.leave_stopped
= 1;
928 default_action
.step
= 0;
929 default_action
.sig
= 0;
937 resume_info
[i
].leave_stopped
= 0;
939 if (p
[0] == 's' || p
[0] == 'S')
940 resume_info
[i
].step
= 1;
941 else if (p
[0] == 'c' || p
[0] == 'C')
942 resume_info
[i
].step
= 0;
946 if (p
[0] == 'S' || p
[0] == 'C')
949 sig
= strtol (p
+ 1, &q
, 16);
954 if (!target_signal_to_host_p (sig
))
956 resume_info
[i
].sig
= target_signal_to_host (sig
);
960 resume_info
[i
].sig
= 0;
966 resume_info
[i
].thread
= -1;
967 default_action
= resume_info
[i
];
969 /* Note: we don't increment i here, we'll overwrite this entry
970 the next time through. */
972 else if (p
[0] == ':')
974 unsigned int gdb_id
= strtoul (p
+ 1, &q
, 16);
975 unsigned long thread_id
;
980 if (p
[0] != ';' && p
[0] != 0)
983 thread_id
= gdb_id_to_thread_id (gdb_id
);
985 resume_info
[i
].thread
= thread_id
;
993 resume_info
[i
] = default_action
;
995 /* Still used in occasional places in the backend. */
996 if (n
== 1 && resume_info
[0].thread
!= -1)
997 cont_thread
= resume_info
[0].thread
;
1000 set_desired_inferior (0);
1003 (*the_target
->resume
) (resume_info
);
1007 *signal
= mywait (status
, 1);
1008 prepare_resume_reply (own_buf
, *status
, *signal
);
1009 disable_async_io ();
1013 write_enn (own_buf
);
1018 /* Attach to a new program. Return 1 if successful, 0 if failure. */
1020 handle_v_attach (char *own_buf
, char *status
, int *signal
)
1024 pid
= strtol (own_buf
+ 8, NULL
, 16);
1025 if (pid
!= 0 && attach_inferior (pid
, status
, signal
) == 0)
1027 /* Don't report shared library events after attaching, even if
1028 some libraries are preloaded. GDB will always poll the
1029 library list. Avoids the "stopped by shared library event"
1030 notice on the GDB side. */
1032 prepare_resume_reply (own_buf
, *status
, *signal
);
1037 write_enn (own_buf
);
1042 /* Run a new program. Return 1 if successful, 0 if failure. */
1044 handle_v_run (char *own_buf
, char *status
, int *signal
)
1046 char *p
, **pp
, *next_p
, **new_argv
;
1050 for (p
= own_buf
+ strlen ("vRun;"); p
&& *p
; p
= strchr (p
, ';'))
1056 new_argv
= malloc ((new_argc
+ 2) * sizeof (char *));
1058 for (p
= own_buf
+ strlen ("vRun;"); *p
; p
= next_p
)
1060 next_p
= strchr (p
, ';');
1062 next_p
= p
+ strlen (p
);
1064 if (i
== 0 && p
== next_p
)
1068 new_argv
[i
] = malloc (1 + (next_p
- p
) / 2);
1069 unhexify (new_argv
[i
], p
, (next_p
- p
) / 2);
1070 new_argv
[i
][(next_p
- p
) / 2] = '\0';
1079 if (new_argv
[0] == NULL
)
1081 if (program_argv
== NULL
)
1083 write_enn (own_buf
);
1087 new_argv
[0] = strdup (program_argv
[0]);
1090 /* Free the old argv. */
1093 for (pp
= program_argv
; *pp
!= NULL
; pp
++)
1095 free (program_argv
);
1097 program_argv
= new_argv
;
1099 *signal
= start_inferior (program_argv
, status
);
1102 prepare_resume_reply (own_buf
, *status
, *signal
);
1107 write_enn (own_buf
);
1112 /* Handle all of the extended 'v' packets. */
1114 handle_v_requests (char *own_buf
, char *status
, int *signal
,
1115 int packet_len
, int *new_packet_len
)
1117 if (!disable_packet_vCont
)
1119 if (strncmp (own_buf
, "vCont;", 6) == 0)
1121 require_running (own_buf
);
1122 handle_v_cont (own_buf
, status
, signal
);
1126 if (strncmp (own_buf
, "vCont?", 6) == 0)
1128 strcpy (own_buf
, "vCont;c;C;s;S");
1133 if (strncmp (own_buf
, "vFile:", 6) == 0
1134 && handle_vFile (own_buf
, packet_len
, new_packet_len
))
1137 if (strncmp (own_buf
, "vAttach;", 8) == 0)
1139 if (target_running ())
1141 fprintf (stderr
, "Already debugging a process\n");
1142 write_enn (own_buf
);
1145 handle_v_attach (own_buf
, status
, signal
);
1149 if (strncmp (own_buf
, "vRun;", 5) == 0)
1151 if (target_running ())
1153 fprintf (stderr
, "Already debugging a process\n");
1154 write_enn (own_buf
);
1157 handle_v_run (own_buf
, status
, signal
);
1161 /* Otherwise we didn't know what packet it was. Say we didn't
1168 myresume (char *own_buf
, int step
, int *signalp
, char *statusp
)
1170 struct thread_resume resume_info
[2];
1174 set_desired_inferior (0);
1176 if (step
|| sig
|| (cont_thread
!= 0 && cont_thread
!= -1))
1178 resume_info
[0].thread
1179 = ((struct inferior_list_entry
*) current_inferior
)->id
;
1180 resume_info
[0].step
= step
;
1181 resume_info
[0].sig
= sig
;
1182 resume_info
[0].leave_stopped
= 0;
1185 resume_info
[n
].thread
= -1;
1186 resume_info
[n
].step
= 0;
1187 resume_info
[n
].sig
= 0;
1188 resume_info
[n
].leave_stopped
= (cont_thread
!= 0 && cont_thread
!= -1);
1191 (*the_target
->resume
) (resume_info
);
1192 *signalp
= mywait (statusp
, 1);
1193 prepare_resume_reply (own_buf
, *statusp
, *signalp
);
1194 disable_async_io ();
1198 gdbserver_version (void)
1200 printf ("GNU gdbserver %s%s\n"
1201 "Copyright (C) 2007 Free Software Foundation, Inc.\n"
1202 "gdbserver is free software, covered by the GNU General Public License.\n"
1203 "This gdbserver was configured as \"%s\"\n",
1204 PKGVERSION
, version
, host_name
);
1208 gdbserver_usage (FILE *stream
)
1210 fprintf (stream
, "Usage:\tgdbserver [OPTIONS] COMM PROG [ARGS ...]\n"
1211 "\tgdbserver [OPTIONS] --attach COMM PID\n"
1212 "\tgdbserver [OPTIONS] --multi COMM\n"
1214 "COMM may either be a tty device (for serial debugging), or \n"
1215 "HOST:PORT to listen for a TCP connection.\n"
1218 " --debug\t\tEnable debugging output.\n"
1219 " --version\t\tDisplay version information and exit.\n"
1220 " --wrapper WRAPPER --\tRun WRAPPER to start new programs.\n");
1221 if (REPORT_BUGS_TO
[0] && stream
== stdout
)
1222 fprintf (stream
, "Report bugs to \"%s\".\n", REPORT_BUGS_TO
);
1226 gdbserver_show_disableable (FILE *stream
)
1228 fprintf (stream
, "Disableable packets:\n"
1229 " vCont \tAll vCont packets\n"
1230 " qC \tQuerying the current thread\n"
1231 " qfThreadInfo\tThread listing\n"
1232 " Tthread \tPassing the thread specifier in the T stop reply packet\n"
1233 " threads \tAll of the above\n");
1237 #undef require_running
1238 #define require_running(BUF) \
1239 if (!target_running ()) \
1246 main (int argc
, char *argv
[])
1248 char ch
, status
, *own_buf
;
1249 unsigned char *mem_buf
;
1256 char *arg_end
, *port
;
1257 char **next_arg
= &argv
[1];
1262 while (*next_arg
!= NULL
&& **next_arg
== '-')
1264 if (strcmp (*next_arg
, "--version") == 0)
1266 gdbserver_version ();
1269 else if (strcmp (*next_arg
, "--help") == 0)
1271 gdbserver_usage (stdout
);
1274 else if (strcmp (*next_arg
, "--attach") == 0)
1276 else if (strcmp (*next_arg
, "--multi") == 0)
1278 else if (strcmp (*next_arg
, "--wrapper") == 0)
1282 wrapper_argv
= next_arg
;
1283 while (*next_arg
!= NULL
&& strcmp (*next_arg
, "--") != 0)
1286 if (next_arg
== wrapper_argv
|| *next_arg
== NULL
)
1288 gdbserver_usage (stderr
);
1292 /* Consume the "--". */
1295 else if (strcmp (*next_arg
, "--debug") == 0)
1297 else if (strcmp (*next_arg
, "--disable-packet") == 0)
1299 gdbserver_show_disableable (stdout
);
1302 else if (strncmp (*next_arg
,
1303 "--disable-packet=",
1304 sizeof ("--disable-packet=") - 1) == 0)
1306 char *packets
, *tok
;
1308 packets
= *next_arg
+= sizeof ("--disable-packet=") - 1;
1309 for (tok
= strtok (packets
, ",");
1311 tok
= strtok (NULL
, ","))
1313 if (strcmp ("vCont", tok
) == 0)
1314 disable_packet_vCont
= 1;
1315 else if (strcmp ("Tthread", tok
) == 0)
1316 disable_packet_Tthread
= 1;
1317 else if (strcmp ("qC", tok
) == 0)
1318 disable_packet_qC
= 1;
1319 else if (strcmp ("qfThreadInfo", tok
) == 0)
1320 disable_packet_qfThreadInfo
= 1;
1321 else if (strcmp ("threads", tok
) == 0)
1323 disable_packet_vCont
= 1;
1324 disable_packet_Tthread
= 1;
1325 disable_packet_qC
= 1;
1326 disable_packet_qfThreadInfo
= 1;
1330 fprintf (stderr
, "Don't know how to disable \"%s\".\n\n",
1332 gdbserver_show_disableable (stderr
);
1339 fprintf (stderr
, "Unknown argument: %s\n", *next_arg
);
1347 if (setjmp (toplevel
))
1349 fprintf (stderr
, "Exiting\n");
1355 if (port
== NULL
|| (!attach
&& !multi_mode
&& *next_arg
== NULL
))
1357 gdbserver_usage (stderr
);
1364 /* --attach used to come after PORT, so allow it there for
1366 if (*next_arg
!= NULL
&& strcmp (*next_arg
, "--attach") == 0)
1373 && (*next_arg
== NULL
1374 || (*next_arg
)[0] == '\0'
1375 || (pid
= strtoul (*next_arg
, &arg_end
, 0)) == 0
1377 || next_arg
[1] != NULL
))
1382 gdbserver_usage (stderr
);
1386 initialize_async_io ();
1389 own_buf
= malloc (PBUFSIZ
+ 1);
1390 mem_buf
= malloc (PBUFSIZ
);
1392 if (pid
== 0 && *next_arg
!= NULL
)
1396 n
= argc
- (next_arg
- argv
);
1397 program_argv
= malloc (sizeof (char *) * (n
+ 1));
1398 for (i
= 0; i
< n
; i
++)
1399 program_argv
[i
] = strdup (next_arg
[i
]);
1400 program_argv
[i
] = NULL
;
1402 /* Wait till we are at first instruction in program. */
1403 signal
= start_inferior (program_argv
, &status
);
1405 /* We are now (hopefully) stopped at the first instruction of
1406 the target process. This assumes that the target process was
1407 successfully created. */
1411 if (attach_inferior (pid
, &status
, &signal
) == -1)
1412 error ("Attaching not supported on this target");
1414 /* Otherwise succeeded. */
1422 /* Don't report shared library events on the initial connection,
1423 even if some libraries are preloaded. Avoids the "stopped by
1424 shared library event" notice on gdb side. */
1427 if (setjmp (toplevel
))
1429 fprintf (stderr
, "Killing inferior\n");
1434 if (status
== 'W' || status
== 'X')
1439 if (!was_running
&& !multi_mode
)
1441 fprintf (stderr
, "No program to debug. GDBserver exiting.\n");
1450 if (setjmp (toplevel
) != 0)
1452 /* An error occurred. */
1453 if (response_needed
)
1455 write_enn (own_buf
);
1460 disable_async_io ();
1461 while (!exit_requested
)
1465 int new_packet_len
= -1;
1467 response_needed
= 0;
1468 packet_len
= getpkt (own_buf
);
1469 if (packet_len
<= 0)
1471 response_needed
= 1;
1478 handle_query (own_buf
, packet_len
, &new_packet_len
);
1481 handle_general_set (own_buf
);
1484 require_running (own_buf
);
1485 fprintf (stderr
, "Detaching from inferior\n");
1486 if (detach_inferior () != 0)
1487 write_enn (own_buf
);
1492 if (extended_protocol
)
1494 /* Treat this like a normal program exit. */
1503 /* If we are attached, then we can exit. Otherwise, we
1504 need to hang around doing nothing, until the child
1514 extended_protocol
= 1;
1518 prepare_resume_reply (own_buf
, status
, signal
);
1521 if (own_buf
[1] == 'c' || own_buf
[1] == 'g' || own_buf
[1] == 's')
1523 unsigned long gdb_id
, thread_id
;
1525 require_running (own_buf
);
1526 gdb_id
= strtoul (&own_buf
[2], NULL
, 16);
1527 if (gdb_id
== 0 || gdb_id
== -1)
1531 thread_id
= gdb_id_to_thread_id (gdb_id
);
1534 write_enn (own_buf
);
1539 if (own_buf
[1] == 'g')
1541 general_thread
= thread_id
;
1542 set_desired_inferior (1);
1544 else if (own_buf
[1] == 'c')
1545 cont_thread
= thread_id
;
1546 else if (own_buf
[1] == 's')
1547 step_thread
= thread_id
;
1553 /* Silently ignore it so that gdb can extend the protocol
1554 without compatibility headaches. */
1559 require_running (own_buf
);
1560 set_desired_inferior (1);
1561 registers_to_string (own_buf
);
1564 require_running (own_buf
);
1565 set_desired_inferior (1);
1566 registers_from_string (&own_buf
[1]);
1570 require_running (own_buf
);
1571 decode_m_packet (&own_buf
[1], &mem_addr
, &len
);
1572 if (read_inferior_memory (mem_addr
, mem_buf
, len
) == 0)
1573 convert_int_to_ascii (mem_buf
, own_buf
, len
);
1575 write_enn (own_buf
);
1578 require_running (own_buf
);
1579 decode_M_packet (&own_buf
[1], &mem_addr
, &len
, mem_buf
);
1580 if (write_inferior_memory (mem_addr
, mem_buf
, len
) == 0)
1583 write_enn (own_buf
);
1586 require_running (own_buf
);
1587 if (decode_X_packet (&own_buf
[1], packet_len
- 1,
1588 &mem_addr
, &len
, mem_buf
) < 0
1589 || write_inferior_memory (mem_addr
, mem_buf
, len
) != 0)
1590 write_enn (own_buf
);
1595 require_running (own_buf
);
1596 convert_ascii_to_int (own_buf
+ 1, &sig
, 1);
1597 if (target_signal_to_host_p (sig
))
1598 signal
= target_signal_to_host (sig
);
1601 myresume (own_buf
, 0, &signal
, &status
);
1604 require_running (own_buf
);
1605 convert_ascii_to_int (own_buf
+ 1, &sig
, 1);
1606 if (target_signal_to_host_p (sig
))
1607 signal
= target_signal_to_host (sig
);
1610 myresume (own_buf
, 1, &signal
, &status
);
1613 require_running (own_buf
);
1615 myresume (own_buf
, 0, &signal
, &status
);
1618 require_running (own_buf
);
1620 myresume (own_buf
, 1, &signal
, &status
);
1626 CORE_ADDR addr
= strtoul (&own_buf
[3], &lenptr
, 16);
1627 int len
= strtol (lenptr
+ 1, &dataptr
, 16);
1628 char type
= own_buf
[1];
1630 if (the_target
->insert_watchpoint
== NULL
1631 || (type
< '2' || type
> '4'))
1633 /* No watchpoint support or not a watchpoint command;
1634 unrecognized either way. */
1641 require_running (own_buf
);
1642 res
= (*the_target
->insert_watchpoint
) (type
, addr
, len
);
1649 write_enn (own_buf
);
1657 CORE_ADDR addr
= strtoul (&own_buf
[3], &lenptr
, 16);
1658 int len
= strtol (lenptr
+ 1, &dataptr
, 16);
1659 char type
= own_buf
[1];
1661 if (the_target
->remove_watchpoint
== NULL
1662 || (type
< '2' || type
> '4'))
1664 /* No watchpoint support or not a watchpoint command;
1665 unrecognized either way. */
1672 require_running (own_buf
);
1673 res
= (*the_target
->remove_watchpoint
) (type
, addr
, len
);
1680 write_enn (own_buf
);
1685 response_needed
= 0;
1686 if (!target_running ())
1687 /* The packet we received doesn't make sense - but we
1688 can't reply to it, either. */
1691 fprintf (stderr
, "Killing inferior\n");
1694 /* When using the extended protocol, we wait with no
1695 program running. The traditional protocol will exit
1697 if (extended_protocol
)
1700 signal
= TARGET_SIGNAL_KILL
;
1711 unsigned long gdb_id
, thread_id
;
1713 require_running (own_buf
);
1714 gdb_id
= strtoul (&own_buf
[1], NULL
, 16);
1715 thread_id
= gdb_id_to_thread_id (gdb_id
);
1718 write_enn (own_buf
);
1722 if (mythread_alive (thread_id
))
1725 write_enn (own_buf
);
1729 response_needed
= 0;
1731 /* Restarting the inferior is only supported in the
1732 extended protocol. */
1733 if (extended_protocol
)
1735 if (target_running ())
1737 fprintf (stderr
, "GDBserver restarting\n");
1739 /* Wait till we are at 1st instruction in prog. */
1740 if (program_argv
!= NULL
)
1741 signal
= start_inferior (program_argv
, &status
);
1745 signal
= TARGET_SIGNAL_KILL
;
1751 /* It is a request we don't understand. Respond with an
1752 empty packet so that gdb knows that we don't support this
1758 /* Extended (long) request. */
1759 handle_v_requests (own_buf
, &status
, &signal
,
1760 packet_len
, &new_packet_len
);
1764 /* It is a request we don't understand. Respond with an
1765 empty packet so that gdb knows that we don't support this
1771 if (new_packet_len
!= -1)
1772 putpkt_binary (own_buf
, new_packet_len
);
1776 response_needed
= 0;
1778 if (was_running
&& (status
== 'W' || status
== 'X'))
1784 "\nChild exited with status %d\n", signal
);
1786 fprintf (stderr
, "\nChild terminated with signal = 0x%x (%s)\n",
1787 target_signal_to_host (signal
),
1788 target_signal_to_name (signal
));
1790 if (extended_protocol
)
1794 fprintf (stderr
, "GDBserver exiting\n");
1799 if (status
!= 'W' && status
!= 'X')
1803 /* If an exit was requested (using the "monitor exit" command),
1804 terminate now. The only other way to get here is for
1805 getpkt to fail; close the connection and reopen it at the
1811 if (attached
&& target_running ())
1813 else if (target_running ())
1819 fprintf (stderr
, "Remote side has terminated connection. "
1820 "GDBserver will reopen the connection.\n");