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/>.
20 #include "qemu-common.h"
21 #ifdef CONFIG_USER_ONLY
32 #include "monitor/monitor.h"
33 #include "sysemu/char.h"
34 #include "sysemu/sysemu.h"
35 #include "exec/gdbstub.h"
38 #define MAX_PACKET_LENGTH 4096
41 #include "qemu/sockets.h"
42 #include "sysemu/kvm.h"
43 #include "qemu/bitops.h"
45 static inline int target_memory_rw_debug(CPUState
*cpu
, target_ulong addr
,
46 uint8_t *buf
, int len
, bool is_write
)
48 CPUClass
*cc
= CPU_GET_CLASS(cpu
);
50 if (cc
->memory_rw_debug
) {
51 return cc
->memory_rw_debug(cpu
, addr
, buf
, len
, is_write
);
53 return cpu_memory_rw_debug(cpu
, addr
, buf
, len
, is_write
);
65 GDB_SIGNAL_UNKNOWN
= 143
68 #ifdef CONFIG_USER_ONLY
70 /* Map target signal numbers to GDB protocol signal numbers and vice
71 * versa. For user emulation's currently supported systems, we can
72 * assume most signals are defined.
75 static int gdb_signal_table
[] = {
235 /* In system mode we only need SIGINT and SIGTRAP; other signals
236 are not yet supported. */
243 static int gdb_signal_table
[] = {
253 #ifdef CONFIG_USER_ONLY
254 static int target_signal_to_gdb (int sig
)
257 for (i
= 0; i
< ARRAY_SIZE (gdb_signal_table
); i
++)
258 if (gdb_signal_table
[i
] == sig
)
260 return GDB_SIGNAL_UNKNOWN
;
264 static int gdb_signal_to_target (int sig
)
266 if (sig
< ARRAY_SIZE (gdb_signal_table
))
267 return gdb_signal_table
[sig
];
274 typedef struct GDBRegisterState
{
280 struct GDBRegisterState
*next
;
290 typedef struct GDBState
{
291 CPUState
*c_cpu
; /* current CPU for step/continue ops */
292 CPUState
*g_cpu
; /* current CPU for other ops */
293 CPUState
*query_cpu
; /* for q{f|s}ThreadInfo */
294 enum RSState state
; /* parsing state */
295 char line_buf
[MAX_PACKET_LENGTH
];
298 uint8_t last_packet
[MAX_PACKET_LENGTH
+ 4];
301 #ifdef CONFIG_USER_ONLY
305 CharDriverState
*chr
;
306 CharDriverState
*mon_chr
;
308 char syscall_buf
[256];
309 gdb_syscall_complete_cb current_syscall_cb
;
312 /* By default use no IRQs and no timers while single stepping so as to
313 * make single stepping like an ICE HW step.
315 static int sstep_flags
= SSTEP_ENABLE
|SSTEP_NOIRQ
|SSTEP_NOTIMER
;
317 static GDBState
*gdbserver_state
;
319 /* This is an ugly hack to cope with both new and old gdb.
320 If gdb sends qXfer:features:read then assume we're talking to a newish
321 gdb that understands target descriptions. */
322 static int gdb_has_xml
;
324 #ifdef CONFIG_USER_ONLY
325 /* XXX: This is not thread safe. Do we care? */
326 static int gdbserver_fd
= -1;
328 static int get_char(GDBState
*s
)
334 ret
= qemu_recv(s
->fd
, &ch
, 1, 0);
336 if (errno
== ECONNRESET
)
338 if (errno
!= EINTR
&& errno
!= EAGAIN
)
340 } else if (ret
== 0) {
358 /* If gdb is connected when the first semihosting syscall occurs then use
359 remote gdb syscalls. Otherwise use native file IO. */
360 int use_gdb_syscalls(void)
362 if (gdb_syscall_mode
== GDB_SYS_UNKNOWN
) {
363 gdb_syscall_mode
= (gdbserver_state
? GDB_SYS_ENABLED
366 return gdb_syscall_mode
== GDB_SYS_ENABLED
;
369 /* Resume execution. */
370 static inline void gdb_continue(GDBState
*s
)
372 #ifdef CONFIG_USER_ONLY
373 s
->running_state
= 1;
375 if (runstate_check(RUN_STATE_GUEST_PANICKED
)) {
376 runstate_set(RUN_STATE_DEBUG
);
378 if (!runstate_needs_reset()) {
384 static void put_buffer(GDBState
*s
, const uint8_t *buf
, int len
)
386 #ifdef CONFIG_USER_ONLY
390 ret
= send(s
->fd
, buf
, len
, 0);
392 if (errno
!= EINTR
&& errno
!= EAGAIN
)
400 qemu_chr_fe_write(s
->chr
, buf
, len
);
404 static inline int fromhex(int v
)
406 if (v
>= '0' && v
<= '9')
408 else if (v
>= 'A' && v
<= 'F')
410 else if (v
>= 'a' && v
<= 'f')
416 static inline int tohex(int v
)
424 static void memtohex(char *buf
, const uint8_t *mem
, int len
)
429 for(i
= 0; i
< len
; i
++) {
431 *q
++ = tohex(c
>> 4);
432 *q
++ = tohex(c
& 0xf);
437 static void hextomem(uint8_t *mem
, const char *buf
, int len
)
441 for(i
= 0; i
< len
; i
++) {
442 mem
[i
] = (fromhex(buf
[0]) << 4) | fromhex(buf
[1]);
447 /* return -1 if error, 0 if OK */
448 static int put_packet_binary(GDBState
*s
, const char *buf
, int len
)
459 for(i
= 0; i
< len
; i
++) {
463 *(p
++) = tohex((csum
>> 4) & 0xf);
464 *(p
++) = tohex((csum
) & 0xf);
466 s
->last_packet_len
= p
- s
->last_packet
;
467 put_buffer(s
, (uint8_t *)s
->last_packet
, s
->last_packet_len
);
469 #ifdef CONFIG_USER_ONLY
482 /* return -1 if error, 0 if OK */
483 static int put_packet(GDBState
*s
, const char *buf
)
486 printf("reply='%s'\n", buf
);
489 return put_packet_binary(s
, buf
, strlen(buf
));
492 /* The GDB remote protocol transfers values in target byte order. This means
493 we can use the raw memory access routines to access the value buffer.
494 Conveniently, these also handle the case where the buffer is mis-aligned.
496 #define GET_REG8(val) do { \
497 stb_p(mem_buf, val); \
500 #define GET_REG16(val) do { \
501 stw_p(mem_buf, val); \
504 #define GET_REG32(val) do { \
505 stl_p(mem_buf, val); \
508 #define GET_REG64(val) do { \
509 stq_p(mem_buf, val); \
513 #if TARGET_LONG_BITS == 64
514 #define GET_REGL(val) GET_REG64(val)
515 #define ldtul_p(addr) ldq_p(addr)
517 #define GET_REGL(val) GET_REG32(val)
518 #define ldtul_p(addr) ldl_p(addr)
521 #if defined(TARGET_I386)
523 #include "target-i386/gdbstub.c"
525 #elif defined (TARGET_PPC)
527 #if defined (TARGET_PPC64)
528 #define GDB_CORE_XML "power64-core.xml"
530 #define GDB_CORE_XML "power-core.xml"
533 #include "target-ppc/gdbstub.c"
535 #elif defined (TARGET_SPARC)
537 #include "target-sparc/gdbstub.c"
539 #elif defined (TARGET_ARM)
541 #define GDB_CORE_XML "arm-core.xml"
543 #include "target-arm/gdbstub.c"
545 #elif defined (TARGET_M68K)
547 #define GDB_CORE_XML "cf-core.xml"
549 #include "target-m68k/gdbstub.c"
551 #elif defined (TARGET_MIPS)
553 #include "target-mips/gdbstub.c"
555 #elif defined(TARGET_OPENRISC)
557 #include "target-openrisc/gdbstub.c"
559 #elif defined (TARGET_SH4)
561 #include "target-sh4/gdbstub.c"
563 #elif defined (TARGET_MICROBLAZE)
565 #include "target-microblaze/gdbstub.c"
567 #elif defined (TARGET_CRIS)
569 #include "target-cris/gdbstub.c"
571 #elif defined (TARGET_ALPHA)
573 #include "target-alpha/gdbstub.c"
575 #elif defined (TARGET_S390X)
577 #include "target-s390x/gdbstub.c"
579 #elif defined (TARGET_LM32)
581 #include "hw/lm32/lm32_pic.h"
583 static int cpu_gdb_read_register(CPULM32State
*env
, uint8_t *mem_buf
, int n
)
586 GET_REG32(env
->regs
[n
]);
591 /* FIXME: put in right exception ID */
597 GET_REG32(env
->deba
);
601 GET_REG32(lm32_pic_get_im(env
->pic_state
));
603 GET_REG32(lm32_pic_get_ip(env
->pic_state
));
609 static int cpu_gdb_write_register(CPULM32State
*env
, uint8_t *mem_buf
, int n
)
611 LM32CPU
*cpu
= lm32_env_get_cpu(env
);
612 CPUClass
*cc
= CPU_GET_CLASS(cpu
);
615 if (n
> cc
->gdb_num_core_regs
) {
619 tmp
= ldl_p(mem_buf
);
638 lm32_pic_set_im(env
->pic_state
, tmp
);
641 lm32_pic_set_ip(env
->pic_state
, tmp
);
647 #elif defined(TARGET_XTENSA)
649 static int cpu_gdb_read_register(CPUXtensaState
*env
, uint8_t *mem_buf
, int n
)
651 const XtensaGdbReg
*reg
= env
->config
->gdb_regmap
.reg
+ n
;
653 if (n
< 0 || n
>= env
->config
->gdb_regmap
.num_regs
) {
662 xtensa_sync_phys_from_window(env
);
663 GET_REG32(env
->phys_regs
[(reg
->targno
& 0xff) % env
->config
->nareg
]);
666 GET_REG32(env
->sregs
[reg
->targno
& 0xff]);
669 GET_REG32(env
->uregs
[reg
->targno
& 0xff]);
672 GET_REG32(float32_val(env
->fregs
[reg
->targno
& 0x0f]));
675 GET_REG32(env
->regs
[reg
->targno
& 0x0f]);
678 qemu_log("%s from reg %d of unsupported type %d\n",
679 __func__
, n
, reg
->type
);
684 static int cpu_gdb_write_register(CPUXtensaState
*env
, uint8_t *mem_buf
, int n
)
687 const XtensaGdbReg
*reg
= env
->config
->gdb_regmap
.reg
+ n
;
689 if (n
< 0 || n
>= env
->config
->gdb_regmap
.num_regs
) {
693 tmp
= ldl_p(mem_buf
);
701 env
->phys_regs
[(reg
->targno
& 0xff) % env
->config
->nareg
] = tmp
;
702 xtensa_sync_window_from_phys(env
);
706 env
->sregs
[reg
->targno
& 0xff] = tmp
;
710 env
->uregs
[reg
->targno
& 0xff] = tmp
;
714 env
->fregs
[reg
->targno
& 0x0f] = make_float32(tmp
);
718 env
->regs
[reg
->targno
& 0x0f] = tmp
;
722 qemu_log("%s to reg %d of unsupported type %d\n",
723 __func__
, n
, reg
->type
);
731 static int cpu_gdb_read_register(CPUArchState
*env
, uint8_t *mem_buf
, int n
)
736 static int cpu_gdb_write_register(CPUArchState
*env
, uint8_t *mem_buf
, int n
)
744 /* Encode data using the encoding for 'x' packets. */
745 static int memtox(char *buf
, const char *mem
, int len
)
753 case '#': case '$': case '*': case '}':
765 static const char *get_feature_xml(const char *p
, const char **newp
)
770 static char target_xml
[1024];
773 while (p
[len
] && p
[len
] != ':')
778 if (strncmp(p
, "target.xml", len
) == 0) {
779 /* Generate the XML description for this CPU. */
780 if (!target_xml
[0]) {
782 CPUState
*cpu
= first_cpu
;
784 snprintf(target_xml
, sizeof(target_xml
),
785 "<?xml version=\"1.0\"?>"
786 "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">"
788 "<xi:include href=\"%s\"/>",
791 for (r
= cpu
->gdb_regs
; r
; r
= r
->next
) {
792 pstrcat(target_xml
, sizeof(target_xml
), "<xi:include href=\"");
793 pstrcat(target_xml
, sizeof(target_xml
), r
->xml
);
794 pstrcat(target_xml
, sizeof(target_xml
), "\"/>");
796 pstrcat(target_xml
, sizeof(target_xml
), "</target>");
801 name
= xml_builtin
[i
][0];
802 if (!name
|| (strncmp(name
, p
, len
) == 0 && strlen(name
) == len
))
805 return name
? xml_builtin
[i
][1] : NULL
;
809 static int gdb_read_register(CPUState
*cpu
, uint8_t *mem_buf
, int reg
)
811 CPUClass
*cc
= CPU_GET_CLASS(cpu
);
812 CPUArchState
*env
= cpu
->env_ptr
;
815 if (reg
< cc
->gdb_num_core_regs
) {
816 return cpu_gdb_read_register(env
, mem_buf
, reg
);
819 for (r
= cpu
->gdb_regs
; r
; r
= r
->next
) {
820 if (r
->base_reg
<= reg
&& reg
< r
->base_reg
+ r
->num_regs
) {
821 return r
->get_reg(env
, mem_buf
, reg
- r
->base_reg
);
827 static int gdb_write_register(CPUState
*cpu
, uint8_t *mem_buf
, int reg
)
829 CPUClass
*cc
= CPU_GET_CLASS(cpu
);
830 CPUArchState
*env
= cpu
->env_ptr
;
833 if (reg
< cc
->gdb_num_core_regs
) {
834 return cpu_gdb_write_register(env
, mem_buf
, reg
);
837 for (r
= cpu
->gdb_regs
; r
; r
= r
->next
) {
838 if (r
->base_reg
<= reg
&& reg
< r
->base_reg
+ r
->num_regs
) {
839 return r
->set_reg(env
, mem_buf
, reg
- r
->base_reg
);
845 /* Register a supplemental set of CPU registers. If g_pos is nonzero it
846 specifies the first register number and these registers are included in
847 a standard "g" packet. Direction is relative to gdb, i.e. get_reg is
848 gdb reading a CPU register, and set_reg is gdb modifying a CPU register.
851 void gdb_register_coprocessor(CPUState
*cpu
,
852 gdb_reg_cb get_reg
, gdb_reg_cb set_reg
,
853 int num_regs
, const char *xml
, int g_pos
)
856 GDBRegisterState
**p
;
860 /* Check for duplicates. */
861 if (strcmp((*p
)->xml
, xml
) == 0)
866 s
= g_new0(GDBRegisterState
, 1);
867 s
->base_reg
= cpu
->gdb_num_regs
;
868 s
->num_regs
= num_regs
;
869 s
->get_reg
= get_reg
;
870 s
->set_reg
= set_reg
;
873 /* Add to end of list. */
874 cpu
->gdb_num_regs
+= num_regs
;
877 if (g_pos
!= s
->base_reg
) {
878 fprintf(stderr
, "Error: Bad gdb register numbering for '%s'\n"
879 "Expected %d got %d\n", xml
, g_pos
, s
->base_reg
);
884 #ifndef CONFIG_USER_ONLY
885 static const int xlat_gdb_type
[] = {
886 [GDB_WATCHPOINT_WRITE
] = BP_GDB
| BP_MEM_WRITE
,
887 [GDB_WATCHPOINT_READ
] = BP_GDB
| BP_MEM_READ
,
888 [GDB_WATCHPOINT_ACCESS
] = BP_GDB
| BP_MEM_ACCESS
,
892 static int gdb_breakpoint_insert(target_ulong addr
, target_ulong len
, int type
)
899 return kvm_insert_breakpoint(gdbserver_state
->c_cpu
, addr
, len
, type
);
903 case GDB_BREAKPOINT_SW
:
904 case GDB_BREAKPOINT_HW
:
905 for (cpu
= first_cpu
; cpu
!= NULL
; cpu
= cpu
->next_cpu
) {
907 err
= cpu_breakpoint_insert(env
, addr
, BP_GDB
, NULL
);
912 #ifndef CONFIG_USER_ONLY
913 case GDB_WATCHPOINT_WRITE
:
914 case GDB_WATCHPOINT_READ
:
915 case GDB_WATCHPOINT_ACCESS
:
916 for (cpu
= first_cpu
; cpu
!= NULL
; cpu
= cpu
->next_cpu
) {
918 err
= cpu_watchpoint_insert(env
, addr
, len
, xlat_gdb_type
[type
],
930 static int gdb_breakpoint_remove(target_ulong addr
, target_ulong len
, int type
)
937 return kvm_remove_breakpoint(gdbserver_state
->c_cpu
, addr
, len
, type
);
941 case GDB_BREAKPOINT_SW
:
942 case GDB_BREAKPOINT_HW
:
943 for (cpu
= first_cpu
; cpu
!= NULL
; cpu
= cpu
->next_cpu
) {
945 err
= cpu_breakpoint_remove(env
, addr
, BP_GDB
);
950 #ifndef CONFIG_USER_ONLY
951 case GDB_WATCHPOINT_WRITE
:
952 case GDB_WATCHPOINT_READ
:
953 case GDB_WATCHPOINT_ACCESS
:
954 for (cpu
= first_cpu
; cpu
!= NULL
; cpu
= cpu
->next_cpu
) {
956 err
= cpu_watchpoint_remove(env
, addr
, len
, xlat_gdb_type
[type
]);
967 static void gdb_breakpoint_remove_all(void)
973 kvm_remove_all_breakpoints(gdbserver_state
->c_cpu
);
977 for (cpu
= first_cpu
; cpu
!= NULL
; cpu
= cpu
->next_cpu
) {
979 cpu_breakpoint_remove_all(env
, BP_GDB
);
980 #ifndef CONFIG_USER_ONLY
981 cpu_watchpoint_remove_all(env
, BP_GDB
);
986 static void gdb_set_cpu_pc(GDBState
*s
, target_ulong pc
)
988 CPUState
*cpu
= s
->c_cpu
;
989 CPUClass
*cc
= CPU_GET_CLASS(cpu
);
991 cpu_synchronize_state(cpu
);
997 static CPUState
*find_cpu(uint32_t thread_id
)
1001 for (cpu
= first_cpu
; cpu
!= NULL
; cpu
= cpu
->next_cpu
) {
1002 if (cpu_index(cpu
) == thread_id
) {
1010 static int gdb_handle_packet(GDBState
*s
, const char *line_buf
)
1015 int ch
, reg_size
, type
, res
;
1016 char buf
[MAX_PACKET_LENGTH
];
1017 uint8_t mem_buf
[MAX_PACKET_LENGTH
];
1019 target_ulong addr
, len
;
1022 printf("command='%s'\n", line_buf
);
1028 /* TODO: Make this return the correct value for user-mode. */
1029 snprintf(buf
, sizeof(buf
), "T%02xthread:%02x;", GDB_SIGNAL_TRAP
,
1030 cpu_index(s
->c_cpu
));
1032 /* Remove all the breakpoints when this query is issued,
1033 * because gdb is doing and initial connect and the state
1034 * should be cleaned up.
1036 gdb_breakpoint_remove_all();
1040 addr
= strtoull(p
, (char **)&p
, 16);
1041 gdb_set_cpu_pc(s
, addr
);
1047 s
->signal
= gdb_signal_to_target (strtoul(p
, (char **)&p
, 16));
1048 if (s
->signal
== -1)
1053 if (strncmp(p
, "Cont", 4) == 0) {
1054 int res_signal
, res_thread
;
1058 put_packet(s
, "vCont;c;C;s;S");
1073 if (action
== 'C' || action
== 'S') {
1074 signal
= strtoul(p
, (char **)&p
, 16);
1075 } else if (action
!= 'c' && action
!= 's') {
1081 thread
= strtoull(p
+1, (char **)&p
, 16);
1083 action
= tolower(action
);
1084 if (res
== 0 || (res
== 'c' && action
== 's')) {
1086 res_signal
= signal
;
1087 res_thread
= thread
;
1091 if (res_thread
!= -1 && res_thread
!= 0) {
1092 cpu
= find_cpu(res_thread
);
1094 put_packet(s
, "E22");
1100 cpu_single_step(s
->c_cpu
, sstep_flags
);
1102 s
->signal
= res_signal
;
1108 goto unknown_command
;
1111 #ifdef CONFIG_USER_ONLY
1112 /* Kill the target */
1113 fprintf(stderr
, "\nQEMU: Terminated via GDBstub\n");
1118 gdb_breakpoint_remove_all();
1119 gdb_syscall_mode
= GDB_SYS_DISABLED
;
1121 put_packet(s
, "OK");
1125 addr
= strtoull(p
, (char **)&p
, 16);
1126 gdb_set_cpu_pc(s
, addr
);
1128 cpu_single_step(s
->c_cpu
, sstep_flags
);
1136 ret
= strtoull(p
, (char **)&p
, 16);
1139 err
= strtoull(p
, (char **)&p
, 16);
1146 if (s
->current_syscall_cb
) {
1147 s
->current_syscall_cb(s
->c_cpu
, ret
, err
);
1148 s
->current_syscall_cb
= NULL
;
1151 put_packet(s
, "T02");
1158 cpu_synchronize_state(s
->g_cpu
);
1160 for (addr
= 0; addr
< s
->g_cpu
->gdb_num_regs
; addr
++) {
1161 reg_size
= gdb_read_register(s
->g_cpu
, mem_buf
+ len
, addr
);
1164 memtohex(buf
, mem_buf
, len
);
1168 cpu_synchronize_state(s
->g_cpu
);
1169 registers
= mem_buf
;
1170 len
= strlen(p
) / 2;
1171 hextomem((uint8_t *)registers
, p
, len
);
1172 for (addr
= 0; addr
< s
->g_cpu
->gdb_num_regs
&& len
> 0; addr
++) {
1173 reg_size
= gdb_write_register(s
->g_cpu
, registers
, addr
);
1175 registers
+= reg_size
;
1177 put_packet(s
, "OK");
1180 addr
= strtoull(p
, (char **)&p
, 16);
1183 len
= strtoull(p
, NULL
, 16);
1184 if (target_memory_rw_debug(s
->g_cpu
, addr
, mem_buf
, len
, false) != 0) {
1185 put_packet (s
, "E14");
1187 memtohex(buf
, mem_buf
, len
);
1192 addr
= strtoull(p
, (char **)&p
, 16);
1195 len
= strtoull(p
, (char **)&p
, 16);
1198 hextomem(mem_buf
, p
, len
);
1199 if (target_memory_rw_debug(s
->g_cpu
, addr
, mem_buf
, len
,
1201 put_packet(s
, "E14");
1203 put_packet(s
, "OK");
1207 /* Older gdb are really dumb, and don't use 'g' if 'p' is avaialable.
1208 This works, but can be very slow. Anything new enough to
1209 understand XML also knows how to use this properly. */
1211 goto unknown_command
;
1212 addr
= strtoull(p
, (char **)&p
, 16);
1213 reg_size
= gdb_read_register(s
->g_cpu
, mem_buf
, addr
);
1215 memtohex(buf
, mem_buf
, reg_size
);
1218 put_packet(s
, "E14");
1223 goto unknown_command
;
1224 addr
= strtoull(p
, (char **)&p
, 16);
1227 reg_size
= strlen(p
) / 2;
1228 hextomem(mem_buf
, p
, reg_size
);
1229 gdb_write_register(s
->g_cpu
, mem_buf
, addr
);
1230 put_packet(s
, "OK");
1234 type
= strtoul(p
, (char **)&p
, 16);
1237 addr
= strtoull(p
, (char **)&p
, 16);
1240 len
= strtoull(p
, (char **)&p
, 16);
1242 res
= gdb_breakpoint_insert(addr
, len
, type
);
1244 res
= gdb_breakpoint_remove(addr
, len
, type
);
1246 put_packet(s
, "OK");
1247 else if (res
== -ENOSYS
)
1250 put_packet(s
, "E22");
1254 thread
= strtoull(p
, (char **)&p
, 16);
1255 if (thread
== -1 || thread
== 0) {
1256 put_packet(s
, "OK");
1259 cpu
= find_cpu(thread
);
1261 put_packet(s
, "E22");
1267 put_packet(s
, "OK");
1271 put_packet(s
, "OK");
1274 put_packet(s
, "E22");
1279 thread
= strtoull(p
, (char **)&p
, 16);
1280 cpu
= find_cpu(thread
);
1283 put_packet(s
, "OK");
1285 put_packet(s
, "E22");
1290 /* parse any 'q' packets here */
1291 if (!strcmp(p
,"qemu.sstepbits")) {
1292 /* Query Breakpoint bit definitions */
1293 snprintf(buf
, sizeof(buf
), "ENABLE=%x,NOIRQ=%x,NOTIMER=%x",
1299 } else if (strncmp(p
,"qemu.sstep",10) == 0) {
1300 /* Display or change the sstep_flags */
1303 /* Display current setting */
1304 snprintf(buf
, sizeof(buf
), "0x%x", sstep_flags
);
1309 type
= strtoul(p
, (char **)&p
, 16);
1311 put_packet(s
, "OK");
1313 } else if (strcmp(p
,"C") == 0) {
1314 /* "Current thread" remains vague in the spec, so always return
1315 * the first CPU (gdb returns the first thread). */
1316 put_packet(s
, "QC1");
1318 } else if (strcmp(p
,"fThreadInfo") == 0) {
1319 s
->query_cpu
= first_cpu
;
1320 goto report_cpuinfo
;
1321 } else if (strcmp(p
,"sThreadInfo") == 0) {
1324 snprintf(buf
, sizeof(buf
), "m%x", cpu_index(s
->query_cpu
));
1326 s
->query_cpu
= s
->query_cpu
->next_cpu
;
1330 } else if (strncmp(p
,"ThreadExtraInfo,", 16) == 0) {
1331 thread
= strtoull(p
+16, (char **)&p
, 16);
1332 cpu
= find_cpu(thread
);
1334 cpu_synchronize_state(cpu
);
1335 len
= snprintf((char *)mem_buf
, sizeof(mem_buf
),
1336 "CPU#%d [%s]", cpu
->cpu_index
,
1337 cpu
->halted
? "halted " : "running");
1338 memtohex(buf
, mem_buf
, len
);
1343 #ifdef CONFIG_USER_ONLY
1344 else if (strncmp(p
, "Offsets", 7) == 0) {
1345 CPUArchState
*env
= s
->c_cpu
->env_ptr
;
1346 TaskState
*ts
= env
->opaque
;
1348 snprintf(buf
, sizeof(buf
),
1349 "Text=" TARGET_ABI_FMT_lx
";Data=" TARGET_ABI_FMT_lx
1350 ";Bss=" TARGET_ABI_FMT_lx
,
1351 ts
->info
->code_offset
,
1352 ts
->info
->data_offset
,
1353 ts
->info
->data_offset
);
1357 #else /* !CONFIG_USER_ONLY */
1358 else if (strncmp(p
, "Rcmd,", 5) == 0) {
1359 int len
= strlen(p
+ 5);
1361 if ((len
% 2) != 0) {
1362 put_packet(s
, "E01");
1365 hextomem(mem_buf
, p
+ 5, len
);
1368 qemu_chr_be_write(s
->mon_chr
, mem_buf
, len
);
1369 put_packet(s
, "OK");
1372 #endif /* !CONFIG_USER_ONLY */
1373 if (strncmp(p
, "Supported", 9) == 0) {
1374 snprintf(buf
, sizeof(buf
), "PacketSize=%x", MAX_PACKET_LENGTH
);
1376 pstrcat(buf
, sizeof(buf
), ";qXfer:features:read+");
1382 if (strncmp(p
, "Xfer:features:read:", 19) == 0) {
1384 target_ulong total_len
;
1388 xml
= get_feature_xml(p
, &p
);
1390 snprintf(buf
, sizeof(buf
), "E00");
1397 addr
= strtoul(p
, (char **)&p
, 16);
1400 len
= strtoul(p
, (char **)&p
, 16);
1402 total_len
= strlen(xml
);
1403 if (addr
> total_len
) {
1404 snprintf(buf
, sizeof(buf
), "E00");
1408 if (len
> (MAX_PACKET_LENGTH
- 5) / 2)
1409 len
= (MAX_PACKET_LENGTH
- 5) / 2;
1410 if (len
< total_len
- addr
) {
1412 len
= memtox(buf
+ 1, xml
+ addr
, len
);
1415 len
= memtox(buf
+ 1, xml
+ addr
, total_len
- addr
);
1417 put_packet_binary(s
, buf
, len
+ 1);
1421 /* Unrecognised 'q' command. */
1422 goto unknown_command
;
1426 /* put empty packet */
1434 void gdb_set_stop_cpu(CPUState
*cpu
)
1436 gdbserver_state
->c_cpu
= cpu
;
1437 gdbserver_state
->g_cpu
= cpu
;
1440 #ifndef CONFIG_USER_ONLY
1441 static void gdb_vm_state_change(void *opaque
, int running
, RunState state
)
1443 GDBState
*s
= gdbserver_state
;
1444 CPUArchState
*env
= s
->c_cpu
->env_ptr
;
1445 CPUState
*cpu
= s
->c_cpu
;
1450 if (running
|| s
->state
== RS_INACTIVE
) {
1453 /* Is there a GDB syscall waiting to be sent? */
1454 if (s
->current_syscall_cb
) {
1455 put_packet(s
, s
->syscall_buf
);
1459 case RUN_STATE_DEBUG
:
1460 if (env
->watchpoint_hit
) {
1461 switch (env
->watchpoint_hit
->flags
& BP_MEM_ACCESS
) {
1472 snprintf(buf
, sizeof(buf
),
1473 "T%02xthread:%02x;%swatch:" TARGET_FMT_lx
";",
1474 GDB_SIGNAL_TRAP
, cpu_index(cpu
), type
,
1475 env
->watchpoint_hit
->vaddr
);
1476 env
->watchpoint_hit
= NULL
;
1480 ret
= GDB_SIGNAL_TRAP
;
1482 case RUN_STATE_PAUSED
:
1483 ret
= GDB_SIGNAL_INT
;
1485 case RUN_STATE_SHUTDOWN
:
1486 ret
= GDB_SIGNAL_QUIT
;
1488 case RUN_STATE_IO_ERROR
:
1489 ret
= GDB_SIGNAL_IO
;
1491 case RUN_STATE_WATCHDOG
:
1492 ret
= GDB_SIGNAL_ALRM
;
1494 case RUN_STATE_INTERNAL_ERROR
:
1495 ret
= GDB_SIGNAL_ABRT
;
1497 case RUN_STATE_SAVE_VM
:
1498 case RUN_STATE_RESTORE_VM
:
1500 case RUN_STATE_FINISH_MIGRATE
:
1501 ret
= GDB_SIGNAL_XCPU
;
1504 ret
= GDB_SIGNAL_UNKNOWN
;
1507 snprintf(buf
, sizeof(buf
), "T%02xthread:%02x;", ret
, cpu_index(cpu
));
1512 /* disable single step if it was enabled */
1513 cpu_single_step(cpu
, 0);
1517 /* Send a gdb syscall request.
1518 This accepts limited printf-style format specifiers, specifically:
1519 %x - target_ulong argument printed in hex.
1520 %lx - 64-bit argument printed in hex.
1521 %s - string pointer (target_ulong) and length (int) pair. */
1522 void gdb_do_syscall(gdb_syscall_complete_cb cb
, const char *fmt
, ...)
1531 s
= gdbserver_state
;
1534 s
->current_syscall_cb
= cb
;
1535 #ifndef CONFIG_USER_ONLY
1536 vm_stop(RUN_STATE_DEBUG
);
1540 p_end
= &s
->syscall_buf
[sizeof(s
->syscall_buf
)];
1547 addr
= va_arg(va
, target_ulong
);
1548 p
+= snprintf(p
, p_end
- p
, TARGET_FMT_lx
, addr
);
1551 if (*(fmt
++) != 'x')
1553 i64
= va_arg(va
, uint64_t);
1554 p
+= snprintf(p
, p_end
- p
, "%" PRIx64
, i64
);
1557 addr
= va_arg(va
, target_ulong
);
1558 p
+= snprintf(p
, p_end
- p
, TARGET_FMT_lx
"/%x",
1559 addr
, va_arg(va
, int));
1563 fprintf(stderr
, "gdbstub: Bad syscall format string '%s'\n",
1573 #ifdef CONFIG_USER_ONLY
1574 put_packet(s
, s
->syscall_buf
);
1575 gdb_handlesig(s
->c_cpu
, 0);
1577 /* In this case wait to send the syscall packet until notification that
1578 the CPU has stopped. This must be done because if the packet is sent
1579 now the reply from the syscall request could be received while the CPU
1580 is still in the running state, which can cause packets to be dropped
1581 and state transition 'T' packets to be sent while the syscall is still
1587 static void gdb_read_byte(GDBState
*s
, int ch
)
1592 #ifndef CONFIG_USER_ONLY
1593 if (s
->last_packet_len
) {
1594 /* Waiting for a response to the last packet. If we see the start
1595 of a new command then abandon the previous response. */
1598 printf("Got NACK, retransmitting\n");
1600 put_buffer(s
, (uint8_t *)s
->last_packet
, s
->last_packet_len
);
1604 printf("Got ACK\n");
1606 printf("Got '%c' when expecting ACK/NACK\n", ch
);
1608 if (ch
== '+' || ch
== '$')
1609 s
->last_packet_len
= 0;
1613 if (runstate_is_running()) {
1614 /* when the CPU is running, we cannot do anything except stop
1615 it when receiving a char */
1616 vm_stop(RUN_STATE_PAUSED
);
1623 s
->line_buf_index
= 0;
1624 s
->state
= RS_GETLINE
;
1629 s
->state
= RS_CHKSUM1
;
1630 } else if (s
->line_buf_index
>= sizeof(s
->line_buf
) - 1) {
1633 s
->line_buf
[s
->line_buf_index
++] = ch
;
1637 s
->line_buf
[s
->line_buf_index
] = '\0';
1638 s
->line_csum
= fromhex(ch
) << 4;
1639 s
->state
= RS_CHKSUM2
;
1642 s
->line_csum
|= fromhex(ch
);
1644 for(i
= 0; i
< s
->line_buf_index
; i
++) {
1645 csum
+= s
->line_buf
[i
];
1647 if (s
->line_csum
!= (csum
& 0xff)) {
1649 put_buffer(s
, &reply
, 1);
1653 put_buffer(s
, &reply
, 1);
1654 s
->state
= gdb_handle_packet(s
, s
->line_buf
);
1663 /* Tell the remote gdb that the process has exited. */
1664 void gdb_exit(CPUArchState
*env
, int code
)
1669 s
= gdbserver_state
;
1673 #ifdef CONFIG_USER_ONLY
1674 if (gdbserver_fd
< 0 || s
->fd
< 0) {
1679 snprintf(buf
, sizeof(buf
), "W%02x", (uint8_t)code
);
1682 #ifndef CONFIG_USER_ONLY
1684 qemu_chr_delete(s
->chr
);
1689 #ifdef CONFIG_USER_ONLY
1695 s
= gdbserver_state
;
1697 if (gdbserver_fd
< 0 || s
->fd
< 0)
1704 gdb_handlesig(CPUState
*cpu
, int sig
)
1706 CPUArchState
*env
= cpu
->env_ptr
;
1711 s
= gdbserver_state
;
1712 if (gdbserver_fd
< 0 || s
->fd
< 0) {
1716 /* disable single step if it was enabled */
1717 cpu_single_step(cpu
, 0);
1721 snprintf(buf
, sizeof(buf
), "S%02x", target_signal_to_gdb(sig
));
1724 /* put_packet() might have detected that the peer terminated the
1732 s
->running_state
= 0;
1733 while (s
->running_state
== 0) {
1734 n
= read(s
->fd
, buf
, 256);
1738 for (i
= 0; i
< n
; i
++) {
1739 gdb_read_byte(s
, buf
[i
]);
1741 } else if (n
== 0 || errno
!= EAGAIN
) {
1742 /* XXX: Connection closed. Should probably wait for another
1743 connection before continuing. */
1752 /* Tell the remote gdb that the process has exited due to SIG. */
1753 void gdb_signalled(CPUArchState
*env
, int sig
)
1758 s
= gdbserver_state
;
1759 if (gdbserver_fd
< 0 || s
->fd
< 0) {
1763 snprintf(buf
, sizeof(buf
), "X%02x", target_signal_to_gdb(sig
));
1767 static void gdb_accept(void)
1770 struct sockaddr_in sockaddr
;
1775 len
= sizeof(sockaddr
);
1776 fd
= accept(gdbserver_fd
, (struct sockaddr
*)&sockaddr
, &len
);
1777 if (fd
< 0 && errno
!= EINTR
) {
1780 } else if (fd
>= 0) {
1782 fcntl(fd
, F_SETFD
, FD_CLOEXEC
);
1788 /* set short latency */
1789 socket_set_nodelay(fd
);
1791 s
= g_malloc0(sizeof(GDBState
));
1792 s
->c_cpu
= first_cpu
;
1793 s
->g_cpu
= first_cpu
;
1797 gdbserver_state
= s
;
1799 fcntl(fd
, F_SETFL
, O_NONBLOCK
);
1802 static int gdbserver_open(int port
)
1804 struct sockaddr_in sockaddr
;
1807 fd
= socket(PF_INET
, SOCK_STREAM
, 0);
1813 fcntl(fd
, F_SETFD
, FD_CLOEXEC
);
1816 /* allow fast reuse */
1818 qemu_setsockopt(fd
, SOL_SOCKET
, SO_REUSEADDR
, &val
, sizeof(val
));
1820 sockaddr
.sin_family
= AF_INET
;
1821 sockaddr
.sin_port
= htons(port
);
1822 sockaddr
.sin_addr
.s_addr
= 0;
1823 ret
= bind(fd
, (struct sockaddr
*)&sockaddr
, sizeof(sockaddr
));
1829 ret
= listen(fd
, 0);
1838 int gdbserver_start(int port
)
1840 gdbserver_fd
= gdbserver_open(port
);
1841 if (gdbserver_fd
< 0)
1843 /* accept connections */
1848 /* Disable gdb stub for child processes. */
1849 void gdbserver_fork(CPUArchState
*env
)
1851 GDBState
*s
= gdbserver_state
;
1852 if (gdbserver_fd
< 0 || s
->fd
< 0)
1856 cpu_breakpoint_remove_all(env
, BP_GDB
);
1857 cpu_watchpoint_remove_all(env
, BP_GDB
);
1860 static int gdb_chr_can_receive(void *opaque
)
1862 /* We can handle an arbitrarily large amount of data.
1863 Pick the maximum packet size, which is as good as anything. */
1864 return MAX_PACKET_LENGTH
;
1867 static void gdb_chr_receive(void *opaque
, const uint8_t *buf
, int size
)
1871 for (i
= 0; i
< size
; i
++) {
1872 gdb_read_byte(gdbserver_state
, buf
[i
]);
1876 static void gdb_chr_event(void *opaque
, int event
)
1879 case CHR_EVENT_OPENED
:
1880 vm_stop(RUN_STATE_PAUSED
);
1888 static void gdb_monitor_output(GDBState
*s
, const char *msg
, int len
)
1890 char buf
[MAX_PACKET_LENGTH
];
1893 if (len
> (MAX_PACKET_LENGTH
/2) - 1)
1894 len
= (MAX_PACKET_LENGTH
/2) - 1;
1895 memtohex(buf
+ 1, (uint8_t *)msg
, len
);
1899 static int gdb_monitor_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
1901 const char *p
= (const char *)buf
;
1904 max_sz
= (sizeof(gdbserver_state
->last_packet
) - 2) / 2;
1906 if (len
<= max_sz
) {
1907 gdb_monitor_output(gdbserver_state
, p
, len
);
1910 gdb_monitor_output(gdbserver_state
, p
, max_sz
);
1918 static void gdb_sigterm_handler(int signal
)
1920 if (runstate_is_running()) {
1921 vm_stop(RUN_STATE_PAUSED
);
1926 int gdbserver_start(const char *device
)
1929 char gdbstub_device_name
[128];
1930 CharDriverState
*chr
= NULL
;
1931 CharDriverState
*mon_chr
;
1935 if (strcmp(device
, "none") != 0) {
1936 if (strstart(device
, "tcp:", NULL
)) {
1937 /* enforce required TCP attributes */
1938 snprintf(gdbstub_device_name
, sizeof(gdbstub_device_name
),
1939 "%s,nowait,nodelay,server", device
);
1940 device
= gdbstub_device_name
;
1943 else if (strcmp(device
, "stdio") == 0) {
1944 struct sigaction act
;
1946 memset(&act
, 0, sizeof(act
));
1947 act
.sa_handler
= gdb_sigterm_handler
;
1948 sigaction(SIGINT
, &act
, NULL
);
1951 chr
= qemu_chr_new("gdb", device
, NULL
);
1955 qemu_chr_fe_claim_no_fail(chr
);
1956 qemu_chr_add_handlers(chr
, gdb_chr_can_receive
, gdb_chr_receive
,
1957 gdb_chr_event
, NULL
);
1960 s
= gdbserver_state
;
1962 s
= g_malloc0(sizeof(GDBState
));
1963 gdbserver_state
= s
;
1965 qemu_add_vm_change_state_handler(gdb_vm_state_change
, NULL
);
1967 /* Initialize a monitor terminal for gdb */
1968 mon_chr
= g_malloc0(sizeof(*mon_chr
));
1969 mon_chr
->chr_write
= gdb_monitor_write
;
1970 monitor_init(mon_chr
, 0);
1973 qemu_chr_delete(s
->chr
);
1974 mon_chr
= s
->mon_chr
;
1975 memset(s
, 0, sizeof(GDBState
));
1977 s
->c_cpu
= first_cpu
;
1978 s
->g_cpu
= first_cpu
;
1980 s
->state
= chr
? RS_IDLE
: RS_INACTIVE
;
1981 s
->mon_chr
= mon_chr
;
1982 s
->current_syscall_cb
= NULL
;