1 /* Main code for remote server for GDB.
2 Copyright (C) 1989-2016 Free Software Foundation, Inc.
4 This file is part of GDB.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20 #include "gdbthread.h"
25 #include "signals-state-save-restore.h"
33 #include "btrace-common.h"
34 #include "filestuff.h"
35 #include "tracepoint.h"
39 /* The thread set with an `Hc' packet. `Hc' is deprecated in favor of
40 `vCont'. Note the multi-process extensions made `vCont' a
41 requirement, so `Hc pPID.TID' is pretty much undefined. So
42 CONT_THREAD can be null_ptid for no `Hc' thread, minus_one_ptid for
43 resuming all threads of the process (again, `Hc' isn't used for
44 multi-process), or a specific thread ptid_t. */
47 /* The thread set with an `Hg' packet. */
48 ptid_t general_thread
;
52 static int extended_protocol
;
53 static int response_needed
;
54 static int exit_requested
;
56 /* --once: Exit after the first connection has closed. */
60 int report_fork_events
;
61 int report_vfork_events
;
62 int report_exec_events
;
63 int report_thread_events
;
65 /* Whether to report TARGET_WAITKING_NO_RESUMED events. */
66 static int report_no_resumed
;
72 /* True if the "vContSupported" feature is active. In that case, GDB
73 wants us to report whether single step is supported in the reply to
75 static int vCont_supported
;
77 /* Whether we should attempt to disable the operating system's address
78 space randomization feature before starting an inferior. */
79 int disable_randomization
= 1;
81 static char **program_argv
, **wrapper_argv
;
83 int pass_signals
[GDB_SIGNAL_LAST
];
84 int program_signals
[GDB_SIGNAL_LAST
];
85 int program_signals_p
;
87 /* The PID of the originally created or attached inferior. Used to
88 send signals to the process when GDB sends us an asynchronous interrupt
89 (user hitting Control-C in the client), and to wait for the child to exit
90 when no longer debugging it. */
92 unsigned long signal_pid
;
95 /* A file descriptor for the controlling terminal. */
98 /* TERMINAL_FD's original foreground group. */
99 pid_t old_foreground_pgrp
;
101 /* Hand back terminal ownership to the original foreground group. */
104 restore_old_foreground_pgrp (void)
106 tcsetpgrp (terminal_fd
, old_foreground_pgrp
);
110 /* Set if you want to disable optional thread related packets support
111 in gdbserver, for the sake of testing GDB against stubs that don't
113 int disable_packet_vCont
;
114 int disable_packet_Tthread
;
115 int disable_packet_qC
;
116 int disable_packet_qfThreadInfo
;
118 /* Last status reported to GDB. */
119 static struct target_waitstatus last_status
;
120 static ptid_t last_ptid
;
123 static unsigned char *mem_buf
;
125 /* A sub-class of 'struct notif_event' for stop, holding information
126 relative to a single stop reply. We keep a queue of these to
127 push to GDB in non-stop mode. */
131 struct notif_event base
;
133 /* Thread or process that got the event. */
137 struct target_waitstatus status
;
140 /* The current btrace configuration. This is gdbserver's mirror of GDB's
141 btrace configuration. */
142 static struct btrace_config current_btrace_conf
;
144 DEFINE_QUEUE_P (notif_event_p
);
146 /* Put a stop reply to the stop reply queue. */
149 queue_stop_reply (ptid_t ptid
, struct target_waitstatus
*status
)
151 struct vstop_notif
*new_notif
= XNEW (struct vstop_notif
);
153 new_notif
->ptid
= ptid
;
154 new_notif
->status
= *status
;
156 notif_event_enque (¬if_stop
, (struct notif_event
*) new_notif
);
160 remove_all_on_match_ptid (QUEUE (notif_event_p
) *q
,
161 QUEUE_ITER (notif_event_p
) *iter
,
162 struct notif_event
*event
,
165 ptid_t filter_ptid
= *(ptid_t
*) data
;
166 struct vstop_notif
*vstop_event
= (struct vstop_notif
*) event
;
168 if (ptid_match (vstop_event
->ptid
, filter_ptid
))
170 if (q
->free_func
!= NULL
)
171 q
->free_func (event
);
173 QUEUE_remove_elem (notif_event_p
, q
, iter
);
182 discard_queued_stop_replies (ptid_t ptid
)
184 QUEUE_iterate (notif_event_p
, notif_stop
.queue
,
185 remove_all_on_match_ptid
, &ptid
);
189 vstop_notif_reply (struct notif_event
*event
, char *own_buf
)
191 struct vstop_notif
*vstop
= (struct vstop_notif
*) event
;
193 prepare_resume_reply (own_buf
, vstop
->ptid
, &vstop
->status
);
196 struct notif_server notif_stop
=
198 "vStopped", "Stop", NULL
, vstop_notif_reply
,
202 target_running (void)
204 return get_first_thread () != NULL
;
208 start_inferior (char **argv
)
210 char **new_argv
= argv
;
212 if (wrapper_argv
!= NULL
)
216 for (i
= 0; wrapper_argv
[i
] != NULL
; i
++)
218 for (i
= 0; argv
[i
] != NULL
; i
++)
220 new_argv
= XALLOCAVEC (char *, count
);
222 for (i
= 0; wrapper_argv
[i
] != NULL
; i
++)
223 new_argv
[count
++] = wrapper_argv
[i
];
224 for (i
= 0; argv
[i
] != NULL
; i
++)
225 new_argv
[count
++] = argv
[i
];
226 new_argv
[count
] = NULL
;
232 for (i
= 0; new_argv
[i
]; ++i
)
233 debug_printf ("new_argv[%d] = \"%s\"\n", i
, new_argv
[i
]);
238 signal (SIGTTOU
, SIG_DFL
);
239 signal (SIGTTIN
, SIG_DFL
);
242 signal_pid
= create_inferior (new_argv
[0], new_argv
);
244 /* FIXME: we don't actually know at this point that the create
245 actually succeeded. We won't know that until we wait. */
246 fprintf (stderr
, "Process %s created; pid = %ld\n", argv
[0],
251 signal (SIGTTOU
, SIG_IGN
);
252 signal (SIGTTIN
, SIG_IGN
);
253 terminal_fd
= fileno (stderr
);
254 old_foreground_pgrp
= tcgetpgrp (terminal_fd
);
255 tcsetpgrp (terminal_fd
, signal_pid
);
256 atexit (restore_old_foreground_pgrp
);
259 if (wrapper_argv
!= NULL
)
261 ptid_t ptid
= pid_to_ptid (signal_pid
);
263 last_ptid
= mywait (pid_to_ptid (signal_pid
), &last_status
, 0, 0);
265 if (last_status
.kind
== TARGET_WAITKIND_STOPPED
)
269 target_continue_no_signal (ptid
);
271 last_ptid
= mywait (pid_to_ptid (signal_pid
), &last_status
, 0, 0);
272 if (last_status
.kind
!= TARGET_WAITKIND_STOPPED
)
275 current_thread
->last_resume_kind
= resume_stop
;
276 current_thread
->last_status
= last_status
;
278 while (last_status
.value
.sig
!= GDB_SIGNAL_TRAP
);
280 target_post_create_inferior ();
284 /* Wait till we are at 1st instruction in program, return new pid
285 (assuming success). */
286 last_ptid
= mywait (pid_to_ptid (signal_pid
), &last_status
, 0, 0);
288 /* The last_status.kind was set by the call to ptrace(PTRACE_TRACEME, ...).
289 At this point, the target process, if it exits, is stopped. Do not call
290 the function target_post_create_inferior if the process has already
291 exited, as the target implementation of the routine may rely on the
292 process being live. */
293 if (last_status
.kind
!= TARGET_WAITKIND_EXITED
294 && last_status
.kind
!= TARGET_WAITKIND_SIGNALLED
)
296 target_post_create_inferior ();
297 current_thread
->last_resume_kind
= resume_stop
;
298 current_thread
->last_status
= last_status
;
301 mourn_inferior (find_process_pid (ptid_get_pid (last_ptid
)));
307 attach_inferior (int pid
)
309 /* myattach should return -1 if attaching is unsupported,
310 0 if it succeeded, and call error() otherwise. */
312 if (myattach (pid
) != 0)
315 fprintf (stderr
, "Attached; pid = %d\n", pid
);
318 /* FIXME - It may be that we should get the SIGNAL_PID from the
319 attach function, so that it can be the main thread instead of
320 whichever we were told to attach to. */
325 last_ptid
= mywait (pid_to_ptid (pid
), &last_status
, 0, 0);
327 /* GDB knows to ignore the first SIGSTOP after attaching to a running
328 process using the "attach" command, but this is different; it's
329 just using "target remote". Pretend it's just starting up. */
330 if (last_status
.kind
== TARGET_WAITKIND_STOPPED
331 && last_status
.value
.sig
== GDB_SIGNAL_STOP
)
332 last_status
.value
.sig
= GDB_SIGNAL_TRAP
;
334 current_thread
->last_resume_kind
= resume_stop
;
335 current_thread
->last_status
= last_status
;
341 extern int remote_debug
;
343 /* Decode a qXfer read request. Return 0 if everything looks OK,
347 decode_xfer_read (char *buf
, CORE_ADDR
*ofs
, unsigned int *len
)
349 /* After the read marker and annex, qXfer looks like a
350 traditional 'm' packet. */
351 decode_m_packet (buf
, ofs
, len
);
357 decode_xfer (char *buf
, char **object
, char **rw
, char **annex
, char **offset
)
359 /* Extract and NUL-terminate the object. */
361 while (*buf
&& *buf
!= ':')
367 /* Extract and NUL-terminate the read/write action. */
369 while (*buf
&& *buf
!= ':')
375 /* Extract and NUL-terminate the annex. */
377 while (*buf
&& *buf
!= ':')
387 /* Write the response to a successful qXfer read. Returns the
388 length of the (binary) data stored in BUF, corresponding
389 to as much of DATA/LEN as we could fit. IS_MORE controls
390 the first character of the response. */
392 write_qxfer_response (char *buf
, const gdb_byte
*data
, int len
, int is_more
)
401 return remote_escape_output (data
, len
, 1, (unsigned char *) buf
+ 1,
402 &out_len
, PBUFSIZ
- 2) + 1;
405 /* Handle btrace enabling in BTS format. */
408 handle_btrace_enable_bts (struct thread_info
*thread
)
410 if (thread
->btrace
!= NULL
)
411 return "E.Btrace already enabled.";
413 current_btrace_conf
.format
= BTRACE_FORMAT_BTS
;
414 thread
->btrace
= target_enable_btrace (thread
->entry
.id
,
415 ¤t_btrace_conf
);
416 if (thread
->btrace
== NULL
)
417 return "E.Could not enable btrace.";
422 /* Handle btrace enabling in Intel Processor Trace format. */
425 handle_btrace_enable_pt (struct thread_info
*thread
)
427 if (thread
->btrace
!= NULL
)
428 return "E.Btrace already enabled.";
430 current_btrace_conf
.format
= BTRACE_FORMAT_PT
;
431 thread
->btrace
= target_enable_btrace (thread
->entry
.id
,
432 ¤t_btrace_conf
);
433 if (thread
->btrace
== NULL
)
434 return "E.Could not enable btrace.";
439 /* Handle btrace disabling. */
442 handle_btrace_disable (struct thread_info
*thread
)
445 if (thread
->btrace
== NULL
)
446 return "E.Branch tracing not enabled.";
448 if (target_disable_btrace (thread
->btrace
) != 0)
449 return "E.Could not disable branch tracing.";
451 thread
->btrace
= NULL
;
455 /* Handle the "Qbtrace" packet. */
458 handle_btrace_general_set (char *own_buf
)
460 struct thread_info
*thread
;
464 if (!startswith (own_buf
, "Qbtrace:"))
467 op
= own_buf
+ strlen ("Qbtrace:");
469 if (ptid_equal (general_thread
, null_ptid
)
470 || ptid_equal (general_thread
, minus_one_ptid
))
472 strcpy (own_buf
, "E.Must select a single thread.");
476 thread
= find_thread_ptid (general_thread
);
479 strcpy (own_buf
, "E.No such thread.");
485 if (strcmp (op
, "bts") == 0)
486 err
= handle_btrace_enable_bts (thread
);
487 else if (strcmp (op
, "pt") == 0)
488 err
= handle_btrace_enable_pt (thread
);
489 else if (strcmp (op
, "off") == 0)
490 err
= handle_btrace_disable (thread
);
492 err
= "E.Bad Qbtrace operation. Use bts, pt, or off.";
495 strcpy (own_buf
, err
);
502 /* Handle the "Qbtrace-conf" packet. */
505 handle_btrace_conf_general_set (char *own_buf
)
507 struct thread_info
*thread
;
510 if (!startswith (own_buf
, "Qbtrace-conf:"))
513 op
= own_buf
+ strlen ("Qbtrace-conf:");
515 if (ptid_equal (general_thread
, null_ptid
)
516 || ptid_equal (general_thread
, minus_one_ptid
))
518 strcpy (own_buf
, "E.Must select a single thread.");
522 thread
= find_thread_ptid (general_thread
);
525 strcpy (own_buf
, "E.No such thread.");
529 if (startswith (op
, "bts:size="))
535 size
= strtoul (op
+ strlen ("bts:size="), &endp
, 16);
536 if (endp
== NULL
|| *endp
!= 0 || errno
!= 0 || size
> UINT_MAX
)
538 strcpy (own_buf
, "E.Bad size value.");
542 current_btrace_conf
.bts
.size
= (unsigned int) size
;
544 else if (strncmp (op
, "pt:size=", strlen ("pt:size=")) == 0)
550 size
= strtoul (op
+ strlen ("pt:size="), &endp
, 16);
551 if (endp
== NULL
|| *endp
!= 0 || errno
!= 0 || size
> UINT_MAX
)
553 strcpy (own_buf
, "E.Bad size value.");
557 current_btrace_conf
.pt
.size
= (unsigned int) size
;
561 strcpy (own_buf
, "E.Bad Qbtrace configuration option.");
569 /* Handle all of the extended 'Q' packets. */
572 handle_general_set (char *own_buf
)
574 if (startswith (own_buf
, "QPassSignals:"))
576 int numsigs
= (int) GDB_SIGNAL_LAST
, i
;
577 const char *p
= own_buf
+ strlen ("QPassSignals:");
580 p
= decode_address_to_semicolon (&cursig
, p
);
581 for (i
= 0; i
< numsigs
; i
++)
587 /* Keep looping, to clear the remaining signals. */
590 p
= decode_address_to_semicolon (&cursig
, p
);
595 strcpy (own_buf
, "OK");
599 if (startswith (own_buf
, "QProgramSignals:"))
601 int numsigs
= (int) GDB_SIGNAL_LAST
, i
;
602 const char *p
= own_buf
+ strlen ("QProgramSignals:");
605 program_signals_p
= 1;
607 p
= decode_address_to_semicolon (&cursig
, p
);
608 for (i
= 0; i
< numsigs
; i
++)
612 program_signals
[i
] = 1;
614 /* Keep looping, to clear the remaining signals. */
617 p
= decode_address_to_semicolon (&cursig
, p
);
620 program_signals
[i
] = 0;
622 strcpy (own_buf
, "OK");
626 if (startswith (own_buf
, "QCatchSyscalls:"))
628 const char *p
= own_buf
+ sizeof ("QCatchSyscalls:") - 1;
631 struct process_info
*process
;
633 if (!target_running () || !target_supports_catch_syscall ())
639 if (strcmp (p
, "0") == 0)
641 else if (p
[0] == '1' && (p
[1] == ';' || p
[1] == '\0'))
645 fprintf (stderr
, "Unknown catch-syscalls mode requested: %s\n",
651 process
= current_process ();
652 VEC_truncate (int, process
->syscalls_to_catch
, 0);
662 p
= decode_address_to_semicolon (&sysno
, p
);
663 VEC_safe_push (int, process
->syscalls_to_catch
, (int) sysno
);
667 VEC_safe_push (int, process
->syscalls_to_catch
, ANY_SYSCALL
);
674 if (strcmp (own_buf
, "QStartNoAckMode") == 0)
678 fprintf (stderr
, "[noack mode enabled]\n");
687 if (startswith (own_buf
, "QNonStop:"))
689 char *mode
= own_buf
+ 9;
693 if (strcmp (mode
, "0") == 0)
695 else if (strcmp (mode
, "1") == 0)
699 /* We don't know what this mode is, so complain to
701 fprintf (stderr
, "Unknown non-stop mode requested: %s\n",
707 req_str
= req
? "non-stop" : "all-stop";
708 if (start_non_stop (req
) != 0)
710 fprintf (stderr
, "Setting %s mode failed\n", req_str
);
718 fprintf (stderr
, "[%s mode enabled]\n", req_str
);
724 if (startswith (own_buf
, "QDisableRandomization:"))
726 char *packet
= own_buf
+ strlen ("QDisableRandomization:");
729 unpack_varlen_hex (packet
, &setting
);
730 disable_randomization
= setting
;
734 if (disable_randomization
)
735 fprintf (stderr
, "[address space randomization disabled]\n");
737 fprintf (stderr
, "[address space randomization enabled]\n");
744 if (target_supports_tracepoints ()
745 && handle_tracepoint_general_set (own_buf
))
748 if (startswith (own_buf
, "QAgent:"))
750 char *mode
= own_buf
+ strlen ("QAgent:");
753 if (strcmp (mode
, "0") == 0)
755 else if (strcmp (mode
, "1") == 0)
759 /* We don't know what this value is, so complain to GDB. */
760 sprintf (own_buf
, "E.Unknown QAgent value");
764 /* Update the flag. */
767 fprintf (stderr
, "[%s agent]\n", req
? "Enable" : "Disable");
772 if (handle_btrace_general_set (own_buf
))
775 if (handle_btrace_conf_general_set (own_buf
))
778 if (startswith (own_buf
, "QThreadEvents:"))
780 char *mode
= own_buf
+ strlen ("QThreadEvents:");
781 enum tribool req
= TRIBOOL_UNKNOWN
;
783 if (strcmp (mode
, "0") == 0)
785 else if (strcmp (mode
, "1") == 0)
789 char *mode_copy
= xstrdup (mode
);
791 /* We don't know what this mode is, so complain to GDB. */
792 sprintf (own_buf
, "E.Unknown thread-events mode requested: %s\n",
798 report_thread_events
= (req
== TRIBOOL_TRUE
);
802 const char *req_str
= report_thread_events
? "enabled" : "disabled";
804 fprintf (stderr
, "[thread events are now %s]\n", req_str
);
811 /* Otherwise we didn't know what packet it was. Say we didn't
817 get_features_xml (const char *annex
)
819 const struct target_desc
*desc
= current_target_desc ();
821 /* `desc->xmltarget' defines what to return when looking for the
822 "target.xml" file. Its contents can either be verbatim XML code
823 (prefixed with a '@') or else the name of the actual XML file to
824 be used in place of "target.xml".
826 This variable is set up from the auto-generated
827 init_registers_... routine for the current target. */
829 if (desc
->xmltarget
!= NULL
&& strcmp (annex
, "target.xml") == 0)
831 if (*desc
->xmltarget
== '@')
832 return desc
->xmltarget
+ 1;
834 annex
= desc
->xmltarget
;
839 extern const char *const xml_builtin
[][2];
842 /* Look for the annex. */
843 for (i
= 0; xml_builtin
[i
][0] != NULL
; i
++)
844 if (strcmp (annex
, xml_builtin
[i
][0]) == 0)
847 if (xml_builtin
[i
][0] != NULL
)
848 return xml_builtin
[i
][1];
856 monitor_show_help (void)
858 monitor_output ("The following monitor commands are supported:\n");
859 monitor_output (" set debug <0|1>\n");
860 monitor_output (" Enable general debugging messages\n");
861 monitor_output (" set debug-hw-points <0|1>\n");
862 monitor_output (" Enable h/w breakpoint/watchpoint debugging messages\n");
863 monitor_output (" set remote-debug <0|1>\n");
864 monitor_output (" Enable remote protocol debugging messages\n");
865 monitor_output (" set debug-format option1[,option2,...]\n");
866 monitor_output (" Add additional information to debugging messages\n");
867 monitor_output (" Options: all, none");
868 monitor_output (", timestamp");
869 monitor_output ("\n");
870 monitor_output (" exit\n");
871 monitor_output (" Quit GDBserver\n");
874 /* Read trace frame or inferior memory. Returns the number of bytes
875 actually read, zero when no further transfer is possible, and -1 on
876 error. Return of a positive value smaller than LEN does not
877 indicate there's no more to be read, only the end of the transfer.
878 E.g., when GDB reads memory from a traceframe, a first request may
879 be served from a memory block that does not cover the whole request
880 length. A following request gets the rest served from either
881 another block (of the same traceframe) or from the read-only
885 gdb_read_memory (CORE_ADDR memaddr
, unsigned char *myaddr
, int len
)
889 if (current_traceframe
>= 0)
892 ULONGEST length
= len
;
894 if (traceframe_read_mem (current_traceframe
,
895 memaddr
, myaddr
, len
, &nbytes
))
897 /* Data read from trace buffer, we're done. */
900 if (!in_readonly_region (memaddr
, length
))
902 /* Otherwise we have a valid readonly case, fall through. */
903 /* (assume no half-trace half-real blocks for now) */
906 res
= prepare_to_access_memory ();
909 if (set_desired_thread (1))
910 res
= read_inferior_memory (memaddr
, myaddr
, len
);
913 done_accessing_memory ();
915 return res
== 0 ? len
: -1;
921 /* Write trace frame or inferior memory. Actually, writing to trace
922 frames is forbidden. */
925 gdb_write_memory (CORE_ADDR memaddr
, const unsigned char *myaddr
, int len
)
927 if (current_traceframe
>= 0)
933 ret
= prepare_to_access_memory ();
936 if (set_desired_thread (1))
937 ret
= write_inferior_memory (memaddr
, myaddr
, len
);
940 done_accessing_memory ();
946 /* Subroutine of handle_search_memory to simplify it. */
949 handle_search_memory_1 (CORE_ADDR start_addr
, CORE_ADDR search_space_len
,
950 gdb_byte
*pattern
, unsigned pattern_len
,
951 gdb_byte
*search_buf
,
952 unsigned chunk_size
, unsigned search_buf_size
,
953 CORE_ADDR
*found_addrp
)
955 /* Prime the search buffer. */
957 if (gdb_read_memory (start_addr
, search_buf
, search_buf_size
)
960 warning ("Unable to access %ld bytes of target "
961 "memory at 0x%lx, halting search.",
962 (long) search_buf_size
, (long) start_addr
);
966 /* Perform the search.
968 The loop is kept simple by allocating [N + pattern-length - 1] bytes.
969 When we've scanned N bytes we copy the trailing bytes to the start and
970 read in another N bytes. */
972 while (search_space_len
>= pattern_len
)
975 unsigned nr_search_bytes
= (search_space_len
< search_buf_size
979 found_ptr
= (gdb_byte
*) memmem (search_buf
, nr_search_bytes
, pattern
,
982 if (found_ptr
!= NULL
)
984 CORE_ADDR found_addr
= start_addr
+ (found_ptr
- search_buf
);
985 *found_addrp
= found_addr
;
989 /* Not found in this chunk, skip to next chunk. */
991 /* Don't let search_space_len wrap here, it's unsigned. */
992 if (search_space_len
>= chunk_size
)
993 search_space_len
-= chunk_size
;
995 search_space_len
= 0;
997 if (search_space_len
>= pattern_len
)
999 unsigned keep_len
= search_buf_size
- chunk_size
;
1000 CORE_ADDR read_addr
= start_addr
+ chunk_size
+ keep_len
;
1003 /* Copy the trailing part of the previous iteration to the front
1004 of the buffer for the next iteration. */
1005 memcpy (search_buf
, search_buf
+ chunk_size
, keep_len
);
1007 nr_to_read
= (search_space_len
- keep_len
< chunk_size
1008 ? search_space_len
- keep_len
1011 if (gdb_read_memory (read_addr
, search_buf
+ keep_len
,
1012 nr_to_read
) != search_buf_size
)
1014 warning ("Unable to access %ld bytes of target memory "
1015 "at 0x%lx, halting search.",
1016 (long) nr_to_read
, (long) read_addr
);
1020 start_addr
+= chunk_size
;
1029 /* Handle qSearch:memory packets. */
1032 handle_search_memory (char *own_buf
, int packet_len
)
1034 CORE_ADDR start_addr
;
1035 CORE_ADDR search_space_len
;
1037 unsigned int pattern_len
;
1038 /* NOTE: also defined in find.c testcase. */
1039 #define SEARCH_CHUNK_SIZE 16000
1040 const unsigned chunk_size
= SEARCH_CHUNK_SIZE
;
1041 /* Buffer to hold memory contents for searching. */
1042 gdb_byte
*search_buf
;
1043 unsigned search_buf_size
;
1045 CORE_ADDR found_addr
;
1046 int cmd_name_len
= sizeof ("qSearch:memory:") - 1;
1048 pattern
= (gdb_byte
*) malloc (packet_len
);
1049 if (pattern
== NULL
)
1051 error ("Unable to allocate memory to perform the search");
1052 strcpy (own_buf
, "E00");
1055 if (decode_search_memory_packet (own_buf
+ cmd_name_len
,
1056 packet_len
- cmd_name_len
,
1057 &start_addr
, &search_space_len
,
1058 pattern
, &pattern_len
) < 0)
1061 error ("Error in parsing qSearch:memory packet");
1062 strcpy (own_buf
, "E00");
1066 search_buf_size
= chunk_size
+ pattern_len
- 1;
1068 /* No point in trying to allocate a buffer larger than the search space. */
1069 if (search_space_len
< search_buf_size
)
1070 search_buf_size
= search_space_len
;
1072 search_buf
= (gdb_byte
*) malloc (search_buf_size
);
1073 if (search_buf
== NULL
)
1076 error ("Unable to allocate memory to perform the search");
1077 strcpy (own_buf
, "E00");
1081 found
= handle_search_memory_1 (start_addr
, search_space_len
,
1082 pattern
, pattern_len
,
1083 search_buf
, chunk_size
, search_buf_size
,
1087 sprintf (own_buf
, "1,%lx", (long) found_addr
);
1088 else if (found
== 0)
1089 strcpy (own_buf
, "0");
1091 strcpy (own_buf
, "E00");
1097 #define require_running(BUF) \
1098 if (!target_running ()) \
1104 /* Parse options to --debug-format= and "monitor set debug-format".
1105 ARG is the text after "--debug-format=" or "monitor set debug-format".
1106 IS_MONITOR is non-zero if we're invoked via "monitor set debug-format".
1107 This triggers calls to monitor_output.
1108 The result is NULL if all options were parsed ok, otherwise an error
1109 message which the caller must free.
1111 N.B. These commands affect all debug format settings, they are not
1112 cumulative. If a format is not specified, it is turned off.
1113 However, we don't go to extra trouble with things like
1114 "monitor set debug-format all,none,timestamp".
1115 Instead we just parse them one at a time, in order.
1117 The syntax for "monitor set debug" we support here is not identical
1118 to gdb's "set debug foo on|off" because we also use this function to
1119 parse "--debug-format=foo,bar". */
1122 parse_debug_format_options (const char *arg
, int is_monitor
)
1124 VEC (char_ptr
) *options
;
1128 /* First turn all debug format options off. */
1129 debug_timestamp
= 0;
1131 /* First remove leading spaces, for "monitor set debug-format". */
1132 while (isspace (*arg
))
1135 options
= delim_string_to_char_ptr_vec (arg
, ',');
1137 for (ix
= 0; VEC_iterate (char_ptr
, options
, ix
, option
); ++ix
)
1139 if (strcmp (option
, "all") == 0)
1141 debug_timestamp
= 1;
1143 monitor_output ("All extra debug format options enabled.\n");
1145 else if (strcmp (option
, "none") == 0)
1147 debug_timestamp
= 0;
1149 monitor_output ("All extra debug format options disabled.\n");
1151 else if (strcmp (option
, "timestamp") == 0)
1153 debug_timestamp
= 1;
1155 monitor_output ("Timestamps will be added to debug output.\n");
1157 else if (*option
== '\0')
1159 /* An empty option, e.g., "--debug-format=foo,,bar", is ignored. */
1164 char *msg
= xstrprintf ("Unknown debug-format argument: \"%s\"\n",
1167 free_char_ptr_vec (options
);
1172 free_char_ptr_vec (options
);
1176 /* Handle monitor commands not handled by target-specific handlers. */
1179 handle_monitor_command (char *mon
, char *own_buf
)
1181 if (strcmp (mon
, "set debug 1") == 0)
1184 monitor_output ("Debug output enabled.\n");
1186 else if (strcmp (mon
, "set debug 0") == 0)
1189 monitor_output ("Debug output disabled.\n");
1191 else if (strcmp (mon
, "set debug-hw-points 1") == 0)
1193 show_debug_regs
= 1;
1194 monitor_output ("H/W point debugging output enabled.\n");
1196 else if (strcmp (mon
, "set debug-hw-points 0") == 0)
1198 show_debug_regs
= 0;
1199 monitor_output ("H/W point debugging output disabled.\n");
1201 else if (strcmp (mon
, "set remote-debug 1") == 0)
1204 monitor_output ("Protocol debug output enabled.\n");
1206 else if (strcmp (mon
, "set remote-debug 0") == 0)
1209 monitor_output ("Protocol debug output disabled.\n");
1211 else if (startswith (mon
, "set debug-format "))
1214 = parse_debug_format_options (mon
+ sizeof ("set debug-format ") - 1,
1217 if (error_msg
!= NULL
)
1219 monitor_output (error_msg
);
1220 monitor_show_help ();
1221 write_enn (own_buf
);
1225 else if (strcmp (mon
, "help") == 0)
1226 monitor_show_help ();
1227 else if (strcmp (mon
, "exit") == 0)
1231 monitor_output ("Unknown monitor command.\n\n");
1232 monitor_show_help ();
1233 write_enn (own_buf
);
1237 /* Associates a callback with each supported qXfer'able object. */
1241 /* The object this handler handles. */
1244 /* Request that the target transfer up to LEN 8-bit bytes of the
1245 target's OBJECT. The OFFSET, for a seekable object, specifies
1246 the starting point. The ANNEX can be used to provide additional
1247 data-specific information to the target.
1249 Return the number of bytes actually transfered, zero when no
1250 further transfer is possible, -1 on error, -2 when the transfer
1251 is not supported, and -3 on a verbose error message that should
1252 be preserved. Return of a positive value smaller than LEN does
1253 not indicate the end of the object, only the end of the transfer.
1255 One, and only one, of readbuf or writebuf must be non-NULL. */
1256 int (*xfer
) (const char *annex
,
1257 gdb_byte
*readbuf
, const gdb_byte
*writebuf
,
1258 ULONGEST offset
, LONGEST len
);
1261 /* Handle qXfer:auxv:read. */
1264 handle_qxfer_auxv (const char *annex
,
1265 gdb_byte
*readbuf
, const gdb_byte
*writebuf
,
1266 ULONGEST offset
, LONGEST len
)
1268 if (the_target
->read_auxv
== NULL
|| writebuf
!= NULL
)
1271 if (annex
[0] != '\0' || current_thread
== NULL
)
1274 return (*the_target
->read_auxv
) (offset
, readbuf
, len
);
1277 /* Handle qXfer:exec-file:read. */
1280 handle_qxfer_exec_file (const char *const_annex
,
1281 gdb_byte
*readbuf
, const gdb_byte
*writebuf
,
1282 ULONGEST offset
, LONGEST len
)
1288 if (the_target
->pid_to_exec_file
== NULL
|| writebuf
!= NULL
)
1291 if (const_annex
[0] == '\0')
1293 if (current_thread
== NULL
)
1296 pid
= pid_of (current_thread
);
1300 char *annex
= (char *) alloca (strlen (const_annex
) + 1);
1302 strcpy (annex
, const_annex
);
1303 annex
= unpack_varlen_hex (annex
, &pid
);
1305 if (annex
[0] != '\0')
1312 file
= (*the_target
->pid_to_exec_file
) (pid
);
1316 total_len
= strlen (file
);
1318 if (offset
> total_len
)
1321 if (offset
+ len
> total_len
)
1322 len
= total_len
- offset
;
1324 memcpy (readbuf
, file
+ offset
, len
);
1328 /* Handle qXfer:features:read. */
1331 handle_qxfer_features (const char *annex
,
1332 gdb_byte
*readbuf
, const gdb_byte
*writebuf
,
1333 ULONGEST offset
, LONGEST len
)
1335 const char *document
;
1338 if (writebuf
!= NULL
)
1341 if (!target_running ())
1344 /* Grab the correct annex. */
1345 document
= get_features_xml (annex
);
1346 if (document
== NULL
)
1349 total_len
= strlen (document
);
1351 if (offset
> total_len
)
1354 if (offset
+ len
> total_len
)
1355 len
= total_len
- offset
;
1357 memcpy (readbuf
, document
+ offset
, len
);
1361 /* Worker routine for handle_qxfer_libraries.
1362 Add to the length pointed to by ARG a conservative estimate of the
1363 length needed to transmit the file name of INF. */
1366 accumulate_file_name_length (struct inferior_list_entry
*inf
, void *arg
)
1368 struct dll_info
*dll
= (struct dll_info
*) inf
;
1369 unsigned int *total_len
= (unsigned int *) arg
;
1371 /* Over-estimate the necessary memory. Assume that every character
1372 in the library name must be escaped. */
1373 *total_len
+= 128 + 6 * strlen (dll
->name
);
1376 /* Worker routine for handle_qxfer_libraries.
1377 Emit the XML to describe the library in INF. */
1380 emit_dll_description (struct inferior_list_entry
*inf
, void *arg
)
1382 struct dll_info
*dll
= (struct dll_info
*) inf
;
1383 char **p_ptr
= (char **) arg
;
1387 strcpy (p
, " <library name=\"");
1389 name
= xml_escape_text (dll
->name
);
1393 strcpy (p
, "\"><segment address=\"");
1395 sprintf (p
, "0x%lx", (long) dll
->base_addr
);
1397 strcpy (p
, "\"/></library>\n");
1403 /* Handle qXfer:libraries:read. */
1406 handle_qxfer_libraries (const char *annex
,
1407 gdb_byte
*readbuf
, const gdb_byte
*writebuf
,
1408 ULONGEST offset
, LONGEST len
)
1410 unsigned int total_len
;
1413 if (writebuf
!= NULL
)
1416 if (annex
[0] != '\0' || current_thread
== NULL
)
1420 for_each_inferior_with_data (&all_dlls
, accumulate_file_name_length
,
1423 document
= (char *) malloc (total_len
);
1424 if (document
== NULL
)
1427 strcpy (document
, "<library-list version=\"1.0\">\n");
1428 p
= document
+ strlen (document
);
1430 for_each_inferior_with_data (&all_dlls
, emit_dll_description
, &p
);
1432 strcpy (p
, "</library-list>\n");
1434 total_len
= strlen (document
);
1436 if (offset
> total_len
)
1442 if (offset
+ len
> total_len
)
1443 len
= total_len
- offset
;
1445 memcpy (readbuf
, document
+ offset
, len
);
1450 /* Handle qXfer:libraries-svr4:read. */
1453 handle_qxfer_libraries_svr4 (const char *annex
,
1454 gdb_byte
*readbuf
, const gdb_byte
*writebuf
,
1455 ULONGEST offset
, LONGEST len
)
1457 if (writebuf
!= NULL
)
1460 if (current_thread
== NULL
|| the_target
->qxfer_libraries_svr4
== NULL
)
1463 return the_target
->qxfer_libraries_svr4 (annex
, readbuf
, writebuf
, offset
, len
);
1466 /* Handle qXfer:osadata:read. */
1469 handle_qxfer_osdata (const char *annex
,
1470 gdb_byte
*readbuf
, const gdb_byte
*writebuf
,
1471 ULONGEST offset
, LONGEST len
)
1473 if (the_target
->qxfer_osdata
== NULL
|| writebuf
!= NULL
)
1476 return (*the_target
->qxfer_osdata
) (annex
, readbuf
, NULL
, offset
, len
);
1479 /* Handle qXfer:siginfo:read and qXfer:siginfo:write. */
1482 handle_qxfer_siginfo (const char *annex
,
1483 gdb_byte
*readbuf
, const gdb_byte
*writebuf
,
1484 ULONGEST offset
, LONGEST len
)
1486 if (the_target
->qxfer_siginfo
== NULL
)
1489 if (annex
[0] != '\0' || current_thread
== NULL
)
1492 return (*the_target
->qxfer_siginfo
) (annex
, readbuf
, writebuf
, offset
, len
);
1495 /* Handle qXfer:spu:read and qXfer:spu:write. */
1498 handle_qxfer_spu (const char *annex
,
1499 gdb_byte
*readbuf
, const gdb_byte
*writebuf
,
1500 ULONGEST offset
, LONGEST len
)
1502 if (the_target
->qxfer_spu
== NULL
)
1505 if (current_thread
== NULL
)
1508 return (*the_target
->qxfer_spu
) (annex
, readbuf
, writebuf
, offset
, len
);
1511 /* Handle qXfer:statictrace:read. */
1514 handle_qxfer_statictrace (const char *annex
,
1515 gdb_byte
*readbuf
, const gdb_byte
*writebuf
,
1516 ULONGEST offset
, LONGEST len
)
1520 if (writebuf
!= NULL
)
1523 if (annex
[0] != '\0' || current_thread
== NULL
|| current_traceframe
== -1)
1526 if (traceframe_read_sdata (current_traceframe
, offset
,
1527 readbuf
, len
, &nbytes
))
1532 /* Helper for handle_qxfer_threads_proper.
1533 Emit the XML to describe the thread of INF. */
1536 handle_qxfer_threads_worker (struct inferior_list_entry
*inf
, void *arg
)
1538 struct thread_info
*thread
= (struct thread_info
*) inf
;
1539 struct buffer
*buffer
= (struct buffer
*) arg
;
1540 ptid_t ptid
= thread_to_gdb_id (thread
);
1542 int core
= target_core_of_thread (ptid
);
1544 const char *name
= target_thread_name (ptid
);
1546 write_ptid (ptid_s
, ptid
);
1548 buffer_xml_printf (buffer
, "<thread id=\"%s\"", ptid_s
);
1552 sprintf (core_s
, "%d", core
);
1553 buffer_xml_printf (buffer
, " core=\"%s\"", core_s
);
1557 buffer_xml_printf (buffer
, " name=\"%s\"", name
);
1559 buffer_xml_printf (buffer
, "/>\n");
1562 /* Helper for handle_qxfer_threads. */
1565 handle_qxfer_threads_proper (struct buffer
*buffer
)
1567 buffer_grow_str (buffer
, "<threads>\n");
1569 for_each_inferior_with_data (&all_threads
, handle_qxfer_threads_worker
,
1572 buffer_grow_str0 (buffer
, "</threads>\n");
1575 /* Handle qXfer:threads:read. */
1578 handle_qxfer_threads (const char *annex
,
1579 gdb_byte
*readbuf
, const gdb_byte
*writebuf
,
1580 ULONGEST offset
, LONGEST len
)
1582 static char *result
= 0;
1583 static unsigned int result_length
= 0;
1585 if (writebuf
!= NULL
)
1588 if (annex
[0] != '\0')
1593 struct buffer buffer
;
1594 /* When asked for data at offset 0, generate everything and store into
1595 'result'. Successive reads will be served off 'result'. */
1599 buffer_init (&buffer
);
1601 handle_qxfer_threads_proper (&buffer
);
1603 result
= buffer_finish (&buffer
);
1604 result_length
= strlen (result
);
1605 buffer_free (&buffer
);
1608 if (offset
>= result_length
)
1610 /* We're out of data. */
1617 if (len
> result_length
- offset
)
1618 len
= result_length
- offset
;
1620 memcpy (readbuf
, result
+ offset
, len
);
1625 /* Handle qXfer:traceframe-info:read. */
1628 handle_qxfer_traceframe_info (const char *annex
,
1629 gdb_byte
*readbuf
, const gdb_byte
*writebuf
,
1630 ULONGEST offset
, LONGEST len
)
1632 static char *result
= 0;
1633 static unsigned int result_length
= 0;
1635 if (writebuf
!= NULL
)
1638 if (!target_running () || annex
[0] != '\0' || current_traceframe
== -1)
1643 struct buffer buffer
;
1645 /* When asked for data at offset 0, generate everything and
1646 store into 'result'. Successive reads will be served off
1650 buffer_init (&buffer
);
1652 traceframe_read_info (current_traceframe
, &buffer
);
1654 result
= buffer_finish (&buffer
);
1655 result_length
= strlen (result
);
1656 buffer_free (&buffer
);
1659 if (offset
>= result_length
)
1661 /* We're out of data. */
1668 if (len
> result_length
- offset
)
1669 len
= result_length
- offset
;
1671 memcpy (readbuf
, result
+ offset
, len
);
1675 /* Handle qXfer:fdpic:read. */
1678 handle_qxfer_fdpic (const char *annex
, gdb_byte
*readbuf
,
1679 const gdb_byte
*writebuf
, ULONGEST offset
, LONGEST len
)
1681 if (the_target
->read_loadmap
== NULL
)
1684 if (current_thread
== NULL
)
1687 return (*the_target
->read_loadmap
) (annex
, offset
, readbuf
, len
);
1690 /* Handle qXfer:btrace:read. */
1693 handle_qxfer_btrace (const char *annex
,
1694 gdb_byte
*readbuf
, const gdb_byte
*writebuf
,
1695 ULONGEST offset
, LONGEST len
)
1697 static struct buffer cache
;
1698 struct thread_info
*thread
;
1699 enum btrace_read_type type
;
1702 if (the_target
->read_btrace
== NULL
|| writebuf
!= NULL
)
1705 if (ptid_equal (general_thread
, null_ptid
)
1706 || ptid_equal (general_thread
, minus_one_ptid
))
1708 strcpy (own_buf
, "E.Must select a single thread.");
1712 thread
= find_thread_ptid (general_thread
);
1715 strcpy (own_buf
, "E.No such thread.");
1719 if (thread
->btrace
== NULL
)
1721 strcpy (own_buf
, "E.Btrace not enabled.");
1725 if (strcmp (annex
, "all") == 0)
1726 type
= BTRACE_READ_ALL
;
1727 else if (strcmp (annex
, "new") == 0)
1728 type
= BTRACE_READ_NEW
;
1729 else if (strcmp (annex
, "delta") == 0)
1730 type
= BTRACE_READ_DELTA
;
1733 strcpy (own_buf
, "E.Bad annex.");
1739 buffer_free (&cache
);
1741 result
= target_read_btrace (thread
->btrace
, &cache
, type
);
1744 memcpy (own_buf
, cache
.buffer
, cache
.used_size
);
1748 else if (offset
> cache
.used_size
)
1750 buffer_free (&cache
);
1754 if (len
> cache
.used_size
- offset
)
1755 len
= cache
.used_size
- offset
;
1757 memcpy (readbuf
, cache
.buffer
+ offset
, len
);
1762 /* Handle qXfer:btrace-conf:read. */
1765 handle_qxfer_btrace_conf (const char *annex
,
1766 gdb_byte
*readbuf
, const gdb_byte
*writebuf
,
1767 ULONGEST offset
, LONGEST len
)
1769 static struct buffer cache
;
1770 struct thread_info
*thread
;
1773 if (the_target
->read_btrace_conf
== NULL
|| writebuf
!= NULL
)
1776 if (annex
[0] != '\0')
1779 if (ptid_equal (general_thread
, null_ptid
)
1780 || ptid_equal (general_thread
, minus_one_ptid
))
1782 strcpy (own_buf
, "E.Must select a single thread.");
1786 thread
= find_thread_ptid (general_thread
);
1789 strcpy (own_buf
, "E.No such thread.");
1793 if (thread
->btrace
== NULL
)
1795 strcpy (own_buf
, "E.Btrace not enabled.");
1801 buffer_free (&cache
);
1803 result
= target_read_btrace_conf (thread
->btrace
, &cache
);
1806 memcpy (own_buf
, cache
.buffer
, cache
.used_size
);
1810 else if (offset
> cache
.used_size
)
1812 buffer_free (&cache
);
1816 if (len
> cache
.used_size
- offset
)
1817 len
= cache
.used_size
- offset
;
1819 memcpy (readbuf
, cache
.buffer
+ offset
, len
);
1824 static const struct qxfer qxfer_packets
[] =
1826 { "auxv", handle_qxfer_auxv
},
1827 { "btrace", handle_qxfer_btrace
},
1828 { "btrace-conf", handle_qxfer_btrace_conf
},
1829 { "exec-file", handle_qxfer_exec_file
},
1830 { "fdpic", handle_qxfer_fdpic
},
1831 { "features", handle_qxfer_features
},
1832 { "libraries", handle_qxfer_libraries
},
1833 { "libraries-svr4", handle_qxfer_libraries_svr4
},
1834 { "osdata", handle_qxfer_osdata
},
1835 { "siginfo", handle_qxfer_siginfo
},
1836 { "spu", handle_qxfer_spu
},
1837 { "statictrace", handle_qxfer_statictrace
},
1838 { "threads", handle_qxfer_threads
},
1839 { "traceframe-info", handle_qxfer_traceframe_info
},
1843 handle_qxfer (char *own_buf
, int packet_len
, int *new_packet_len_p
)
1851 if (!startswith (own_buf
, "qXfer:"))
1854 /* Grab the object, r/w and annex. */
1855 if (decode_xfer (own_buf
+ 6, &object
, &rw
, &annex
, &offset
) < 0)
1857 write_enn (own_buf
);
1862 i
< sizeof (qxfer_packets
) / sizeof (qxfer_packets
[0]);
1865 const struct qxfer
*q
= &qxfer_packets
[i
];
1867 if (strcmp (object
, q
->object
) == 0)
1869 if (strcmp (rw
, "read") == 0)
1871 unsigned char *data
;
1876 /* Grab the offset and length. */
1877 if (decode_xfer_read (offset
, &ofs
, &len
) < 0)
1879 write_enn (own_buf
);
1883 /* Read one extra byte, as an indicator of whether there is
1885 if (len
> PBUFSIZ
- 2)
1887 data
= (unsigned char *) malloc (len
+ 1);
1890 write_enn (own_buf
);
1893 n
= (*q
->xfer
) (annex
, data
, NULL
, ofs
, len
+ 1);
1901 /* Preserve error message. */
1904 write_enn (own_buf
);
1906 *new_packet_len_p
= write_qxfer_response (own_buf
, data
, len
, 1);
1908 *new_packet_len_p
= write_qxfer_response (own_buf
, data
, n
, 0);
1913 else if (strcmp (rw
, "write") == 0)
1918 unsigned char *data
;
1920 strcpy (own_buf
, "E00");
1921 data
= (unsigned char *) malloc (packet_len
- (offset
- own_buf
));
1924 write_enn (own_buf
);
1927 if (decode_xfer_write (offset
, packet_len
- (offset
- own_buf
),
1928 &ofs
, &len
, data
) < 0)
1931 write_enn (own_buf
);
1935 n
= (*q
->xfer
) (annex
, NULL
, data
, ofs
, len
);
1943 /* Preserve error message. */
1946 write_enn (own_buf
);
1948 sprintf (own_buf
, "%x", n
);
1961 /* Compute 32 bit CRC from inferior memory.
1963 On success, return 32 bit CRC.
1964 On failure, return (unsigned long long) -1. */
1966 static unsigned long long
1967 crc32 (CORE_ADDR base
, int len
, unsigned int crc
)
1971 unsigned char byte
= 0;
1973 /* Return failure if memory read fails. */
1974 if (read_inferior_memory (base
, &byte
, 1) != 0)
1975 return (unsigned long long) -1;
1977 crc
= xcrc32 (&byte
, 1, crc
);
1980 return (unsigned long long) crc
;
1983 /* Add supported btrace packets to BUF. */
1986 supported_btrace_packets (char *buf
)
1988 int btrace_supported
= 0;
1990 if (target_supports_btrace (BTRACE_FORMAT_BTS
))
1992 strcat (buf
, ";Qbtrace:bts+");
1993 strcat (buf
, ";Qbtrace-conf:bts:size+");
1995 btrace_supported
= 1;
1998 if (target_supports_btrace (BTRACE_FORMAT_PT
))
2000 strcat (buf
, ";Qbtrace:pt+");
2001 strcat (buf
, ";Qbtrace-conf:pt:size+");
2003 btrace_supported
= 1;
2006 if (!btrace_supported
)
2009 strcat (buf
, ";Qbtrace:off+");
2010 strcat (buf
, ";qXfer:btrace:read+");
2011 strcat (buf
, ";qXfer:btrace-conf:read+");
2014 /* Handle all of the extended 'q' packets. */
2017 handle_query (char *own_buf
, int packet_len
, int *new_packet_len_p
)
2019 static struct inferior_list_entry
*thread_ptr
;
2021 /* Reply the current thread id. */
2022 if (strcmp ("qC", own_buf
) == 0 && !disable_packet_qC
)
2025 require_running (own_buf
);
2027 if (!ptid_equal (general_thread
, null_ptid
)
2028 && !ptid_equal (general_thread
, minus_one_ptid
))
2029 gdb_id
= general_thread
;
2032 thread_ptr
= get_first_inferior (&all_threads
);
2033 gdb_id
= thread_to_gdb_id ((struct thread_info
*)thread_ptr
);
2036 sprintf (own_buf
, "QC");
2038 write_ptid (own_buf
, gdb_id
);
2042 if (strcmp ("qSymbol::", own_buf
) == 0)
2044 struct thread_info
*save_thread
= current_thread
;
2046 /* For qSymbol, GDB only changes the current thread if the
2047 previous current thread was of a different process. So if
2048 the previous thread is gone, we need to pick another one of
2049 the same process. This can happen e.g., if we followed an
2050 exec in a non-leader thread. */
2051 if (current_thread
== NULL
)
2054 = find_any_thread_of_pid (ptid_get_pid (general_thread
));
2056 /* Just in case, if we didn't find a thread, then bail out
2057 instead of crashing. */
2058 if (current_thread
== NULL
)
2060 write_enn (own_buf
);
2061 current_thread
= save_thread
;
2066 /* GDB is suggesting new symbols have been loaded. This may
2067 mean a new shared library has been detected as loaded, so
2068 take the opportunity to check if breakpoints we think are
2069 inserted, still are. Note that it isn't guaranteed that
2070 we'll see this when a shared library is loaded, and nor will
2071 we see this for unloads (although breakpoints in unloaded
2072 libraries shouldn't trigger), as GDB may not find symbols for
2073 the library at all. We also re-validate breakpoints when we
2074 see a second GDB breakpoint for the same address, and or when
2075 we access breakpoint shadows. */
2076 validate_breakpoints ();
2078 if (target_supports_tracepoints ())
2079 tracepoint_look_up_symbols ();
2081 if (current_thread
!= NULL
&& the_target
->look_up_symbols
!= NULL
)
2082 (*the_target
->look_up_symbols
) ();
2084 current_thread
= save_thread
;
2086 strcpy (own_buf
, "OK");
2090 if (!disable_packet_qfThreadInfo
)
2092 if (strcmp ("qfThreadInfo", own_buf
) == 0)
2096 require_running (own_buf
);
2097 thread_ptr
= get_first_inferior (&all_threads
);
2100 gdb_id
= thread_to_gdb_id ((struct thread_info
*)thread_ptr
);
2101 write_ptid (own_buf
, gdb_id
);
2102 thread_ptr
= thread_ptr
->next
;
2106 if (strcmp ("qsThreadInfo", own_buf
) == 0)
2110 require_running (own_buf
);
2111 if (thread_ptr
!= NULL
)
2114 gdb_id
= thread_to_gdb_id ((struct thread_info
*)thread_ptr
);
2115 write_ptid (own_buf
, gdb_id
);
2116 thread_ptr
= thread_ptr
->next
;
2121 sprintf (own_buf
, "l");
2127 if (the_target
->read_offsets
!= NULL
2128 && strcmp ("qOffsets", own_buf
) == 0)
2130 CORE_ADDR text
, data
;
2132 require_running (own_buf
);
2133 if (the_target
->read_offsets (&text
, &data
))
2134 sprintf (own_buf
, "Text=%lX;Data=%lX;Bss=%lX",
2135 (long)text
, (long)data
, (long)data
);
2137 write_enn (own_buf
);
2142 /* Protocol features query. */
2143 if (startswith (own_buf
, "qSupported")
2144 && (own_buf
[10] == ':' || own_buf
[10] == '\0'))
2146 char *p
= &own_buf
[10];
2147 int gdb_supports_qRelocInsn
= 0;
2149 /* Process each feature being provided by GDB. The first
2150 feature will follow a ':', and latter features will follow
2154 char **qsupported
= NULL
;
2159 /* Two passes, to avoid nested strtok calls in
2160 target_process_qsupported. */
2161 for (p
= strtok (p
+ 1, ";");
2163 p
= strtok (NULL
, ";"))
2166 qsupported
= XRESIZEVEC (char *, qsupported
, count
);
2167 qsupported
[count
- 1] = xstrdup (p
);
2170 for (i
= 0; i
< count
; i
++)
2173 if (strcmp (p
, "multiprocess+") == 0)
2175 /* GDB supports and wants multi-process support if
2177 if (target_supports_multi_process ())
2180 else if (strcmp (p
, "qRelocInsn+") == 0)
2182 /* GDB supports relocate instruction requests. */
2183 gdb_supports_qRelocInsn
= 1;
2185 else if (strcmp (p
, "swbreak+") == 0)
2187 /* GDB wants us to report whether a trap is caused
2188 by a software breakpoint and for us to handle PC
2189 adjustment if necessary on this target. */
2190 if (target_supports_stopped_by_sw_breakpoint ())
2191 swbreak_feature
= 1;
2193 else if (strcmp (p
, "hwbreak+") == 0)
2195 /* GDB wants us to report whether a trap is caused
2196 by a hardware breakpoint. */
2197 if (target_supports_stopped_by_hw_breakpoint ())
2198 hwbreak_feature
= 1;
2200 else if (strcmp (p
, "fork-events+") == 0)
2202 /* GDB supports and wants fork events if possible. */
2203 if (target_supports_fork_events ())
2204 report_fork_events
= 1;
2206 else if (strcmp (p
, "vfork-events+") == 0)
2208 /* GDB supports and wants vfork events if possible. */
2209 if (target_supports_vfork_events ())
2210 report_vfork_events
= 1;
2212 else if (strcmp (p
, "exec-events+") == 0)
2214 /* GDB supports and wants exec events if possible. */
2215 if (target_supports_exec_events ())
2216 report_exec_events
= 1;
2218 else if (strcmp (p
, "vContSupported+") == 0)
2219 vCont_supported
= 1;
2220 else if (strcmp (p
, "QThreadEvents+") == 0)
2222 else if (strcmp (p
, "no-resumed+") == 0)
2224 /* GDB supports and wants TARGET_WAITKIND_NO_RESUMED
2226 report_no_resumed
= 1;
2230 /* Move the unknown features all together. */
2231 qsupported
[i
] = NULL
;
2232 qsupported
[unknown
] = p
;
2237 /* Give the target backend a chance to process the unknown
2239 target_process_qsupported (qsupported
, unknown
);
2241 for (i
= 0; i
< count
; i
++)
2242 free (qsupported
[i
]);
2247 "PacketSize=%x;QPassSignals+;QProgramSignals+",
2250 if (target_supports_catch_syscall ())
2251 strcat (own_buf
, ";QCatchSyscalls+");
2253 if (the_target
->qxfer_libraries_svr4
!= NULL
)
2254 strcat (own_buf
, ";qXfer:libraries-svr4:read+"
2255 ";augmented-libraries-svr4-read+");
2258 /* We do not have any hook to indicate whether the non-SVR4 target
2259 backend supports qXfer:libraries:read, so always report it. */
2260 strcat (own_buf
, ";qXfer:libraries:read+");
2263 if (the_target
->read_auxv
!= NULL
)
2264 strcat (own_buf
, ";qXfer:auxv:read+");
2266 if (the_target
->qxfer_spu
!= NULL
)
2267 strcat (own_buf
, ";qXfer:spu:read+;qXfer:spu:write+");
2269 if (the_target
->qxfer_siginfo
!= NULL
)
2270 strcat (own_buf
, ";qXfer:siginfo:read+;qXfer:siginfo:write+");
2272 if (the_target
->read_loadmap
!= NULL
)
2273 strcat (own_buf
, ";qXfer:fdpic:read+");
2275 /* We always report qXfer:features:read, as targets may
2276 install XML files on a subsequent call to arch_setup.
2277 If we reported to GDB on startup that we don't support
2278 qXfer:feature:read at all, we will never be re-queried. */
2279 strcat (own_buf
, ";qXfer:features:read+");
2281 if (transport_is_reliable
)
2282 strcat (own_buf
, ";QStartNoAckMode+");
2284 if (the_target
->qxfer_osdata
!= NULL
)
2285 strcat (own_buf
, ";qXfer:osdata:read+");
2287 if (target_supports_multi_process ())
2288 strcat (own_buf
, ";multiprocess+");
2290 if (target_supports_fork_events ())
2291 strcat (own_buf
, ";fork-events+");
2293 if (target_supports_vfork_events ())
2294 strcat (own_buf
, ";vfork-events+");
2296 if (target_supports_exec_events ())
2297 strcat (own_buf
, ";exec-events+");
2299 if (target_supports_non_stop ())
2300 strcat (own_buf
, ";QNonStop+");
2302 if (target_supports_disable_randomization ())
2303 strcat (own_buf
, ";QDisableRandomization+");
2305 strcat (own_buf
, ";qXfer:threads:read+");
2307 if (target_supports_tracepoints ())
2309 strcat (own_buf
, ";ConditionalTracepoints+");
2310 strcat (own_buf
, ";TraceStateVariables+");
2311 strcat (own_buf
, ";TracepointSource+");
2312 strcat (own_buf
, ";DisconnectedTracing+");
2313 if (gdb_supports_qRelocInsn
&& target_supports_fast_tracepoints ())
2314 strcat (own_buf
, ";FastTracepoints+");
2315 strcat (own_buf
, ";StaticTracepoints+");
2316 strcat (own_buf
, ";InstallInTrace+");
2317 strcat (own_buf
, ";qXfer:statictrace:read+");
2318 strcat (own_buf
, ";qXfer:traceframe-info:read+");
2319 strcat (own_buf
, ";EnableDisableTracepoints+");
2320 strcat (own_buf
, ";QTBuffer:size+");
2321 strcat (own_buf
, ";tracenz+");
2324 if (target_supports_hardware_single_step ()
2325 || target_supports_software_single_step () )
2327 strcat (own_buf
, ";ConditionalBreakpoints+");
2329 strcat (own_buf
, ";BreakpointCommands+");
2331 if (target_supports_agent ())
2332 strcat (own_buf
, ";QAgent+");
2334 supported_btrace_packets (own_buf
);
2336 if (target_supports_stopped_by_sw_breakpoint ())
2337 strcat (own_buf
, ";swbreak+");
2339 if (target_supports_stopped_by_hw_breakpoint ())
2340 strcat (own_buf
, ";hwbreak+");
2342 if (the_target
->pid_to_exec_file
!= NULL
)
2343 strcat (own_buf
, ";qXfer:exec-file:read+");
2345 strcat (own_buf
, ";vContSupported+");
2347 strcat (own_buf
, ";QThreadEvents+");
2349 strcat (own_buf
, ";no-resumed+");
2351 /* Reinitialize components as needed for the new connection. */
2352 hostio_handle_new_gdb_connection ();
2353 target_handle_new_gdb_connection ();
2358 /* Thread-local storage support. */
2359 if (the_target
->get_tls_address
!= NULL
2360 && startswith (own_buf
, "qGetTLSAddr:"))
2362 char *p
= own_buf
+ 12;
2363 CORE_ADDR parts
[2], address
= 0;
2365 ptid_t ptid
= null_ptid
;
2367 require_running (own_buf
);
2369 for (i
= 0; i
< 3; i
++)
2377 p2
= strchr (p
, ',');
2390 ptid
= read_ptid (p
, NULL
);
2392 decode_address (&parts
[i
- 1], p
, len
);
2396 if (p
!= NULL
|| i
< 3)
2400 struct thread_info
*thread
= find_thread_ptid (ptid
);
2405 err
= the_target
->get_tls_address (thread
, parts
[0], parts
[1],
2411 strcpy (own_buf
, paddress(address
));
2416 write_enn (own_buf
);
2420 /* Otherwise, pretend we do not understand this packet. */
2423 /* Windows OS Thread Information Block address support. */
2424 if (the_target
->get_tib_address
!= NULL
2425 && startswith (own_buf
, "qGetTIBAddr:"))
2430 ptid_t ptid
= read_ptid (own_buf
+ 12, &annex
);
2432 n
= (*the_target
->get_tib_address
) (ptid
, &tlb
);
2435 strcpy (own_buf
, paddress(tlb
));
2440 write_enn (own_buf
);
2446 /* Handle "monitor" commands. */
2447 if (startswith (own_buf
, "qRcmd,"))
2449 char *mon
= (char *) malloc (PBUFSIZ
);
2450 int len
= strlen (own_buf
+ 6);
2454 write_enn (own_buf
);
2459 || hex2bin (own_buf
+ 6, (gdb_byte
*) mon
, len
/ 2) != len
/ 2)
2461 write_enn (own_buf
);
2465 mon
[len
/ 2] = '\0';
2469 if (the_target
->handle_monitor_command
== NULL
2470 || (*the_target
->handle_monitor_command
) (mon
) == 0)
2471 /* Default processing. */
2472 handle_monitor_command (mon
, own_buf
);
2478 if (startswith (own_buf
, "qSearch:memory:"))
2480 require_running (own_buf
);
2481 handle_search_memory (own_buf
, packet_len
);
2485 if (strcmp (own_buf
, "qAttached") == 0
2486 || startswith (own_buf
, "qAttached:"))
2488 struct process_info
*process
;
2490 if (own_buf
[sizeof ("qAttached") - 1])
2492 int pid
= strtoul (own_buf
+ sizeof ("qAttached:") - 1, NULL
, 16);
2493 process
= (struct process_info
*)
2494 find_inferior_id (&all_processes
, pid_to_ptid (pid
));
2498 require_running (own_buf
);
2499 process
= current_process ();
2502 if (process
== NULL
)
2504 write_enn (own_buf
);
2508 strcpy (own_buf
, process
->attached
? "1" : "0");
2512 if (startswith (own_buf
, "qCRC:"))
2514 /* CRC check (compare-section). */
2518 unsigned long long crc
;
2520 require_running (own_buf
);
2521 comma
= unpack_varlen_hex (own_buf
+ 5, &base
);
2522 if (*comma
++ != ',')
2524 write_enn (own_buf
);
2527 len
= strtoul (comma
, NULL
, 16);
2528 crc
= crc32 (base
, len
, 0xffffffff);
2529 /* Check for memory failure. */
2530 if (crc
== (unsigned long long) -1)
2532 write_enn (own_buf
);
2535 sprintf (own_buf
, "C%lx", (unsigned long) crc
);
2539 if (handle_qxfer (own_buf
, packet_len
, new_packet_len_p
))
2542 if (target_supports_tracepoints () && handle_tracepoint_query (own_buf
))
2545 /* Otherwise we didn't know what packet it was. Say we didn't
2550 static void gdb_wants_all_threads_stopped (void);
2551 static void resume (struct thread_resume
*actions
, size_t n
);
2553 /* The callback that is passed to visit_actioned_threads. */
2554 typedef int (visit_actioned_threads_callback_ftype
)
2555 (const struct thread_resume
*, struct thread_info
*);
2557 /* Struct to pass data to visit_actioned_threads. */
2559 struct visit_actioned_threads_data
2561 const struct thread_resume
*actions
;
2563 visit_actioned_threads_callback_ftype
*callback
;
2566 /* Call CALLBACK for any thread to which ACTIONS applies to. Returns
2567 true if CALLBACK returns true. Returns false if no matching thread
2568 is found or CALLBACK results false.
2569 Note: This function is itself a callback for find_inferior. */
2572 visit_actioned_threads (struct inferior_list_entry
*entry
, void *datap
)
2574 struct visit_actioned_threads_data
*data
2575 = (struct visit_actioned_threads_data
*) datap
;
2576 const struct thread_resume
*actions
= data
->actions
;
2577 size_t num_actions
= data
->num_actions
;
2578 visit_actioned_threads_callback_ftype
*callback
= data
->callback
;
2581 for (i
= 0; i
< num_actions
; i
++)
2583 const struct thread_resume
*action
= &actions
[i
];
2585 if (ptid_equal (action
->thread
, minus_one_ptid
)
2586 || ptid_equal (action
->thread
, entry
->id
)
2587 || ((ptid_get_pid (action
->thread
)
2588 == ptid_get_pid (entry
->id
))
2589 && ptid_get_lwp (action
->thread
) == -1))
2591 struct thread_info
*thread
= (struct thread_info
*) entry
;
2593 if ((*callback
) (action
, thread
))
2601 /* Callback for visit_actioned_threads. If the thread has a pending
2602 status to report, report it now. */
2605 handle_pending_status (const struct thread_resume
*resumption
,
2606 struct thread_info
*thread
)
2608 if (thread
->status_pending_p
)
2610 thread
->status_pending_p
= 0;
2612 last_status
= thread
->last_status
;
2613 last_ptid
= thread
->entry
.id
;
2614 prepare_resume_reply (own_buf
, last_ptid
, &last_status
);
2620 /* Parse vCont packets. */
2622 handle_v_cont (char *own_buf
)
2626 struct thread_resume
*resume_info
;
2627 struct thread_resume default_action
= {{0}};
2629 /* Count the number of semicolons in the packet. There should be one
2630 for every action. */
2636 p
= strchr (p
, ';');
2639 resume_info
= (struct thread_resume
*) malloc (n
* sizeof (resume_info
[0]));
2640 if (resume_info
== NULL
)
2648 memset (&resume_info
[i
], 0, sizeof resume_info
[i
]);
2650 if (p
[0] == 's' || p
[0] == 'S')
2651 resume_info
[i
].kind
= resume_step
;
2652 else if (p
[0] == 'r')
2653 resume_info
[i
].kind
= resume_step
;
2654 else if (p
[0] == 'c' || p
[0] == 'C')
2655 resume_info
[i
].kind
= resume_continue
;
2656 else if (p
[0] == 't')
2657 resume_info
[i
].kind
= resume_stop
;
2661 if (p
[0] == 'S' || p
[0] == 'C')
2664 sig
= strtol (p
+ 1, &q
, 16);
2669 if (!gdb_signal_to_host_p ((enum gdb_signal
) sig
))
2671 resume_info
[i
].sig
= gdb_signal_to_host ((enum gdb_signal
) sig
);
2673 else if (p
[0] == 'r')
2677 p
= unpack_varlen_hex (p
+ 1, &addr
);
2678 resume_info
[i
].step_range_start
= addr
;
2683 p
= unpack_varlen_hex (p
+ 1, &addr
);
2684 resume_info
[i
].step_range_end
= addr
;
2693 resume_info
[i
].thread
= minus_one_ptid
;
2694 default_action
= resume_info
[i
];
2696 /* Note: we don't increment i here, we'll overwrite this entry
2697 the next time through. */
2699 else if (p
[0] == ':')
2701 ptid_t ptid
= read_ptid (p
+ 1, &q
);
2706 if (p
[0] != ';' && p
[0] != 0)
2709 resume_info
[i
].thread
= ptid
;
2716 resume_info
[i
] = default_action
;
2718 resume (resume_info
, n
);
2723 write_enn (own_buf
);
2728 /* Resume target with ACTIONS, an array of NUM_ACTIONS elements. */
2731 resume (struct thread_resume
*actions
, size_t num_actions
)
2735 /* Check if among the threads that GDB wants actioned, there's
2736 one with a pending status to report. If so, skip actually
2737 resuming/stopping and report the pending event
2739 struct visit_actioned_threads_data data
;
2741 data
.actions
= actions
;
2742 data
.num_actions
= num_actions
;
2743 data
.callback
= handle_pending_status
;
2744 if (find_inferior (&all_threads
, visit_actioned_threads
, &data
) != NULL
)
2750 (*the_target
->resume
) (actions
, num_actions
);
2756 last_ptid
= mywait (minus_one_ptid
, &last_status
, 0, 1);
2758 if (last_status
.kind
== TARGET_WAITKIND_NO_RESUMED
2759 && !report_no_resumed
)
2761 /* The client does not support this stop reply. At least
2763 sprintf (own_buf
, "E.No unwaited-for children left.");
2764 disable_async_io ();
2768 if (last_status
.kind
!= TARGET_WAITKIND_EXITED
2769 && last_status
.kind
!= TARGET_WAITKIND_SIGNALLED
2770 && last_status
.kind
!= TARGET_WAITKIND_NO_RESUMED
)
2771 current_thread
->last_status
= last_status
;
2773 /* From the client's perspective, all-stop mode always stops all
2774 threads implicitly (and the target backend has already done
2775 so by now). Tag all threads as "want-stopped", so we don't
2776 resume them implicitly without the client telling us to. */
2777 gdb_wants_all_threads_stopped ();
2778 prepare_resume_reply (own_buf
, last_ptid
, &last_status
);
2779 disable_async_io ();
2781 if (last_status
.kind
== TARGET_WAITKIND_EXITED
2782 || last_status
.kind
== TARGET_WAITKIND_SIGNALLED
)
2783 mourn_inferior (find_process_pid (ptid_get_pid (last_ptid
)));
2787 /* Attach to a new program. Return 1 if successful, 0 if failure. */
2789 handle_v_attach (char *own_buf
)
2793 pid
= strtol (own_buf
+ 8, NULL
, 16);
2794 if (pid
!= 0 && attach_inferior (pid
) == 0)
2796 /* Don't report shared library events after attaching, even if
2797 some libraries are preloaded. GDB will always poll the
2798 library list. Avoids the "stopped by shared library event"
2799 notice on the GDB side. */
2804 /* In non-stop, we don't send a resume reply. Stop events
2805 will follow up using the normal notification
2810 prepare_resume_reply (own_buf
, last_ptid
, &last_status
);
2816 write_enn (own_buf
);
2821 /* Run a new program. Return 1 if successful, 0 if failure. */
2823 handle_v_run (char *own_buf
)
2825 char *p
, *next_p
, **new_argv
;
2829 for (p
= own_buf
+ strlen ("vRun;"); p
&& *p
; p
= strchr (p
, ';'))
2835 new_argv
= (char **) calloc (new_argc
+ 2, sizeof (char *));
2836 if (new_argv
== NULL
)
2838 write_enn (own_buf
);
2843 for (p
= own_buf
+ strlen ("vRun;"); *p
; p
= next_p
)
2845 next_p
= strchr (p
, ';');
2847 next_p
= p
+ strlen (p
);
2849 if (i
== 0 && p
== next_p
)
2853 /* FIXME: Fail request if out of memory instead of dying. */
2854 new_argv
[i
] = (char *) xmalloc (1 + (next_p
- p
) / 2);
2855 hex2bin (p
, (gdb_byte
*) new_argv
[i
], (next_p
- p
) / 2);
2856 new_argv
[i
][(next_p
- p
) / 2] = '\0';
2865 if (new_argv
[0] == NULL
)
2867 /* GDB didn't specify a program to run. Use the program from the
2868 last run with the new argument list. */
2870 if (program_argv
== NULL
)
2872 write_enn (own_buf
);
2873 freeargv (new_argv
);
2877 new_argv
[0] = strdup (program_argv
[0]);
2878 if (new_argv
[0] == NULL
)
2880 write_enn (own_buf
);
2881 freeargv (new_argv
);
2886 /* Free the old argv and install the new one. */
2887 freeargv (program_argv
);
2888 program_argv
= new_argv
;
2890 start_inferior (program_argv
);
2891 if (last_status
.kind
== TARGET_WAITKIND_STOPPED
)
2893 prepare_resume_reply (own_buf
, last_ptid
, &last_status
);
2895 /* In non-stop, sending a resume reply doesn't set the general
2896 thread, but GDB assumes a vRun sets it (this is so GDB can
2897 query which is the main thread of the new inferior. */
2899 general_thread
= last_ptid
;
2905 write_enn (own_buf
);
2910 /* Kill process. Return 1 if successful, 0 if failure. */
2912 handle_v_kill (char *own_buf
)
2915 char *p
= &own_buf
[6];
2917 pid
= strtol (p
, NULL
, 16);
2920 if (pid
!= 0 && kill_inferior (pid
) == 0)
2922 last_status
.kind
= TARGET_WAITKIND_SIGNALLED
;
2923 last_status
.value
.sig
= GDB_SIGNAL_KILL
;
2924 last_ptid
= pid_to_ptid (pid
);
2925 discard_queued_stop_replies (last_ptid
);
2931 write_enn (own_buf
);
2936 /* Handle all of the extended 'v' packets. */
2938 handle_v_requests (char *own_buf
, int packet_len
, int *new_packet_len
)
2940 if (!disable_packet_vCont
)
2942 if (strcmp (own_buf
, "vCtrlC") == 0)
2944 (*the_target
->request_interrupt
) ();
2949 if (startswith (own_buf
, "vCont;"))
2951 require_running (own_buf
);
2952 handle_v_cont (own_buf
);
2956 if (startswith (own_buf
, "vCont?"))
2958 strcpy (own_buf
, "vCont;c;C;t");
2960 if (target_supports_hardware_single_step ()
2961 || target_supports_software_single_step ()
2962 || !vCont_supported
)
2964 /* If target supports single step either by hardware or by
2965 software, add actions s and S to the list of supported
2966 actions. On the other hand, if GDB doesn't request the
2967 supported vCont actions in qSupported packet, add s and
2968 S to the list too. */
2969 own_buf
= own_buf
+ strlen (own_buf
);
2970 strcpy (own_buf
, ";s;S");
2973 if (target_supports_range_stepping ())
2975 own_buf
= own_buf
+ strlen (own_buf
);
2976 strcpy (own_buf
, ";r");
2982 if (startswith (own_buf
, "vFile:")
2983 && handle_vFile (own_buf
, packet_len
, new_packet_len
))
2986 if (startswith (own_buf
, "vAttach;"))
2988 if ((!extended_protocol
|| !multi_process
) && target_running ())
2990 fprintf (stderr
, "Already debugging a process\n");
2991 write_enn (own_buf
);
2994 handle_v_attach (own_buf
);
2998 if (startswith (own_buf
, "vRun;"))
3000 if ((!extended_protocol
|| !multi_process
) && target_running ())
3002 fprintf (stderr
, "Already debugging a process\n");
3003 write_enn (own_buf
);
3006 handle_v_run (own_buf
);
3010 if (startswith (own_buf
, "vKill;"))
3012 if (!target_running ())
3014 fprintf (stderr
, "No process to kill\n");
3015 write_enn (own_buf
);
3018 handle_v_kill (own_buf
);
3022 if (handle_notif_ack (own_buf
, packet_len
))
3025 /* Otherwise we didn't know what packet it was. Say we didn't
3031 /* Resume thread and wait for another event. In non-stop mode,
3032 don't really wait here, but return immediatelly to the event
3035 myresume (char *own_buf
, int step
, int sig
)
3037 struct thread_resume resume_info
[2];
3039 int valid_cont_thread
;
3041 valid_cont_thread
= (!ptid_equal (cont_thread
, null_ptid
)
3042 && !ptid_equal (cont_thread
, minus_one_ptid
));
3044 if (step
|| sig
|| valid_cont_thread
)
3046 resume_info
[0].thread
= current_ptid
;
3048 resume_info
[0].kind
= resume_step
;
3050 resume_info
[0].kind
= resume_continue
;
3051 resume_info
[0].sig
= sig
;
3055 if (!valid_cont_thread
)
3057 resume_info
[n
].thread
= minus_one_ptid
;
3058 resume_info
[n
].kind
= resume_continue
;
3059 resume_info
[n
].sig
= 0;
3063 resume (resume_info
, n
);
3066 /* Callback for for_each_inferior. Make a new stop reply for each
3070 queue_stop_reply_callback (struct inferior_list_entry
*entry
, void *arg
)
3072 struct thread_info
*thread
= (struct thread_info
*) entry
;
3074 /* For now, assume targets that don't have this callback also don't
3075 manage the thread's last_status field. */
3076 if (the_target
->thread_stopped
== NULL
)
3078 struct vstop_notif
*new_notif
= XNEW (struct vstop_notif
);
3080 new_notif
->ptid
= entry
->id
;
3081 new_notif
->status
= thread
->last_status
;
3082 /* Pass the last stop reply back to GDB, but don't notify
3084 notif_event_enque (¬if_stop
,
3085 (struct notif_event
*) new_notif
);
3089 if (thread_stopped (thread
))
3094 = target_waitstatus_to_string (&thread
->last_status
);
3096 debug_printf ("Reporting thread %s as already stopped with %s\n",
3097 target_pid_to_str (entry
->id
),
3100 xfree (status_string
);
3103 gdb_assert (thread
->last_status
.kind
!= TARGET_WAITKIND_IGNORE
);
3105 /* Pass the last stop reply back to GDB, but don't notify
3107 queue_stop_reply (entry
->id
, &thread
->last_status
);
3114 /* Set this inferior threads's state as "want-stopped". We won't
3115 resume this thread until the client gives us another action for
3119 gdb_wants_thread_stopped (struct inferior_list_entry
*entry
)
3121 struct thread_info
*thread
= (struct thread_info
*) entry
;
3123 thread
->last_resume_kind
= resume_stop
;
3125 if (thread
->last_status
.kind
== TARGET_WAITKIND_IGNORE
)
3127 /* Most threads are stopped implicitly (all-stop); tag that with
3129 thread
->last_status
.kind
= TARGET_WAITKIND_STOPPED
;
3130 thread
->last_status
.value
.sig
= GDB_SIGNAL_0
;
3134 /* Set all threads' states as "want-stopped". */
3137 gdb_wants_all_threads_stopped (void)
3139 for_each_inferior (&all_threads
, gdb_wants_thread_stopped
);
3142 /* Clear the gdb_detached flag of every process. */
3145 gdb_reattached_process (struct inferior_list_entry
*entry
)
3147 struct process_info
*process
= (struct process_info
*) entry
;
3149 process
->gdb_detached
= 0;
3152 /* Callback for for_each_inferior. Clear the thread's pending status
3156 clear_pending_status_callback (struct inferior_list_entry
*entry
)
3158 struct thread_info
*thread
= (struct thread_info
*) entry
;
3160 thread
->status_pending_p
= 0;
3163 /* Callback for for_each_inferior. If the thread is stopped with an
3164 interesting event, mark it as having a pending event. */
3167 set_pending_status_callback (struct inferior_list_entry
*entry
)
3169 struct thread_info
*thread
= (struct thread_info
*) entry
;
3171 if (thread
->last_status
.kind
!= TARGET_WAITKIND_STOPPED
3172 || (thread
->last_status
.value
.sig
!= GDB_SIGNAL_0
3173 /* A breakpoint, watchpoint or finished step from a previous
3174 GDB run isn't considered interesting for a new GDB run.
3175 If we left those pending, the new GDB could consider them
3176 random SIGTRAPs. This leaves out real async traps. We'd
3177 have to peek into the (target-specific) siginfo to
3178 distinguish those. */
3179 && thread
->last_status
.value
.sig
!= GDB_SIGNAL_TRAP
))
3180 thread
->status_pending_p
= 1;
3183 /* Callback for find_inferior. Return true if ENTRY (a thread) has a
3184 pending status to report to GDB. */
3187 find_status_pending_thread_callback (struct inferior_list_entry
*entry
, void *data
)
3189 struct thread_info
*thread
= (struct thread_info
*) entry
;
3191 return thread
->status_pending_p
;
3194 /* Status handler for the '?' packet. */
3197 handle_status (char *own_buf
)
3199 /* GDB is connected, don't forward events to the target anymore. */
3200 for_each_inferior (&all_processes
, gdb_reattached_process
);
3202 /* In non-stop mode, we must send a stop reply for each stopped
3203 thread. In all-stop mode, just send one for the first stopped
3208 find_inferior (&all_threads
, queue_stop_reply_callback
, NULL
);
3210 /* The first is sent immediatly. OK is sent if there is no
3211 stopped thread, which is the same handling of the vStopped
3212 packet (by design). */
3213 notif_write_event (¬if_stop
, own_buf
);
3217 struct inferior_list_entry
*thread
= NULL
;
3220 stabilize_threads ();
3221 gdb_wants_all_threads_stopped ();
3223 /* We can only report one status, but we might be coming out of
3224 non-stop -- if more than one thread is stopped with
3225 interesting events, leave events for the threads we're not
3226 reporting now pending. They'll be reported the next time the
3227 threads are resumed. Start by marking all interesting events
3229 for_each_inferior (&all_threads
, set_pending_status_callback
);
3231 /* Prefer the last thread that reported an event to GDB (even if
3232 that was a GDB_SIGNAL_TRAP). */
3233 if (last_status
.kind
!= TARGET_WAITKIND_IGNORE
3234 && last_status
.kind
!= TARGET_WAITKIND_EXITED
3235 && last_status
.kind
!= TARGET_WAITKIND_SIGNALLED
)
3236 thread
= find_inferior_id (&all_threads
, last_ptid
);
3238 /* If the last event thread is not found for some reason, look
3239 for some other thread that might have an event to report. */
3241 thread
= find_inferior (&all_threads
,
3242 find_status_pending_thread_callback
, NULL
);
3244 /* If we're still out of luck, simply pick the first thread in
3247 thread
= get_first_inferior (&all_threads
);
3251 struct thread_info
*tp
= (struct thread_info
*) thread
;
3253 /* We're reporting this event, so it's no longer
3255 tp
->status_pending_p
= 0;
3257 /* GDB assumes the current thread is the thread we're
3258 reporting the status for. */
3259 general_thread
= thread
->id
;
3260 set_desired_thread (1);
3262 gdb_assert (tp
->last_status
.kind
!= TARGET_WAITKIND_IGNORE
);
3263 prepare_resume_reply (own_buf
, tp
->entry
.id
, &tp
->last_status
);
3266 strcpy (own_buf
, "W00");
3271 gdbserver_version (void)
3273 printf ("GNU gdbserver %s%s\n"
3274 "Copyright (C) 2016 Free Software Foundation, Inc.\n"
3275 "gdbserver is free software, covered by the "
3276 "GNU General Public License.\n"
3277 "This gdbserver was configured as \"%s\"\n",
3278 PKGVERSION
, version
, host_name
);
3282 gdbserver_usage (FILE *stream
)
3284 fprintf (stream
, "Usage:\tgdbserver [OPTIONS] COMM PROG [ARGS ...]\n"
3285 "\tgdbserver [OPTIONS] --attach COMM PID\n"
3286 "\tgdbserver [OPTIONS] --multi COMM\n"
3288 "COMM may either be a tty device (for serial debugging),\n"
3289 "HOST:PORT to listen for a TCP connection, or '-' or 'stdio' to use \n"
3290 "stdin/stdout of gdbserver.\n"
3291 "PROG is the executable program. ARGS are arguments passed to inferior.\n"
3292 "PID is the process ID to attach to, when --attach is specified.\n"
3294 "Operating modes:\n"
3296 " --attach Attach to running process PID.\n"
3297 " --multi Start server without a specific program, and\n"
3298 " only quit when explicitly commanded.\n"
3299 " --once Exit after the first connection has closed.\n"
3300 " --help Print this message and then exit.\n"
3301 " --version Display version information and exit.\n"
3305 " --wrapper WRAPPER -- Run WRAPPER to start new programs.\n"
3306 " --disable-randomization\n"
3307 " Run PROG with address space randomization disabled.\n"
3308 " --no-disable-randomization\n"
3309 " Don't disable address space randomization when\n"
3314 " --debug Enable general debugging output.\n"
3315 " --debug-format=opt1[,opt2,...]\n"
3316 " Specify extra content in debugging output.\n"
3321 " --remote-debug Enable remote protocol debugging output.\n"
3322 " --disable-packet=opt1[,opt2,...]\n"
3323 " Disable support for RSP packets or features.\n"
3325 " vCont, Tthread, qC, qfThreadInfo and \n"
3326 " threads (disable all threading packets).\n"
3328 "For more information, consult the GDB manual (available as on-line \n"
3329 "info or a printed manual).\n");
3330 if (REPORT_BUGS_TO
[0] && stream
== stdout
)
3331 fprintf (stream
, "Report bugs to \"%s\".\n", REPORT_BUGS_TO
);
3335 gdbserver_show_disableable (FILE *stream
)
3337 fprintf (stream
, "Disableable packets:\n"
3338 " vCont \tAll vCont packets\n"
3339 " qC \tQuerying the current thread\n"
3340 " qfThreadInfo\tThread listing\n"
3341 " Tthread \tPassing the thread specifier in the "
3342 "T stop reply packet\n"
3343 " threads \tAll of the above\n");
3347 #undef require_running
3348 #define require_running(BUF) \
3349 if (!target_running ()) \
3356 first_thread_of (struct inferior_list_entry
*entry
, void *args
)
3358 int pid
= * (int *) args
;
3360 if (ptid_get_pid (entry
->id
) == pid
)
3367 kill_inferior_callback (struct inferior_list_entry
*entry
)
3369 struct process_info
*process
= (struct process_info
*) entry
;
3370 int pid
= ptid_get_pid (process
->entry
.id
);
3372 kill_inferior (pid
);
3373 discard_queued_stop_replies (pid_to_ptid (pid
));
3376 /* Callback for for_each_inferior to detach or kill the inferior,
3377 depending on whether we attached to it or not.
3378 We inform the user whether we're detaching or killing the process
3379 as this is only called when gdbserver is about to exit. */
3382 detach_or_kill_inferior_callback (struct inferior_list_entry
*entry
)
3384 struct process_info
*process
= (struct process_info
*) entry
;
3385 int pid
= ptid_get_pid (process
->entry
.id
);
3387 if (process
->attached
)
3388 detach_inferior (pid
);
3390 kill_inferior (pid
);
3392 discard_queued_stop_replies (pid_to_ptid (pid
));
3395 /* for_each_inferior callback for detach_or_kill_for_exit to print
3396 the pids of started inferiors. */
3399 print_started_pid (struct inferior_list_entry
*entry
)
3401 struct process_info
*process
= (struct process_info
*) entry
;
3403 if (! process
->attached
)
3405 int pid
= ptid_get_pid (process
->entry
.id
);
3406 fprintf (stderr
, " %d", pid
);
3410 /* for_each_inferior callback for detach_or_kill_for_exit to print
3411 the pids of attached inferiors. */
3414 print_attached_pid (struct inferior_list_entry
*entry
)
3416 struct process_info
*process
= (struct process_info
*) entry
;
3418 if (process
->attached
)
3420 int pid
= ptid_get_pid (process
->entry
.id
);
3421 fprintf (stderr
, " %d", pid
);
3425 /* Call this when exiting gdbserver with possible inferiors that need
3426 to be killed or detached from. */
3429 detach_or_kill_for_exit (void)
3431 /* First print a list of the inferiors we will be killing/detaching.
3432 This is to assist the user, for example, in case the inferior unexpectedly
3433 dies after we exit: did we screw up or did the inferior exit on its own?
3434 Having this info will save some head-scratching. */
3436 if (have_started_inferiors_p ())
3438 fprintf (stderr
, "Killing process(es):");
3439 for_each_inferior (&all_processes
, print_started_pid
);
3440 fprintf (stderr
, "\n");
3442 if (have_attached_inferiors_p ())
3444 fprintf (stderr
, "Detaching process(es):");
3445 for_each_inferior (&all_processes
, print_attached_pid
);
3446 fprintf (stderr
, "\n");
3449 /* Now we can kill or detach the inferiors. */
3451 for_each_inferior (&all_processes
, detach_or_kill_inferior_callback
);
3454 /* Value that will be passed to exit(3) when gdbserver exits. */
3455 static int exit_code
;
3457 /* Cleanup version of detach_or_kill_for_exit. */
3460 detach_or_kill_for_exit_cleanup (void *ignore
)
3465 detach_or_kill_for_exit ();
3468 CATCH (exception
, RETURN_MASK_ALL
)
3471 fprintf (stderr
, "Detach or kill failed: %s\n", exception
.message
);
3477 /* Main function. This is called by the real "main" function,
3478 wrapped in a TRY_CATCH that handles any uncaught exceptions. */
3480 static void ATTRIBUTE_NORETURN
3481 captured_main (int argc
, char *argv
[])
3485 char *arg_end
, *port
;
3486 char **next_arg
= &argv
[1];
3487 volatile int multi_mode
= 0;
3488 volatile int attach
= 0;
3491 while (*next_arg
!= NULL
&& **next_arg
== '-')
3493 if (strcmp (*next_arg
, "--version") == 0)
3495 gdbserver_version ();
3498 else if (strcmp (*next_arg
, "--help") == 0)
3500 gdbserver_usage (stdout
);
3503 else if (strcmp (*next_arg
, "--attach") == 0)
3505 else if (strcmp (*next_arg
, "--multi") == 0)
3507 else if (strcmp (*next_arg
, "--wrapper") == 0)
3511 wrapper_argv
= next_arg
;
3512 while (*next_arg
!= NULL
&& strcmp (*next_arg
, "--") != 0)
3515 if (next_arg
== wrapper_argv
|| *next_arg
== NULL
)
3517 gdbserver_usage (stderr
);
3521 /* Consume the "--". */
3524 else if (strcmp (*next_arg
, "--debug") == 0)
3526 else if (startswith (*next_arg
, "--debug-format="))
3529 = parse_debug_format_options ((*next_arg
)
3530 + sizeof ("--debug-format=") - 1, 0);
3532 if (error_msg
!= NULL
)
3534 fprintf (stderr
, "%s", error_msg
);
3538 else if (strcmp (*next_arg
, "--remote-debug") == 0)
3540 else if (strcmp (*next_arg
, "--disable-packet") == 0)
3542 gdbserver_show_disableable (stdout
);
3545 else if (startswith (*next_arg
, "--disable-packet="))
3547 char *packets
, *tok
;
3549 packets
= *next_arg
+= sizeof ("--disable-packet=") - 1;
3550 for (tok
= strtok (packets
, ",");
3552 tok
= strtok (NULL
, ","))
3554 if (strcmp ("vCont", tok
) == 0)
3555 disable_packet_vCont
= 1;
3556 else if (strcmp ("Tthread", tok
) == 0)
3557 disable_packet_Tthread
= 1;
3558 else if (strcmp ("qC", tok
) == 0)
3559 disable_packet_qC
= 1;
3560 else if (strcmp ("qfThreadInfo", tok
) == 0)
3561 disable_packet_qfThreadInfo
= 1;
3562 else if (strcmp ("threads", tok
) == 0)
3564 disable_packet_vCont
= 1;
3565 disable_packet_Tthread
= 1;
3566 disable_packet_qC
= 1;
3567 disable_packet_qfThreadInfo
= 1;
3571 fprintf (stderr
, "Don't know how to disable \"%s\".\n\n",
3573 gdbserver_show_disableable (stderr
);
3578 else if (strcmp (*next_arg
, "-") == 0)
3580 /* "-" specifies a stdio connection and is a form of port
3582 *next_arg
= STDIO_CONNECTION_NAME
;
3585 else if (strcmp (*next_arg
, "--disable-randomization") == 0)
3586 disable_randomization
= 1;
3587 else if (strcmp (*next_arg
, "--no-disable-randomization") == 0)
3588 disable_randomization
= 0;
3589 else if (strcmp (*next_arg
, "--once") == 0)
3593 fprintf (stderr
, "Unknown argument: %s\n", *next_arg
);
3603 if (port
== NULL
|| (!attach
&& !multi_mode
&& *next_arg
== NULL
))
3605 gdbserver_usage (stderr
);
3609 /* Remember stdio descriptors. LISTEN_DESC must not be listed, it will be
3610 opened by remote_prepare. */
3613 save_original_signals_state ();
3615 /* We need to know whether the remote connection is stdio before
3616 starting the inferior. Inferiors created in this scenario have
3617 stdin,stdout redirected. So do this here before we call
3619 remote_prepare (port
);
3624 /* --attach used to come after PORT, so allow it there for
3626 if (*next_arg
!= NULL
&& strcmp (*next_arg
, "--attach") == 0)
3633 && (*next_arg
== NULL
3634 || (*next_arg
)[0] == '\0'
3635 || (pid
= strtoul (*next_arg
, &arg_end
, 0)) == 0
3637 || next_arg
[1] != NULL
))
3642 gdbserver_usage (stderr
);
3646 initialize_async_io ();
3648 initialize_event_loop ();
3649 if (target_supports_tracepoints ())
3650 initialize_tracepoint ();
3651 initialize_notif ();
3653 own_buf
= (char *) xmalloc (PBUFSIZ
+ 1);
3654 mem_buf
= (unsigned char *) xmalloc (PBUFSIZ
);
3656 if (pid
== 0 && *next_arg
!= NULL
)
3660 n
= argc
- (next_arg
- argv
);
3661 program_argv
= XNEWVEC (char *, n
+ 1);
3662 for (i
= 0; i
< n
; i
++)
3663 program_argv
[i
] = xstrdup (next_arg
[i
]);
3664 program_argv
[i
] = NULL
;
3666 /* Wait till we are at first instruction in program. */
3667 start_inferior (program_argv
);
3669 /* We are now (hopefully) stopped at the first instruction of
3670 the target process. This assumes that the target process was
3671 successfully created. */
3675 if (attach_inferior (pid
) == -1)
3676 error ("Attaching not supported on this target");
3678 /* Otherwise succeeded. */
3682 last_status
.kind
= TARGET_WAITKIND_EXITED
;
3683 last_status
.value
.integer
= 0;
3684 last_ptid
= minus_one_ptid
;
3686 make_cleanup (detach_or_kill_for_exit_cleanup
, NULL
);
3688 /* Don't report shared library events on the initial connection,
3689 even if some libraries are preloaded. Avoids the "stopped by
3690 shared library event" notice on gdb side. */
3693 if (last_status
.kind
== TARGET_WAITKIND_EXITED
3694 || last_status
.kind
== TARGET_WAITKIND_SIGNALLED
)
3699 if (!was_running
&& !multi_mode
)
3700 error ("No program to debug");
3707 report_fork_events
= 0;
3708 report_vfork_events
= 0;
3709 report_exec_events
= 0;
3710 /* Be sure we're out of tfind mode. */
3711 current_traceframe
= -1;
3712 cont_thread
= null_ptid
;
3713 swbreak_feature
= 0;
3714 hwbreak_feature
= 0;
3715 vCont_supported
= 0;
3721 /* Wait for events. This will return when all event sources
3722 are removed from the event loop. */
3723 start_event_loop ();
3725 /* If an exit was requested (using the "monitor exit"
3726 command), terminate now. */
3728 throw_quit ("Quit");
3730 /* The only other way to get here is for getpkt to fail:
3732 - If --once was specified, we're done.
3734 - If not in extended-remote mode, and we're no longer
3735 debugging anything, simply exit: GDB has disconnected
3736 after processing the last process exit.
3738 - Otherwise, close the connection and reopen it at the
3740 if (run_once
|| (!extended_protocol
&& !target_running ()))
3741 throw_quit ("Quit");
3744 "Remote side has terminated connection. "
3745 "GDBserver will reopen the connection.\n");
3747 /* Get rid of any pending statuses. An eventual reconnection
3748 (by the same GDB instance or another) will refresh all its
3749 state from scratch. */
3750 discard_queued_stop_replies (minus_one_ptid
);
3751 for_each_inferior (&all_threads
,
3752 clear_pending_status_callback
);
3756 if (disconnected_tracing
)
3758 /* Try to enable non-stop/async mode, so we we can
3759 both wait for an async socket accept, and handle
3760 async target events simultaneously. There's also
3761 no point either in having the target always stop
3762 all threads, when we're going to pass signals
3763 down without informing GDB. */
3766 if (start_non_stop (1))
3769 /* Detaching implicitly resumes all threads;
3770 simply disconnecting does not. */
3776 "Disconnected tracing disabled; "
3777 "stopping trace run.\n");
3782 CATCH (exception
, RETURN_MASK_ERROR
)
3785 fprintf (stderr
, "gdbserver: %s\n", exception
.message
);
3787 if (response_needed
)
3789 write_enn (own_buf
);
3794 throw_quit ("Quit");
3800 /* Main function. */
3803 main (int argc
, char *argv
[])
3808 captured_main (argc
, argv
);
3810 CATCH (exception
, RETURN_MASK_ALL
)
3812 if (exception
.reason
== RETURN_ERROR
)
3815 fprintf (stderr
, "%s\n", exception
.message
);
3816 fprintf (stderr
, "Exiting\n");
3824 gdb_assert_not_reached ("captured_main should never return");
3827 /* Process options coming from Z packets for a breakpoint. PACKET is
3828 the packet buffer. *PACKET is updated to point to the first char
3829 after the last processed option. */
3832 process_point_options (struct gdb_breakpoint
*bp
, char **packet
)
3834 char *dataptr
= *packet
;
3837 /* Check if data has the correct format. */
3838 if (*dataptr
!= ';')
3845 if (*dataptr
== ';')
3848 if (*dataptr
== 'X')
3850 /* Conditional expression. */
3852 debug_printf ("Found breakpoint condition.\n");
3853 if (!add_breakpoint_condition (bp
, &dataptr
))
3854 dataptr
= strchrnul (dataptr
, ';');
3856 else if (startswith (dataptr
, "cmds:"))
3858 dataptr
+= strlen ("cmds:");
3860 debug_printf ("Found breakpoint commands %s.\n", dataptr
);
3861 persist
= (*dataptr
== '1');
3863 if (add_breakpoint_commands (bp
, &dataptr
, persist
))
3864 dataptr
= strchrnul (dataptr
, ';');
3868 fprintf (stderr
, "Unknown token %c, ignoring.\n",
3870 /* Skip tokens until we find one that we recognize. */
3871 dataptr
= strchrnul (dataptr
, ';');
3877 /* Event loop callback that handles a serial event. The first byte in
3878 the serial buffer gets us here. We expect characters to arrive at
3879 a brisk pace, so we read the rest of the packet with a blocking
3883 process_serial_event (void)
3894 int new_packet_len
= -1;
3896 disable_async_io ();
3898 response_needed
= 0;
3899 packet_len
= getpkt (own_buf
);
3900 if (packet_len
<= 0)
3903 /* Force an event loop break. */
3906 response_needed
= 1;
3913 handle_query (own_buf
, packet_len
, &new_packet_len
);
3916 handle_general_set (own_buf
);
3919 require_running (own_buf
);
3924 pid
= strtol (&own_buf
[i
], NULL
, 16);
3927 pid
= ptid_get_pid (current_ptid
);
3929 if ((tracing
&& disconnected_tracing
) || any_persistent_commands ())
3931 struct process_info
*process
= find_process_pid (pid
);
3933 if (process
== NULL
)
3935 write_enn (own_buf
);
3939 if (tracing
&& disconnected_tracing
)
3941 "Disconnected tracing in effect, "
3942 "leaving gdbserver attached to the process\n");
3944 if (any_persistent_commands ())
3946 "Persistent commands are present, "
3947 "leaving gdbserver attached to the process\n");
3949 /* Make sure we're in non-stop/async mode, so we we can both
3950 wait for an async socket accept, and handle async target
3951 events simultaneously. There's also no point either in
3952 having the target stop all threads, when we're going to
3953 pass signals down without informing GDB. */
3957 debug_printf ("Forcing non-stop mode\n");
3963 process
->gdb_detached
= 1;
3965 /* Detaching implicitly resumes all threads. */
3966 target_continue_no_signal (minus_one_ptid
);
3969 break; /* from switch/case */
3972 fprintf (stderr
, "Detaching from process %d\n", pid
);
3974 if (detach_inferior (pid
) != 0)
3975 write_enn (own_buf
);
3978 discard_queued_stop_replies (pid_to_ptid (pid
));
3981 if (extended_protocol
|| target_running ())
3983 /* There is still at least one inferior remaining or
3984 we are in extended mode, so don't terminate gdbserver,
3985 and instead treat this like a normal program exit. */
3986 last_status
.kind
= TARGET_WAITKIND_EXITED
;
3987 last_status
.value
.integer
= 0;
3988 last_ptid
= pid_to_ptid (pid
);
3990 current_thread
= NULL
;
3997 /* If we are attached, then we can exit. Otherwise, we
3998 need to hang around doing nothing, until the child is
4000 join_inferior (pid
);
4006 extended_protocol
= 1;
4010 handle_status (own_buf
);
4013 if (own_buf
[1] == 'c' || own_buf
[1] == 'g' || own_buf
[1] == 's')
4015 ptid_t gdb_id
, thread_id
;
4018 require_running (own_buf
);
4020 gdb_id
= read_ptid (&own_buf
[2], NULL
);
4022 pid
= ptid_get_pid (gdb_id
);
4024 if (ptid_equal (gdb_id
, null_ptid
)
4025 || ptid_equal (gdb_id
, minus_one_ptid
))
4026 thread_id
= null_ptid
;
4028 && ptid_equal (pid_to_ptid (pid
),
4031 struct thread_info
*thread
=
4032 (struct thread_info
*) find_inferior (&all_threads
,
4037 write_enn (own_buf
);
4041 thread_id
= thread
->entry
.id
;
4045 thread_id
= gdb_id_to_thread_id (gdb_id
);
4046 if (ptid_equal (thread_id
, null_ptid
))
4048 write_enn (own_buf
);
4053 if (own_buf
[1] == 'g')
4055 if (ptid_equal (thread_id
, null_ptid
))
4057 /* GDB is telling us to choose any thread. Check if
4058 the currently selected thread is still valid. If
4059 it is not, select the first available. */
4060 struct thread_info
*thread
=
4061 (struct thread_info
*) find_inferior_id (&all_threads
,
4064 thread
= get_first_thread ();
4065 thread_id
= thread
->entry
.id
;
4068 general_thread
= thread_id
;
4069 set_desired_thread (1);
4070 gdb_assert (current_thread
!= NULL
);
4072 else if (own_buf
[1] == 'c')
4073 cont_thread
= thread_id
;
4079 /* Silently ignore it so that gdb can extend the protocol
4080 without compatibility headaches. */
4085 require_running (own_buf
);
4086 if (current_traceframe
>= 0)
4088 struct regcache
*regcache
4089 = new_register_cache (current_target_desc ());
4091 if (fetch_traceframe_registers (current_traceframe
,
4093 registers_to_string (regcache
, own_buf
);
4095 write_enn (own_buf
);
4096 free_register_cache (regcache
);
4100 struct regcache
*regcache
;
4102 if (!set_desired_thread (1))
4103 write_enn (own_buf
);
4106 regcache
= get_thread_regcache (current_thread
, 1);
4107 registers_to_string (regcache
, own_buf
);
4112 require_running (own_buf
);
4113 if (current_traceframe
>= 0)
4114 write_enn (own_buf
);
4117 struct regcache
*regcache
;
4119 if (!set_desired_thread (1))
4120 write_enn (own_buf
);
4123 regcache
= get_thread_regcache (current_thread
, 1);
4124 registers_from_string (regcache
, &own_buf
[1]);
4130 require_running (own_buf
);
4131 decode_m_packet (&own_buf
[1], &mem_addr
, &len
);
4132 res
= gdb_read_memory (mem_addr
, mem_buf
, len
);
4134 write_enn (own_buf
);
4136 bin2hex (mem_buf
, own_buf
, res
);
4139 require_running (own_buf
);
4140 decode_M_packet (&own_buf
[1], &mem_addr
, &len
, &mem_buf
);
4141 if (gdb_write_memory (mem_addr
, mem_buf
, len
) == 0)
4144 write_enn (own_buf
);
4147 require_running (own_buf
);
4148 if (decode_X_packet (&own_buf
[1], packet_len
- 1,
4149 &mem_addr
, &len
, &mem_buf
) < 0
4150 || gdb_write_memory (mem_addr
, mem_buf
, len
) != 0)
4151 write_enn (own_buf
);
4156 require_running (own_buf
);
4157 hex2bin (own_buf
+ 1, &sig
, 1);
4158 if (gdb_signal_to_host_p ((enum gdb_signal
) sig
))
4159 signal
= gdb_signal_to_host ((enum gdb_signal
) sig
);
4162 myresume (own_buf
, 0, signal
);
4165 require_running (own_buf
);
4166 hex2bin (own_buf
+ 1, &sig
, 1);
4167 if (gdb_signal_to_host_p ((enum gdb_signal
) sig
))
4168 signal
= gdb_signal_to_host ((enum gdb_signal
) sig
);
4171 myresume (own_buf
, 1, signal
);
4174 require_running (own_buf
);
4176 myresume (own_buf
, 0, signal
);
4179 require_running (own_buf
);
4181 myresume (own_buf
, 1, signal
);
4183 case 'Z': /* insert_ ... */
4185 case 'z': /* remove_ ... */
4190 char type
= own_buf
[1];
4192 const int insert
= ch
== 'Z';
4193 char *p
= &own_buf
[3];
4195 p
= unpack_varlen_hex (p
, &addr
);
4196 kind
= strtol (p
+ 1, &dataptr
, 16);
4200 struct gdb_breakpoint
*bp
;
4202 bp
= set_gdb_breakpoint (type
, addr
, kind
, &res
);
4207 /* GDB may have sent us a list of *point parameters to
4208 be evaluated on the target's side. Read such list
4209 here. If we already have a list of parameters, GDB
4210 is telling us to drop that list and use this one
4212 clear_breakpoint_conditions_and_commands (bp
);
4213 process_point_options (bp
, &dataptr
);
4217 res
= delete_gdb_breakpoint (type
, addr
, kind
);
4225 write_enn (own_buf
);
4229 response_needed
= 0;
4230 if (!target_running ())
4231 /* The packet we received doesn't make sense - but we can't
4232 reply to it, either. */
4235 fprintf (stderr
, "Killing all inferiors\n");
4236 for_each_inferior (&all_processes
, kill_inferior_callback
);
4238 /* When using the extended protocol, we wait with no program
4239 running. The traditional protocol will exit instead. */
4240 if (extended_protocol
)
4242 last_status
.kind
= TARGET_WAITKIND_EXITED
;
4243 last_status
.value
.sig
= GDB_SIGNAL_KILL
;
4251 ptid_t gdb_id
, thread_id
;
4253 require_running (own_buf
);
4255 gdb_id
= read_ptid (&own_buf
[1], NULL
);
4256 thread_id
= gdb_id_to_thread_id (gdb_id
);
4257 if (ptid_equal (thread_id
, null_ptid
))
4259 write_enn (own_buf
);
4263 if (mythread_alive (thread_id
))
4266 write_enn (own_buf
);
4270 response_needed
= 0;
4272 /* Restarting the inferior is only supported in the extended
4274 if (extended_protocol
)
4276 if (target_running ())
4277 for_each_inferior (&all_processes
,
4278 kill_inferior_callback
);
4279 fprintf (stderr
, "GDBserver restarting\n");
4281 /* Wait till we are at 1st instruction in prog. */
4282 if (program_argv
!= NULL
)
4284 start_inferior (program_argv
);
4285 if (last_status
.kind
== TARGET_WAITKIND_STOPPED
)
4287 /* Stopped at the first instruction of the target
4289 general_thread
= last_ptid
;
4293 /* Something went wrong. */
4294 general_thread
= null_ptid
;
4299 last_status
.kind
= TARGET_WAITKIND_EXITED
;
4300 last_status
.value
.sig
= GDB_SIGNAL_KILL
;
4306 /* It is a request we don't understand. Respond with an
4307 empty packet so that gdb knows that we don't support this
4313 /* Extended (long) request. */
4314 handle_v_requests (own_buf
, packet_len
, &new_packet_len
);
4318 /* It is a request we don't understand. Respond with an empty
4319 packet so that gdb knows that we don't support this
4325 if (new_packet_len
!= -1)
4326 putpkt_binary (own_buf
, new_packet_len
);
4330 response_needed
= 0;
4338 /* Event-loop callback for serial events. */
4341 handle_serial_event (int err
, gdb_client_data client_data
)
4344 debug_printf ("handling possible serial event\n");
4346 /* Really handle it. */
4347 if (process_serial_event () < 0)
4350 /* Be sure to not change the selected thread behind GDB's back.
4351 Important in the non-stop mode asynchronous protocol. */
4352 set_desired_thread (1);
4357 /* Push a stop notification on the notification queue. */
4360 push_stop_notification (ptid_t ptid
, struct target_waitstatus
*status
)
4362 struct vstop_notif
*vstop_notif
= XNEW (struct vstop_notif
);
4364 vstop_notif
->status
= *status
;
4365 vstop_notif
->ptid
= ptid
;
4366 /* Push Stop notification. */
4367 notif_push (¬if_stop
, (struct notif_event
*) vstop_notif
);
4370 /* Event-loop callback for target events. */
4373 handle_target_event (int err
, gdb_client_data client_data
)
4376 debug_printf ("handling possible target event\n");
4378 last_ptid
= mywait (minus_one_ptid
, &last_status
,
4381 if (last_status
.kind
== TARGET_WAITKIND_NO_RESUMED
)
4383 if (gdb_connected () && report_no_resumed
)
4384 push_stop_notification (null_ptid
, &last_status
);
4386 else if (last_status
.kind
!= TARGET_WAITKIND_IGNORE
)
4388 int pid
= ptid_get_pid (last_ptid
);
4389 struct process_info
*process
= find_process_pid (pid
);
4390 int forward_event
= !gdb_connected () || process
->gdb_detached
;
4392 if (last_status
.kind
== TARGET_WAITKIND_EXITED
4393 || last_status
.kind
== TARGET_WAITKIND_SIGNALLED
)
4395 mark_breakpoints_out (process
);
4396 mourn_inferior (process
);
4398 else if (last_status
.kind
== TARGET_WAITKIND_THREAD_EXITED
)
4402 /* We're reporting this thread as stopped. Update its
4403 "want-stopped" state to what the client wants, until it
4404 gets a new resume action. */
4405 current_thread
->last_resume_kind
= resume_stop
;
4406 current_thread
->last_status
= last_status
;
4411 if (!target_running ())
4413 /* The last process exited. We're done. */
4417 if (last_status
.kind
== TARGET_WAITKIND_EXITED
4418 || last_status
.kind
== TARGET_WAITKIND_SIGNALLED
4419 || last_status
.kind
== TARGET_WAITKIND_THREAD_EXITED
)
4423 /* A thread stopped with a signal, but gdb isn't
4424 connected to handle it. Pass it down to the
4425 inferior, as if it wasn't being traced. */
4426 enum gdb_signal signal
;
4429 debug_printf ("GDB not connected; forwarding event %d for"
4431 (int) last_status
.kind
,
4432 target_pid_to_str (last_ptid
));
4434 if (last_status
.kind
== TARGET_WAITKIND_STOPPED
)
4435 signal
= last_status
.value
.sig
;
4437 signal
= GDB_SIGNAL_0
;
4438 target_continue (last_ptid
, signal
);
4442 push_stop_notification (last_ptid
, &last_status
);
4445 /* Be sure to not change the selected thread behind GDB's back.
4446 Important in the non-stop mode asynchronous protocol. */
4447 set_desired_thread (1);