4 * Copyright (c) 2003-2005 Fabrice Bellard
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
11 * This library 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 GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
19 #include "qemu/osdep.h"
20 #include "qapi/error.h"
21 #include "qemu/error-report.h"
22 #include "qemu/cutils.h"
23 #include "trace-root.h"
24 #ifdef CONFIG_USER_ONLY
27 #include "monitor/monitor.h"
28 #include "chardev/char.h"
29 #include "chardev/char-fe.h"
30 #include "sysemu/sysemu.h"
31 #include "exec/gdbstub.h"
32 #include "hw/cpu/cluster.h"
35 #define MAX_PACKET_LENGTH 4096
37 #include "qemu/sockets.h"
38 #include "sysemu/hw_accel.h"
39 #include "sysemu/kvm.h"
40 #include "exec/semihost.h"
41 #include "exec/exec-all.h"
43 #ifdef CONFIG_USER_ONLY
44 #define GDB_ATTACHED "0"
46 #define GDB_ATTACHED "1"
49 static inline int target_memory_rw_debug(CPUState
*cpu
, target_ulong addr
,
50 uint8_t *buf
, int len
, bool is_write
)
52 CPUClass
*cc
= CPU_GET_CLASS(cpu
);
54 if (cc
->memory_rw_debug
) {
55 return cc
->memory_rw_debug(cpu
, addr
, buf
, len
, is_write
);
57 return cpu_memory_rw_debug(cpu
, addr
, buf
, len
, is_write
);
60 /* Return the GDB index for a given vCPU state.
62 * For user mode this is simply the thread id. In system mode GDB
63 * numbers CPUs from 1 as 0 is reserved as an "any cpu" index.
65 static inline int cpu_gdb_index(CPUState
*cpu
)
67 #if defined(CONFIG_USER_ONLY)
68 TaskState
*ts
= (TaskState
*) cpu
->opaque
;
71 return cpu
->cpu_index
+ 1;
84 GDB_SIGNAL_UNKNOWN
= 143
87 #ifdef CONFIG_USER_ONLY
89 /* Map target signal numbers to GDB protocol signal numbers and vice
90 * versa. For user emulation's currently supported systems, we can
91 * assume most signals are defined.
94 static int gdb_signal_table
[] = {
254 /* In system mode we only need SIGINT and SIGTRAP; other signals
255 are not yet supported. */
262 static int gdb_signal_table
[] = {
272 #ifdef CONFIG_USER_ONLY
273 static int target_signal_to_gdb (int sig
)
276 for (i
= 0; i
< ARRAY_SIZE (gdb_signal_table
); i
++)
277 if (gdb_signal_table
[i
] == sig
)
279 return GDB_SIGNAL_UNKNOWN
;
283 static int gdb_signal_to_target (int sig
)
285 if (sig
< ARRAY_SIZE (gdb_signal_table
))
286 return gdb_signal_table
[sig
];
291 typedef struct GDBRegisterState
{
297 struct GDBRegisterState
*next
;
300 typedef struct GDBProcess
{
314 typedef struct GDBState
{
315 CPUState
*c_cpu
; /* current CPU for step/continue ops */
316 CPUState
*g_cpu
; /* current CPU for other ops */
317 CPUState
*query_cpu
; /* for q{f|s}ThreadInfo */
318 enum RSState state
; /* parsing state */
319 char line_buf
[MAX_PACKET_LENGTH
];
321 int line_sum
; /* running checksum */
322 int line_csum
; /* checksum at the end of the packet */
323 uint8_t last_packet
[MAX_PACKET_LENGTH
+ 4];
326 #ifdef CONFIG_USER_ONLY
334 GDBProcess
*processes
;
336 char syscall_buf
[256];
337 gdb_syscall_complete_cb current_syscall_cb
;
340 /* By default use no IRQs and no timers while single stepping so as to
341 * make single stepping like an ICE HW step.
343 static int sstep_flags
= SSTEP_ENABLE
|SSTEP_NOIRQ
|SSTEP_NOTIMER
;
345 static GDBState
*gdbserver_state
;
349 #ifdef CONFIG_USER_ONLY
350 /* XXX: This is not thread safe. Do we care? */
351 static int gdbserver_fd
= -1;
353 static int get_char(GDBState
*s
)
359 ret
= qemu_recv(s
->fd
, &ch
, 1, 0);
361 if (errno
== ECONNRESET
)
365 } else if (ret
== 0) {
383 /* Decide if either remote gdb syscalls or native file IO should be used. */
384 int use_gdb_syscalls(void)
386 SemihostingTarget target
= semihosting_get_target();
387 if (target
== SEMIHOSTING_TARGET_NATIVE
) {
388 /* -semihosting-config target=native */
390 } else if (target
== SEMIHOSTING_TARGET_GDB
) {
391 /* -semihosting-config target=gdb */
395 /* -semihosting-config target=auto */
396 /* On the first call check if gdb is connected and remember. */
397 if (gdb_syscall_mode
== GDB_SYS_UNKNOWN
) {
398 gdb_syscall_mode
= (gdbserver_state
? GDB_SYS_ENABLED
401 return gdb_syscall_mode
== GDB_SYS_ENABLED
;
404 /* Resume execution. */
405 static inline void gdb_continue(GDBState
*s
)
408 #ifdef CONFIG_USER_ONLY
409 s
->running_state
= 1;
410 trace_gdbstub_op_continue();
412 if (!runstate_needs_reset()) {
413 trace_gdbstub_op_continue();
420 * Resume execution, per CPU actions. For user-mode emulation it's
421 * equivalent to gdb_continue.
423 static int gdb_continue_partial(GDBState
*s
, char *newstates
)
427 #ifdef CONFIG_USER_ONLY
429 * This is not exactly accurate, but it's an improvement compared to the
430 * previous situation, where only one CPU would be single-stepped.
433 if (newstates
[cpu
->cpu_index
] == 's') {
434 trace_gdbstub_op_stepping(cpu
->cpu_index
);
435 cpu_single_step(cpu
, sstep_flags
);
438 s
->running_state
= 1;
442 if (!runstate_needs_reset()) {
443 if (vm_prepare_start()) {
448 switch (newstates
[cpu
->cpu_index
]) {
451 break; /* nothing to do here */
453 trace_gdbstub_op_stepping(cpu
->cpu_index
);
454 cpu_single_step(cpu
, sstep_flags
);
459 trace_gdbstub_op_continue_cpu(cpu
->cpu_index
);
470 qemu_clock_enable(QEMU_CLOCK_VIRTUAL
, true);
476 static void put_buffer(GDBState
*s
, const uint8_t *buf
, int len
)
478 #ifdef CONFIG_USER_ONLY
482 ret
= send(s
->fd
, buf
, len
, 0);
492 /* XXX this blocks entire thread. Rewrite to use
493 * qemu_chr_fe_write and background I/O callbacks */
494 qemu_chr_fe_write_all(&s
->chr
, buf
, len
);
498 static inline int fromhex(int v
)
500 if (v
>= '0' && v
<= '9')
502 else if (v
>= 'A' && v
<= 'F')
504 else if (v
>= 'a' && v
<= 'f')
510 static inline int tohex(int v
)
518 /* writes 2*len+1 bytes in buf */
519 static void memtohex(char *buf
, const uint8_t *mem
, int len
)
524 for(i
= 0; i
< len
; i
++) {
526 *q
++ = tohex(c
>> 4);
527 *q
++ = tohex(c
& 0xf);
532 static void hextomem(uint8_t *mem
, const char *buf
, int len
)
536 for(i
= 0; i
< len
; i
++) {
537 mem
[i
] = (fromhex(buf
[0]) << 4) | fromhex(buf
[1]);
542 static void hexdump(const char *buf
, int len
,
543 void (*trace_fn
)(size_t ofs
, char const *text
))
545 char line_buffer
[3 * 16 + 4 + 16 + 1];
548 for (i
= 0; i
< len
|| (i
& 0xF); ++i
) {
549 size_t byte_ofs
= i
& 15;
552 memset(line_buffer
, ' ', 3 * 16 + 4 + 16);
553 line_buffer
[3 * 16 + 4 + 16] = 0;
556 size_t col_group
= (i
>> 2) & 3;
557 size_t hex_col
= byte_ofs
* 3 + col_group
;
558 size_t txt_col
= 3 * 16 + 4 + byte_ofs
;
563 line_buffer
[hex_col
+ 0] = tohex((value
>> 4) & 0xF);
564 line_buffer
[hex_col
+ 1] = tohex((value
>> 0) & 0xF);
565 line_buffer
[txt_col
+ 0] = (value
>= ' ' && value
< 127)
571 trace_fn(i
& -16, line_buffer
);
575 /* return -1 if error, 0 if OK */
576 static int put_packet_binary(GDBState
*s
, const char *buf
, int len
, bool dump
)
581 if (dump
&& trace_event_get_state_backends(TRACE_GDBSTUB_IO_BINARYREPLY
)) {
582 hexdump(buf
, len
, trace_gdbstub_io_binaryreply
);
591 for(i
= 0; i
< len
; i
++) {
595 *(p
++) = tohex((csum
>> 4) & 0xf);
596 *(p
++) = tohex((csum
) & 0xf);
598 s
->last_packet_len
= p
- s
->last_packet
;
599 put_buffer(s
, (uint8_t *)s
->last_packet
, s
->last_packet_len
);
601 #ifdef CONFIG_USER_ONLY
614 /* return -1 if error, 0 if OK */
615 static int put_packet(GDBState
*s
, const char *buf
)
617 trace_gdbstub_io_reply(buf
);
619 return put_packet_binary(s
, buf
, strlen(buf
), false);
622 /* Encode data using the encoding for 'x' packets. */
623 static int memtox(char *buf
, const char *mem
, int len
)
631 case '#': case '$': case '*': case '}':
643 static uint32_t gdb_get_cpu_pid(const GDBState
*s
, CPUState
*cpu
)
645 #ifndef CONFIG_USER_ONLY
646 gchar
*path
, *name
= NULL
;
648 CPUClusterState
*cluster
;
651 path
= object_get_canonical_path(OBJECT(cpu
));
654 /* Return the default process' PID */
655 ret
= s
->processes
[s
->process_num
- 1].pid
;
659 name
= object_get_canonical_path_component(OBJECT(cpu
));
660 assert(name
!= NULL
);
663 * Retrieve the CPU parent path by removing the last '/' and the CPU name
664 * from the CPU canonical path.
666 path
[strlen(path
) - strlen(name
) - 1] = '\0';
668 obj
= object_resolve_path_type(path
, TYPE_CPU_CLUSTER
, NULL
);
671 /* Return the default process' PID */
672 ret
= s
->processes
[s
->process_num
- 1].pid
;
676 cluster
= CPU_CLUSTER(obj
);
677 ret
= cluster
->cluster_id
+ 1;
686 /* TODO: In user mode, we should use the task state PID */
687 return s
->processes
[s
->process_num
- 1].pid
;
691 static const char *get_feature_xml(const char *p
, const char **newp
,
697 static char target_xml
[1024];
700 while (p
[len
] && p
[len
] != ':')
705 if (strncmp(p
, "target.xml", len
) == 0) {
706 /* Generate the XML description for this CPU. */
707 if (!target_xml
[0]) {
709 CPUState
*cpu
= first_cpu
;
711 pstrcat(target_xml
, sizeof(target_xml
),
712 "<?xml version=\"1.0\"?>"
713 "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">"
715 if (cc
->gdb_arch_name
) {
716 gchar
*arch
= cc
->gdb_arch_name(cpu
);
717 pstrcat(target_xml
, sizeof(target_xml
), "<architecture>");
718 pstrcat(target_xml
, sizeof(target_xml
), arch
);
719 pstrcat(target_xml
, sizeof(target_xml
), "</architecture>");
722 pstrcat(target_xml
, sizeof(target_xml
), "<xi:include href=\"");
723 pstrcat(target_xml
, sizeof(target_xml
), cc
->gdb_core_xml_file
);
724 pstrcat(target_xml
, sizeof(target_xml
), "\"/>");
725 for (r
= cpu
->gdb_regs
; r
; r
= r
->next
) {
726 pstrcat(target_xml
, sizeof(target_xml
), "<xi:include href=\"");
727 pstrcat(target_xml
, sizeof(target_xml
), r
->xml
);
728 pstrcat(target_xml
, sizeof(target_xml
), "\"/>");
730 pstrcat(target_xml
, sizeof(target_xml
), "</target>");
734 if (cc
->gdb_get_dynamic_xml
) {
735 CPUState
*cpu
= first_cpu
;
736 char *xmlname
= g_strndup(p
, len
);
737 const char *xml
= cc
->gdb_get_dynamic_xml(cpu
, xmlname
);
745 name
= xml_builtin
[i
][0];
746 if (!name
|| (strncmp(name
, p
, len
) == 0 && strlen(name
) == len
))
749 return name
? xml_builtin
[i
][1] : NULL
;
752 static int gdb_read_register(CPUState
*cpu
, uint8_t *mem_buf
, int reg
)
754 CPUClass
*cc
= CPU_GET_CLASS(cpu
);
755 CPUArchState
*env
= cpu
->env_ptr
;
758 if (reg
< cc
->gdb_num_core_regs
) {
759 return cc
->gdb_read_register(cpu
, mem_buf
, reg
);
762 for (r
= cpu
->gdb_regs
; r
; r
= r
->next
) {
763 if (r
->base_reg
<= reg
&& reg
< r
->base_reg
+ r
->num_regs
) {
764 return r
->get_reg(env
, mem_buf
, reg
- r
->base_reg
);
770 static int gdb_write_register(CPUState
*cpu
, uint8_t *mem_buf
, int reg
)
772 CPUClass
*cc
= CPU_GET_CLASS(cpu
);
773 CPUArchState
*env
= cpu
->env_ptr
;
776 if (reg
< cc
->gdb_num_core_regs
) {
777 return cc
->gdb_write_register(cpu
, mem_buf
, reg
);
780 for (r
= cpu
->gdb_regs
; r
; r
= r
->next
) {
781 if (r
->base_reg
<= reg
&& reg
< r
->base_reg
+ r
->num_regs
) {
782 return r
->set_reg(env
, mem_buf
, reg
- r
->base_reg
);
788 /* Register a supplemental set of CPU registers. If g_pos is nonzero it
789 specifies the first register number and these registers are included in
790 a standard "g" packet. Direction is relative to gdb, i.e. get_reg is
791 gdb reading a CPU register, and set_reg is gdb modifying a CPU register.
794 void gdb_register_coprocessor(CPUState
*cpu
,
795 gdb_reg_cb get_reg
, gdb_reg_cb set_reg
,
796 int num_regs
, const char *xml
, int g_pos
)
799 GDBRegisterState
**p
;
803 /* Check for duplicates. */
804 if (strcmp((*p
)->xml
, xml
) == 0)
809 s
= g_new0(GDBRegisterState
, 1);
810 s
->base_reg
= cpu
->gdb_num_regs
;
811 s
->num_regs
= num_regs
;
812 s
->get_reg
= get_reg
;
813 s
->set_reg
= set_reg
;
816 /* Add to end of list. */
817 cpu
->gdb_num_regs
+= num_regs
;
820 if (g_pos
!= s
->base_reg
) {
821 error_report("Error: Bad gdb register numbering for '%s', "
822 "expected %d got %d", xml
, g_pos
, s
->base_reg
);
824 cpu
->gdb_num_g_regs
= cpu
->gdb_num_regs
;
829 #ifndef CONFIG_USER_ONLY
830 /* Translate GDB watchpoint type to a flags value for cpu_watchpoint_* */
831 static inline int xlat_gdb_type(CPUState
*cpu
, int gdbtype
)
833 static const int xlat
[] = {
834 [GDB_WATCHPOINT_WRITE
] = BP_GDB
| BP_MEM_WRITE
,
835 [GDB_WATCHPOINT_READ
] = BP_GDB
| BP_MEM_READ
,
836 [GDB_WATCHPOINT_ACCESS
] = BP_GDB
| BP_MEM_ACCESS
,
839 CPUClass
*cc
= CPU_GET_CLASS(cpu
);
840 int cputype
= xlat
[gdbtype
];
842 if (cc
->gdb_stop_before_watchpoint
) {
843 cputype
|= BP_STOP_BEFORE_ACCESS
;
849 static int gdb_breakpoint_insert(target_ulong addr
, target_ulong len
, int type
)
855 return kvm_insert_breakpoint(gdbserver_state
->c_cpu
, addr
, len
, type
);
859 case GDB_BREAKPOINT_SW
:
860 case GDB_BREAKPOINT_HW
:
862 err
= cpu_breakpoint_insert(cpu
, addr
, BP_GDB
, NULL
);
868 #ifndef CONFIG_USER_ONLY
869 case GDB_WATCHPOINT_WRITE
:
870 case GDB_WATCHPOINT_READ
:
871 case GDB_WATCHPOINT_ACCESS
:
873 err
= cpu_watchpoint_insert(cpu
, addr
, len
,
874 xlat_gdb_type(cpu
, type
), NULL
);
886 static int gdb_breakpoint_remove(target_ulong addr
, target_ulong len
, int type
)
892 return kvm_remove_breakpoint(gdbserver_state
->c_cpu
, addr
, len
, type
);
896 case GDB_BREAKPOINT_SW
:
897 case GDB_BREAKPOINT_HW
:
899 err
= cpu_breakpoint_remove(cpu
, addr
, BP_GDB
);
905 #ifndef CONFIG_USER_ONLY
906 case GDB_WATCHPOINT_WRITE
:
907 case GDB_WATCHPOINT_READ
:
908 case GDB_WATCHPOINT_ACCESS
:
910 err
= cpu_watchpoint_remove(cpu
, addr
, len
,
911 xlat_gdb_type(cpu
, type
));
922 static void gdb_breakpoint_remove_all(void)
927 kvm_remove_all_breakpoints(gdbserver_state
->c_cpu
);
932 cpu_breakpoint_remove_all(cpu
, BP_GDB
);
933 #ifndef CONFIG_USER_ONLY
934 cpu_watchpoint_remove_all(cpu
, BP_GDB
);
939 static void gdb_set_cpu_pc(GDBState
*s
, target_ulong pc
)
941 CPUState
*cpu
= s
->c_cpu
;
943 cpu_synchronize_state(cpu
);
947 static CPUState
*find_cpu(uint32_t thread_id
)
952 if (cpu_gdb_index(cpu
) == thread_id
) {
960 static char *gdb_fmt_thread_id(const GDBState
*s
, CPUState
*cpu
,
961 char *buf
, size_t buf_size
)
963 if (s
->multiprocess
) {
964 snprintf(buf
, buf_size
, "p%02x.%02x",
965 gdb_get_cpu_pid(s
, cpu
), cpu_gdb_index(cpu
));
967 snprintf(buf
, buf_size
, "%02x", cpu_gdb_index(cpu
));
973 static int is_query_packet(const char *p
, const char *query
, char separator
)
975 unsigned int query_len
= strlen(query
);
977 return strncmp(p
, query
, query_len
) == 0 &&
978 (p
[query_len
] == '\0' || p
[query_len
] == separator
);
982 * gdb_handle_vcont - Parses and handles a vCont packet.
983 * returns -ENOTSUP if a command is unsupported, -EINVAL or -ERANGE if there is
984 * a format error, 0 on success.
986 static int gdb_handle_vcont(GDBState
*s
, const char *p
)
988 int res
, idx
, signal
= 0;
993 #ifdef CONFIG_USER_ONLY
994 int max_cpus
= 1; /* global variable max_cpus exists only in system mode */
997 max_cpus
= max_cpus
<= cpu
->cpu_index
? cpu
->cpu_index
+ 1 : max_cpus
;
1000 /* uninitialised CPUs stay 0 */
1001 newstates
= g_new0(char, max_cpus
);
1003 /* mark valid CPUs with 1 */
1005 newstates
[cpu
->cpu_index
] = 1;
1009 * res keeps track of what error we are returning, with -ENOTSUP meaning
1010 * that the command is unknown or unsupported, thus returning an empty
1011 * packet, while -EINVAL and -ERANGE cause an E22 packet, due to invalid,
1012 * or incorrect parameters passed.
1022 if (cur_action
== 'C' || cur_action
== 'S') {
1023 cur_action
= qemu_tolower(cur_action
);
1024 res
= qemu_strtoul(p
+ 1, &p
, 16, &tmp
);
1028 signal
= gdb_signal_to_target(tmp
);
1029 } else if (cur_action
!= 'c' && cur_action
!= 's') {
1030 /* unknown/invalid/unsupported command */
1034 /* thread specification. special values: (none), -1 = all; 0 = any */
1035 if ((p
[0] == ':' && p
[1] == '-' && p
[2] == '1') || (p
[0] != ':')) {
1039 for (idx
= 0; idx
< max_cpus
; idx
++) {
1040 if (newstates
[idx
] == 1) {
1041 newstates
[idx
] = cur_action
;
1044 } else if (*p
== ':') {
1046 res
= qemu_strtoul(p
, &p
, 16, &tmp
);
1051 /* 0 means any thread, so we pick the first valid CPU */
1052 cpu
= tmp
? find_cpu(tmp
) : first_cpu
;
1054 /* invalid CPU/thread specified */
1060 /* only use if no previous match occourred */
1061 if (newstates
[cpu
->cpu_index
] == 1) {
1062 newstates
[cpu
->cpu_index
] = cur_action
;
1067 gdb_continue_partial(s
, newstates
);
1075 static int gdb_handle_packet(GDBState
*s
, const char *line_buf
)
1081 int ch
, reg_size
, type
, res
;
1082 uint8_t mem_buf
[MAX_PACKET_LENGTH
];
1083 char buf
[sizeof(mem_buf
) + 1 /* trailing NUL */];
1086 target_ulong addr
, len
;
1088 trace_gdbstub_io_command(line_buf
);
1094 /* TODO: Make this return the correct value for user-mode. */
1095 snprintf(buf
, sizeof(buf
), "T%02xthread:%s;", GDB_SIGNAL_TRAP
,
1096 gdb_fmt_thread_id(s
, s
->c_cpu
, thread_id
, sizeof(thread_id
)));
1098 /* Remove all the breakpoints when this query is issued,
1099 * because gdb is doing and initial connect and the state
1100 * should be cleaned up.
1102 gdb_breakpoint_remove_all();
1106 addr
= strtoull(p
, (char **)&p
, 16);
1107 gdb_set_cpu_pc(s
, addr
);
1113 s
->signal
= gdb_signal_to_target (strtoul(p
, (char **)&p
, 16));
1114 if (s
->signal
== -1)
1119 if (strncmp(p
, "Cont", 4) == 0) {
1122 put_packet(s
, "vCont;c;C;s;S");
1126 res
= gdb_handle_vcont(s
, p
);
1129 if ((res
== -EINVAL
) || (res
== -ERANGE
)) {
1130 put_packet(s
, "E22");
1133 goto unknown_command
;
1137 goto unknown_command
;
1140 /* Kill the target */
1141 error_report("QEMU: Terminated via GDBstub");
1145 gdb_breakpoint_remove_all();
1146 gdb_syscall_mode
= GDB_SYS_DISABLED
;
1148 put_packet(s
, "OK");
1152 addr
= strtoull(p
, (char **)&p
, 16);
1153 gdb_set_cpu_pc(s
, addr
);
1155 cpu_single_step(s
->c_cpu
, sstep_flags
);
1163 ret
= strtoull(p
, (char **)&p
, 16);
1166 err
= strtoull(p
, (char **)&p
, 16);
1173 if (s
->current_syscall_cb
) {
1174 s
->current_syscall_cb(s
->c_cpu
, ret
, err
);
1175 s
->current_syscall_cb
= NULL
;
1178 put_packet(s
, "T02");
1185 cpu_synchronize_state(s
->g_cpu
);
1187 for (addr
= 0; addr
< s
->g_cpu
->gdb_num_g_regs
; addr
++) {
1188 reg_size
= gdb_read_register(s
->g_cpu
, mem_buf
+ len
, addr
);
1191 memtohex(buf
, mem_buf
, len
);
1195 cpu_synchronize_state(s
->g_cpu
);
1196 registers
= mem_buf
;
1197 len
= strlen(p
) / 2;
1198 hextomem((uint8_t *)registers
, p
, len
);
1199 for (addr
= 0; addr
< s
->g_cpu
->gdb_num_g_regs
&& len
> 0; addr
++) {
1200 reg_size
= gdb_write_register(s
->g_cpu
, registers
, addr
);
1202 registers
+= reg_size
;
1204 put_packet(s
, "OK");
1207 addr
= strtoull(p
, (char **)&p
, 16);
1210 len
= strtoull(p
, NULL
, 16);
1212 /* memtohex() doubles the required space */
1213 if (len
> MAX_PACKET_LENGTH
/ 2) {
1214 put_packet (s
, "E22");
1218 if (target_memory_rw_debug(s
->g_cpu
, addr
, mem_buf
, len
, false) != 0) {
1219 put_packet (s
, "E14");
1221 memtohex(buf
, mem_buf
, len
);
1226 addr
= strtoull(p
, (char **)&p
, 16);
1229 len
= strtoull(p
, (char **)&p
, 16);
1233 /* hextomem() reads 2*len bytes */
1234 if (len
> strlen(p
) / 2) {
1235 put_packet (s
, "E22");
1238 hextomem(mem_buf
, p
, len
);
1239 if (target_memory_rw_debug(s
->g_cpu
, addr
, mem_buf
, len
,
1241 put_packet(s
, "E14");
1243 put_packet(s
, "OK");
1247 /* Older gdb are really dumb, and don't use 'g' if 'p' is avaialable.
1248 This works, but can be very slow. Anything new enough to
1249 understand XML also knows how to use this properly. */
1251 goto unknown_command
;
1252 addr
= strtoull(p
, (char **)&p
, 16);
1253 reg_size
= gdb_read_register(s
->g_cpu
, mem_buf
, addr
);
1255 memtohex(buf
, mem_buf
, reg_size
);
1258 put_packet(s
, "E14");
1263 goto unknown_command
;
1264 addr
= strtoull(p
, (char **)&p
, 16);
1267 reg_size
= strlen(p
) / 2;
1268 hextomem(mem_buf
, p
, reg_size
);
1269 gdb_write_register(s
->g_cpu
, mem_buf
, addr
);
1270 put_packet(s
, "OK");
1274 type
= strtoul(p
, (char **)&p
, 16);
1277 addr
= strtoull(p
, (char **)&p
, 16);
1280 len
= strtoull(p
, (char **)&p
, 16);
1282 res
= gdb_breakpoint_insert(addr
, len
, type
);
1284 res
= gdb_breakpoint_remove(addr
, len
, type
);
1286 put_packet(s
, "OK");
1287 else if (res
== -ENOSYS
)
1290 put_packet(s
, "E22");
1294 thread
= strtoull(p
, (char **)&p
, 16);
1295 if (thread
== -1 || thread
== 0) {
1296 put_packet(s
, "OK");
1299 cpu
= find_cpu(thread
);
1301 put_packet(s
, "E22");
1307 put_packet(s
, "OK");
1311 put_packet(s
, "OK");
1314 put_packet(s
, "E22");
1319 thread
= strtoull(p
, (char **)&p
, 16);
1320 cpu
= find_cpu(thread
);
1323 put_packet(s
, "OK");
1325 put_packet(s
, "E22");
1330 /* parse any 'q' packets here */
1331 if (!strcmp(p
,"qemu.sstepbits")) {
1332 /* Query Breakpoint bit definitions */
1333 snprintf(buf
, sizeof(buf
), "ENABLE=%x,NOIRQ=%x,NOTIMER=%x",
1339 } else if (is_query_packet(p
, "qemu.sstep", '=')) {
1340 /* Display or change the sstep_flags */
1343 /* Display current setting */
1344 snprintf(buf
, sizeof(buf
), "0x%x", sstep_flags
);
1349 type
= strtoul(p
, (char **)&p
, 16);
1351 put_packet(s
, "OK");
1353 } else if (strcmp(p
,"C") == 0) {
1354 /* "Current thread" remains vague in the spec, so always return
1355 * the first CPU (gdb returns the first thread). */
1356 put_packet(s
, "QC1");
1358 } else if (strcmp(p
,"fThreadInfo") == 0) {
1359 s
->query_cpu
= first_cpu
;
1360 goto report_cpuinfo
;
1361 } else if (strcmp(p
,"sThreadInfo") == 0) {
1364 snprintf(buf
, sizeof(buf
), "m%x", cpu_gdb_index(s
->query_cpu
));
1366 s
->query_cpu
= CPU_NEXT(s
->query_cpu
);
1370 } else if (strncmp(p
,"ThreadExtraInfo,", 16) == 0) {
1371 thread
= strtoull(p
+16, (char **)&p
, 16);
1372 cpu
= find_cpu(thread
);
1374 cpu_synchronize_state(cpu
);
1375 /* memtohex() doubles the required space */
1376 len
= snprintf((char *)mem_buf
, sizeof(buf
) / 2,
1377 "CPU#%d [%s]", cpu
->cpu_index
,
1378 cpu
->halted
? "halted " : "running");
1379 trace_gdbstub_op_extra_info((char *)mem_buf
);
1380 memtohex(buf
, mem_buf
, len
);
1385 #ifdef CONFIG_USER_ONLY
1386 else if (strcmp(p
, "Offsets") == 0) {
1387 TaskState
*ts
= s
->c_cpu
->opaque
;
1389 snprintf(buf
, sizeof(buf
),
1390 "Text=" TARGET_ABI_FMT_lx
";Data=" TARGET_ABI_FMT_lx
1391 ";Bss=" TARGET_ABI_FMT_lx
,
1392 ts
->info
->code_offset
,
1393 ts
->info
->data_offset
,
1394 ts
->info
->data_offset
);
1398 #else /* !CONFIG_USER_ONLY */
1399 else if (strncmp(p
, "Rcmd,", 5) == 0) {
1400 int len
= strlen(p
+ 5);
1402 if ((len
% 2) != 0) {
1403 put_packet(s
, "E01");
1407 hextomem(mem_buf
, p
+ 5, len
);
1409 qemu_chr_be_write(s
->mon_chr
, mem_buf
, len
);
1410 put_packet(s
, "OK");
1413 #endif /* !CONFIG_USER_ONLY */
1414 if (is_query_packet(p
, "Supported", ':')) {
1415 snprintf(buf
, sizeof(buf
), "PacketSize=%x", MAX_PACKET_LENGTH
);
1416 cc
= CPU_GET_CLASS(first_cpu
);
1417 if (cc
->gdb_core_xml_file
!= NULL
) {
1418 pstrcat(buf
, sizeof(buf
), ";qXfer:features:read+");
1423 if (strncmp(p
, "Xfer:features:read:", 19) == 0) {
1425 target_ulong total_len
;
1427 cc
= CPU_GET_CLASS(first_cpu
);
1428 if (cc
->gdb_core_xml_file
== NULL
) {
1429 goto unknown_command
;
1434 xml
= get_feature_xml(p
, &p
, cc
);
1436 snprintf(buf
, sizeof(buf
), "E00");
1443 addr
= strtoul(p
, (char **)&p
, 16);
1446 len
= strtoul(p
, (char **)&p
, 16);
1448 total_len
= strlen(xml
);
1449 if (addr
> total_len
) {
1450 snprintf(buf
, sizeof(buf
), "E00");
1454 if (len
> (MAX_PACKET_LENGTH
- 5) / 2)
1455 len
= (MAX_PACKET_LENGTH
- 5) / 2;
1456 if (len
< total_len
- addr
) {
1458 len
= memtox(buf
+ 1, xml
+ addr
, len
);
1461 len
= memtox(buf
+ 1, xml
+ addr
, total_len
- addr
);
1463 put_packet_binary(s
, buf
, len
+ 1, true);
1466 if (is_query_packet(p
, "Attached", ':')) {
1467 put_packet(s
, GDB_ATTACHED
);
1470 /* Unrecognised 'q' command. */
1471 goto unknown_command
;
1475 /* put empty packet */
1483 void gdb_set_stop_cpu(CPUState
*cpu
)
1485 gdbserver_state
->c_cpu
= cpu
;
1486 gdbserver_state
->g_cpu
= cpu
;
1489 #ifndef CONFIG_USER_ONLY
1490 static void gdb_vm_state_change(void *opaque
, int running
, RunState state
)
1492 GDBState
*s
= gdbserver_state
;
1493 CPUState
*cpu
= s
->c_cpu
;
1498 if (running
|| s
->state
== RS_INACTIVE
) {
1501 /* Is there a GDB syscall waiting to be sent? */
1502 if (s
->current_syscall_cb
) {
1503 put_packet(s
, s
->syscall_buf
);
1507 case RUN_STATE_DEBUG
:
1508 if (cpu
->watchpoint_hit
) {
1509 switch (cpu
->watchpoint_hit
->flags
& BP_MEM_ACCESS
) {
1520 trace_gdbstub_hit_watchpoint(type
, cpu_gdb_index(cpu
),
1521 (target_ulong
)cpu
->watchpoint_hit
->vaddr
);
1522 snprintf(buf
, sizeof(buf
),
1523 "T%02xthread:%02x;%swatch:" TARGET_FMT_lx
";",
1524 GDB_SIGNAL_TRAP
, cpu_gdb_index(cpu
), type
,
1525 (target_ulong
)cpu
->watchpoint_hit
->vaddr
);
1526 cpu
->watchpoint_hit
= NULL
;
1529 trace_gdbstub_hit_break();
1532 ret
= GDB_SIGNAL_TRAP
;
1534 case RUN_STATE_PAUSED
:
1535 trace_gdbstub_hit_paused();
1536 ret
= GDB_SIGNAL_INT
;
1538 case RUN_STATE_SHUTDOWN
:
1539 trace_gdbstub_hit_shutdown();
1540 ret
= GDB_SIGNAL_QUIT
;
1542 case RUN_STATE_IO_ERROR
:
1543 trace_gdbstub_hit_io_error();
1544 ret
= GDB_SIGNAL_IO
;
1546 case RUN_STATE_WATCHDOG
:
1547 trace_gdbstub_hit_watchdog();
1548 ret
= GDB_SIGNAL_ALRM
;
1550 case RUN_STATE_INTERNAL_ERROR
:
1551 trace_gdbstub_hit_internal_error();
1552 ret
= GDB_SIGNAL_ABRT
;
1554 case RUN_STATE_SAVE_VM
:
1555 case RUN_STATE_RESTORE_VM
:
1557 case RUN_STATE_FINISH_MIGRATE
:
1558 ret
= GDB_SIGNAL_XCPU
;
1561 trace_gdbstub_hit_unknown(state
);
1562 ret
= GDB_SIGNAL_UNKNOWN
;
1565 gdb_set_stop_cpu(cpu
);
1566 snprintf(buf
, sizeof(buf
), "T%02xthread:%02x;", ret
, cpu_gdb_index(cpu
));
1571 /* disable single step if it was enabled */
1572 cpu_single_step(cpu
, 0);
1576 /* Send a gdb syscall request.
1577 This accepts limited printf-style format specifiers, specifically:
1578 %x - target_ulong argument printed in hex.
1579 %lx - 64-bit argument printed in hex.
1580 %s - string pointer (target_ulong) and length (int) pair. */
1581 void gdb_do_syscallv(gdb_syscall_complete_cb cb
, const char *fmt
, va_list va
)
1589 s
= gdbserver_state
;
1592 s
->current_syscall_cb
= cb
;
1593 #ifndef CONFIG_USER_ONLY
1594 vm_stop(RUN_STATE_DEBUG
);
1597 p_end
= &s
->syscall_buf
[sizeof(s
->syscall_buf
)];
1604 addr
= va_arg(va
, target_ulong
);
1605 p
+= snprintf(p
, p_end
- p
, TARGET_FMT_lx
, addr
);
1608 if (*(fmt
++) != 'x')
1610 i64
= va_arg(va
, uint64_t);
1611 p
+= snprintf(p
, p_end
- p
, "%" PRIx64
, i64
);
1614 addr
= va_arg(va
, target_ulong
);
1615 p
+= snprintf(p
, p_end
- p
, TARGET_FMT_lx
"/%x",
1616 addr
, va_arg(va
, int));
1620 error_report("gdbstub: Bad syscall format string '%s'",
1629 #ifdef CONFIG_USER_ONLY
1630 put_packet(s
, s
->syscall_buf
);
1631 /* Return control to gdb for it to process the syscall request.
1632 * Since the protocol requires that gdb hands control back to us
1633 * using a "here are the results" F packet, we don't need to check
1634 * gdb_handlesig's return value (which is the signal to deliver if
1635 * execution was resumed via a continue packet).
1637 gdb_handlesig(s
->c_cpu
, 0);
1639 /* In this case wait to send the syscall packet until notification that
1640 the CPU has stopped. This must be done because if the packet is sent
1641 now the reply from the syscall request could be received while the CPU
1642 is still in the running state, which can cause packets to be dropped
1643 and state transition 'T' packets to be sent while the syscall is still
1645 qemu_cpu_kick(s
->c_cpu
);
1649 void gdb_do_syscall(gdb_syscall_complete_cb cb
, const char *fmt
, ...)
1654 gdb_do_syscallv(cb
, fmt
, va
);
1658 static void gdb_read_byte(GDBState
*s
, int ch
)
1662 #ifndef CONFIG_USER_ONLY
1663 if (s
->last_packet_len
) {
1664 /* Waiting for a response to the last packet. If we see the start
1665 of a new command then abandon the previous response. */
1667 trace_gdbstub_err_got_nack();
1668 put_buffer(s
, (uint8_t *)s
->last_packet
, s
->last_packet_len
);
1669 } else if (ch
== '+') {
1670 trace_gdbstub_io_got_ack();
1672 trace_gdbstub_io_got_unexpected((uint8_t)ch
);
1675 if (ch
== '+' || ch
== '$')
1676 s
->last_packet_len
= 0;
1680 if (runstate_is_running()) {
1681 /* when the CPU is running, we cannot do anything except stop
1682 it when receiving a char */
1683 vm_stop(RUN_STATE_PAUSED
);
1690 /* start of command packet */
1691 s
->line_buf_index
= 0;
1693 s
->state
= RS_GETLINE
;
1695 trace_gdbstub_err_garbage((uint8_t)ch
);
1700 /* start escape sequence */
1701 s
->state
= RS_GETLINE_ESC
;
1703 } else if (ch
== '*') {
1704 /* start run length encoding sequence */
1705 s
->state
= RS_GETLINE_RLE
;
1707 } else if (ch
== '#') {
1708 /* end of command, start of checksum*/
1709 s
->state
= RS_CHKSUM1
;
1710 } else if (s
->line_buf_index
>= sizeof(s
->line_buf
) - 1) {
1711 trace_gdbstub_err_overrun();
1714 /* unescaped command character */
1715 s
->line_buf
[s
->line_buf_index
++] = ch
;
1719 case RS_GETLINE_ESC
:
1721 /* unexpected end of command in escape sequence */
1722 s
->state
= RS_CHKSUM1
;
1723 } else if (s
->line_buf_index
>= sizeof(s
->line_buf
) - 1) {
1724 /* command buffer overrun */
1725 trace_gdbstub_err_overrun();
1728 /* parse escaped character and leave escape state */
1729 s
->line_buf
[s
->line_buf_index
++] = ch
^ 0x20;
1731 s
->state
= RS_GETLINE
;
1734 case RS_GETLINE_RLE
:
1736 /* invalid RLE count encoding */
1737 trace_gdbstub_err_invalid_repeat((uint8_t)ch
);
1738 s
->state
= RS_GETLINE
;
1740 /* decode repeat length */
1741 int repeat
= (unsigned char)ch
- ' ' + 3;
1742 if (s
->line_buf_index
+ repeat
>= sizeof(s
->line_buf
) - 1) {
1743 /* that many repeats would overrun the command buffer */
1744 trace_gdbstub_err_overrun();
1746 } else if (s
->line_buf_index
< 1) {
1747 /* got a repeat but we have nothing to repeat */
1748 trace_gdbstub_err_invalid_rle();
1749 s
->state
= RS_GETLINE
;
1751 /* repeat the last character */
1752 memset(s
->line_buf
+ s
->line_buf_index
,
1753 s
->line_buf
[s
->line_buf_index
- 1], repeat
);
1754 s
->line_buf_index
+= repeat
;
1756 s
->state
= RS_GETLINE
;
1761 /* get high hex digit of checksum */
1762 if (!isxdigit(ch
)) {
1763 trace_gdbstub_err_checksum_invalid((uint8_t)ch
);
1764 s
->state
= RS_GETLINE
;
1767 s
->line_buf
[s
->line_buf_index
] = '\0';
1768 s
->line_csum
= fromhex(ch
) << 4;
1769 s
->state
= RS_CHKSUM2
;
1772 /* get low hex digit of checksum */
1773 if (!isxdigit(ch
)) {
1774 trace_gdbstub_err_checksum_invalid((uint8_t)ch
);
1775 s
->state
= RS_GETLINE
;
1778 s
->line_csum
|= fromhex(ch
);
1780 if (s
->line_csum
!= (s
->line_sum
& 0xff)) {
1781 trace_gdbstub_err_checksum_incorrect(s
->line_sum
, s
->line_csum
);
1782 /* send NAK reply */
1784 put_buffer(s
, &reply
, 1);
1787 /* send ACK reply */
1789 put_buffer(s
, &reply
, 1);
1790 s
->state
= gdb_handle_packet(s
, s
->line_buf
);
1799 /* Tell the remote gdb that the process has exited. */
1800 void gdb_exit(CPUArchState
*env
, int code
)
1805 s
= gdbserver_state
;
1809 #ifdef CONFIG_USER_ONLY
1810 if (gdbserver_fd
< 0 || s
->fd
< 0) {
1815 trace_gdbstub_op_exiting((uint8_t)code
);
1817 snprintf(buf
, sizeof(buf
), "W%02x", (uint8_t)code
);
1820 #ifndef CONFIG_USER_ONLY
1821 qemu_chr_fe_deinit(&s
->chr
, true);
1826 * Create the process that will contain all the "orphan" CPUs (that are not
1827 * part of a CPU cluster). Note that if this process contains no CPUs, it won't
1828 * be attachable and thus will be invisible to the user.
1830 static void create_default_process(GDBState
*s
)
1832 GDBProcess
*process
;
1835 if (s
->process_num
) {
1836 max_pid
= s
->processes
[s
->process_num
- 1].pid
;
1839 s
->processes
= g_renew(GDBProcess
, s
->processes
, ++s
->process_num
);
1840 process
= &s
->processes
[s
->process_num
- 1];
1842 /* We need an available PID slot for this process */
1843 assert(max_pid
< UINT32_MAX
);
1845 process
->pid
= max_pid
+ 1;
1846 process
->attached
= false;
1849 #ifdef CONFIG_USER_ONLY
1851 gdb_handlesig(CPUState
*cpu
, int sig
)
1857 s
= gdbserver_state
;
1858 if (gdbserver_fd
< 0 || s
->fd
< 0) {
1862 /* disable single step if it was enabled */
1863 cpu_single_step(cpu
, 0);
1867 snprintf(buf
, sizeof(buf
), "S%02x", target_signal_to_gdb(sig
));
1870 /* put_packet() might have detected that the peer terminated the
1878 s
->running_state
= 0;
1879 while (s
->running_state
== 0) {
1880 n
= read(s
->fd
, buf
, 256);
1884 for (i
= 0; i
< n
; i
++) {
1885 gdb_read_byte(s
, buf
[i
]);
1888 /* XXX: Connection closed. Should probably wait for another
1889 connection before continuing. */
1902 /* Tell the remote gdb that the process has exited due to SIG. */
1903 void gdb_signalled(CPUArchState
*env
, int sig
)
1908 s
= gdbserver_state
;
1909 if (gdbserver_fd
< 0 || s
->fd
< 0) {
1913 snprintf(buf
, sizeof(buf
), "X%02x", target_signal_to_gdb(sig
));
1917 static bool gdb_accept(void)
1920 struct sockaddr_in sockaddr
;
1925 len
= sizeof(sockaddr
);
1926 fd
= accept(gdbserver_fd
, (struct sockaddr
*)&sockaddr
, &len
);
1927 if (fd
< 0 && errno
!= EINTR
) {
1930 } else if (fd
>= 0) {
1931 qemu_set_cloexec(fd
);
1936 /* set short latency */
1937 if (socket_set_nodelay(fd
)) {
1938 perror("setsockopt");
1943 s
= g_malloc0(sizeof(GDBState
));
1944 s
->c_cpu
= first_cpu
;
1945 s
->g_cpu
= first_cpu
;
1946 create_default_process(s
);
1948 gdb_has_xml
= false;
1950 gdbserver_state
= s
;
1954 static int gdbserver_open(int port
)
1956 struct sockaddr_in sockaddr
;
1959 fd
= socket(PF_INET
, SOCK_STREAM
, 0);
1964 qemu_set_cloexec(fd
);
1966 socket_set_fast_reuse(fd
);
1968 sockaddr
.sin_family
= AF_INET
;
1969 sockaddr
.sin_port
= htons(port
);
1970 sockaddr
.sin_addr
.s_addr
= 0;
1971 ret
= bind(fd
, (struct sockaddr
*)&sockaddr
, sizeof(sockaddr
));
1977 ret
= listen(fd
, 1);
1986 int gdbserver_start(int port
)
1988 gdbserver_fd
= gdbserver_open(port
);
1989 if (gdbserver_fd
< 0)
1991 /* accept connections */
1992 if (!gdb_accept()) {
1993 close(gdbserver_fd
);
2000 /* Disable gdb stub for child processes. */
2001 void gdbserver_fork(CPUState
*cpu
)
2003 GDBState
*s
= gdbserver_state
;
2005 if (gdbserver_fd
< 0 || s
->fd
< 0) {
2010 cpu_breakpoint_remove_all(cpu
, BP_GDB
);
2011 cpu_watchpoint_remove_all(cpu
, BP_GDB
);
2014 static int gdb_chr_can_receive(void *opaque
)
2016 /* We can handle an arbitrarily large amount of data.
2017 Pick the maximum packet size, which is as good as anything. */
2018 return MAX_PACKET_LENGTH
;
2021 static void gdb_chr_receive(void *opaque
, const uint8_t *buf
, int size
)
2025 for (i
= 0; i
< size
; i
++) {
2026 gdb_read_byte(gdbserver_state
, buf
[i
]);
2030 static void gdb_chr_event(void *opaque
, int event
)
2033 case CHR_EVENT_OPENED
:
2034 vm_stop(RUN_STATE_PAUSED
);
2035 gdb_has_xml
= false;
2042 static void gdb_monitor_output(GDBState
*s
, const char *msg
, int len
)
2044 char buf
[MAX_PACKET_LENGTH
];
2047 if (len
> (MAX_PACKET_LENGTH
/2) - 1)
2048 len
= (MAX_PACKET_LENGTH
/2) - 1;
2049 memtohex(buf
+ 1, (uint8_t *)msg
, len
);
2053 static int gdb_monitor_write(Chardev
*chr
, const uint8_t *buf
, int len
)
2055 const char *p
= (const char *)buf
;
2058 max_sz
= (sizeof(gdbserver_state
->last_packet
) - 2) / 2;
2060 if (len
<= max_sz
) {
2061 gdb_monitor_output(gdbserver_state
, p
, len
);
2064 gdb_monitor_output(gdbserver_state
, p
, max_sz
);
2072 static void gdb_sigterm_handler(int signal
)
2074 if (runstate_is_running()) {
2075 vm_stop(RUN_STATE_PAUSED
);
2080 static void gdb_monitor_open(Chardev
*chr
, ChardevBackend
*backend
,
2081 bool *be_opened
, Error
**errp
)
2086 static void char_gdb_class_init(ObjectClass
*oc
, void *data
)
2088 ChardevClass
*cc
= CHARDEV_CLASS(oc
);
2090 cc
->internal
= true;
2091 cc
->open
= gdb_monitor_open
;
2092 cc
->chr_write
= gdb_monitor_write
;
2095 #define TYPE_CHARDEV_GDB "chardev-gdb"
2097 static const TypeInfo char_gdb_type_info
= {
2098 .name
= TYPE_CHARDEV_GDB
,
2099 .parent
= TYPE_CHARDEV
,
2100 .class_init
= char_gdb_class_init
,
2103 static int find_cpu_clusters(Object
*child
, void *opaque
)
2105 if (object_dynamic_cast(child
, TYPE_CPU_CLUSTER
)) {
2106 GDBState
*s
= (GDBState
*) opaque
;
2107 CPUClusterState
*cluster
= CPU_CLUSTER(child
);
2108 GDBProcess
*process
;
2110 s
->processes
= g_renew(GDBProcess
, s
->processes
, ++s
->process_num
);
2112 process
= &s
->processes
[s
->process_num
- 1];
2115 * GDB process IDs -1 and 0 are reserved. To avoid subtle errors at
2116 * runtime, we enforce here that the machine does not use a cluster ID
2117 * that would lead to PID 0.
2119 assert(cluster
->cluster_id
!= UINT32_MAX
);
2120 process
->pid
= cluster
->cluster_id
+ 1;
2121 process
->attached
= false;
2126 return object_child_foreach(child
, find_cpu_clusters
, opaque
);
2129 static int pid_order(const void *a
, const void *b
)
2131 GDBProcess
*pa
= (GDBProcess
*) a
;
2132 GDBProcess
*pb
= (GDBProcess
*) b
;
2134 if (pa
->pid
< pb
->pid
) {
2136 } else if (pa
->pid
> pb
->pid
) {
2143 static void create_processes(GDBState
*s
)
2145 object_child_foreach(object_get_root(), find_cpu_clusters
, s
);
2149 qsort(s
->processes
, s
->process_num
, sizeof(s
->processes
[0]), pid_order
);
2152 create_default_process(s
);
2155 static void cleanup_processes(GDBState
*s
)
2157 g_free(s
->processes
);
2159 s
->processes
= NULL
;
2162 int gdbserver_start(const char *device
)
2164 trace_gdbstub_op_start(device
);
2167 char gdbstub_device_name
[128];
2168 Chardev
*chr
= NULL
;
2172 error_report("gdbstub: meaningless to attach gdb to a "
2173 "machine without any CPU.");
2179 if (strcmp(device
, "none") != 0) {
2180 if (strstart(device
, "tcp:", NULL
)) {
2181 /* enforce required TCP attributes */
2182 snprintf(gdbstub_device_name
, sizeof(gdbstub_device_name
),
2183 "%s,nowait,nodelay,server", device
);
2184 device
= gdbstub_device_name
;
2187 else if (strcmp(device
, "stdio") == 0) {
2188 struct sigaction act
;
2190 memset(&act
, 0, sizeof(act
));
2191 act
.sa_handler
= gdb_sigterm_handler
;
2192 sigaction(SIGINT
, &act
, NULL
);
2196 * FIXME: it's a bit weird to allow using a mux chardev here
2197 * and implicitly setup a monitor. We may want to break this.
2199 chr
= qemu_chr_new_noreplay("gdb", device
, true);
2204 s
= gdbserver_state
;
2206 s
= g_malloc0(sizeof(GDBState
));
2207 gdbserver_state
= s
;
2209 qemu_add_vm_change_state_handler(gdb_vm_state_change
, NULL
);
2211 /* Initialize a monitor terminal for gdb */
2212 mon_chr
= qemu_chardev_new(NULL
, TYPE_CHARDEV_GDB
,
2213 NULL
, &error_abort
);
2214 monitor_init(mon_chr
, 0);
2216 qemu_chr_fe_deinit(&s
->chr
, true);
2217 mon_chr
= s
->mon_chr
;
2218 cleanup_processes(s
);
2219 memset(s
, 0, sizeof(GDBState
));
2220 s
->mon_chr
= mon_chr
;
2222 s
->c_cpu
= first_cpu
;
2223 s
->g_cpu
= first_cpu
;
2225 create_processes(s
);
2228 qemu_chr_fe_init(&s
->chr
, chr
, &error_abort
);
2229 qemu_chr_fe_set_handlers(&s
->chr
, gdb_chr_can_receive
, gdb_chr_receive
,
2230 gdb_chr_event
, NULL
, NULL
, NULL
, true);
2232 s
->state
= chr
? RS_IDLE
: RS_INACTIVE
;
2233 s
->mon_chr
= mon_chr
;
2234 s
->current_syscall_cb
= NULL
;
2239 void gdbserver_cleanup(void)
2241 if (gdbserver_state
) {
2242 put_packet(gdbserver_state
, "W00");
2246 static void register_types(void)
2248 type_register_static(&char_gdb_type_info
);
2251 type_init(register_types
);