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 #if defined(TARGET_I386)
494 #include "target-i386/gdbstub.c"
496 #elif defined (TARGET_PPC)
498 #if defined (TARGET_PPC64)
499 #define GDB_CORE_XML "power64-core.xml"
501 #define GDB_CORE_XML "power-core.xml"
504 #include "target-ppc/gdbstub.c"
506 #elif defined (TARGET_SPARC)
508 #include "target-sparc/gdbstub.c"
510 #elif defined (TARGET_ARM)
512 #define GDB_CORE_XML "arm-core.xml"
514 #include "target-arm/gdbstub.c"
516 #elif defined (TARGET_M68K)
518 #define GDB_CORE_XML "cf-core.xml"
520 #include "target-m68k/gdbstub.c"
522 #elif defined (TARGET_MIPS)
524 #include "target-mips/gdbstub.c"
526 #elif defined(TARGET_OPENRISC)
528 #include "target-openrisc/gdbstub.c"
530 #elif defined (TARGET_SH4)
532 #include "target-sh4/gdbstub.c"
534 #elif defined (TARGET_MICROBLAZE)
536 #include "target-microblaze/gdbstub.c"
538 #elif defined (TARGET_CRIS)
540 #include "target-cris/gdbstub.c"
542 #elif defined (TARGET_ALPHA)
544 #include "target-alpha/gdbstub.c"
546 #elif defined (TARGET_S390X)
548 #include "target-s390x/gdbstub.c"
550 #elif defined (TARGET_LM32)
552 #include "target-lm32/gdbstub.c"
554 #elif defined(TARGET_XTENSA)
556 #include "target-xtensa/gdbstub.c"
560 static int cpu_gdb_read_register(CPUArchState
*env
, uint8_t *mem_buf
, int n
)
565 static int cpu_gdb_write_register(CPUArchState
*env
, uint8_t *mem_buf
, int n
)
573 /* Encode data using the encoding for 'x' packets. */
574 static int memtox(char *buf
, const char *mem
, int len
)
582 case '#': case '$': case '*': case '}':
594 static const char *get_feature_xml(const char *p
, const char **newp
)
599 static char target_xml
[1024];
602 while (p
[len
] && p
[len
] != ':')
607 if (strncmp(p
, "target.xml", len
) == 0) {
608 /* Generate the XML description for this CPU. */
609 if (!target_xml
[0]) {
611 CPUState
*cpu
= first_cpu
;
613 snprintf(target_xml
, sizeof(target_xml
),
614 "<?xml version=\"1.0\"?>"
615 "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">"
617 "<xi:include href=\"%s\"/>",
620 for (r
= cpu
->gdb_regs
; r
; r
= r
->next
) {
621 pstrcat(target_xml
, sizeof(target_xml
), "<xi:include href=\"");
622 pstrcat(target_xml
, sizeof(target_xml
), r
->xml
);
623 pstrcat(target_xml
, sizeof(target_xml
), "\"/>");
625 pstrcat(target_xml
, sizeof(target_xml
), "</target>");
630 name
= xml_builtin
[i
][0];
631 if (!name
|| (strncmp(name
, p
, len
) == 0 && strlen(name
) == len
))
634 return name
? xml_builtin
[i
][1] : NULL
;
638 static int gdb_read_register(CPUState
*cpu
, uint8_t *mem_buf
, int reg
)
640 CPUClass
*cc
= CPU_GET_CLASS(cpu
);
641 CPUArchState
*env
= cpu
->env_ptr
;
644 if (reg
< cc
->gdb_num_core_regs
) {
645 return cpu_gdb_read_register(env
, mem_buf
, reg
);
648 for (r
= cpu
->gdb_regs
; r
; r
= r
->next
) {
649 if (r
->base_reg
<= reg
&& reg
< r
->base_reg
+ r
->num_regs
) {
650 return r
->get_reg(env
, mem_buf
, reg
- r
->base_reg
);
656 static int gdb_write_register(CPUState
*cpu
, uint8_t *mem_buf
, int reg
)
658 CPUClass
*cc
= CPU_GET_CLASS(cpu
);
659 CPUArchState
*env
= cpu
->env_ptr
;
662 if (reg
< cc
->gdb_num_core_regs
) {
663 return cpu_gdb_write_register(env
, mem_buf
, reg
);
666 for (r
= cpu
->gdb_regs
; r
; r
= r
->next
) {
667 if (r
->base_reg
<= reg
&& reg
< r
->base_reg
+ r
->num_regs
) {
668 return r
->set_reg(env
, mem_buf
, reg
- r
->base_reg
);
674 /* Register a supplemental set of CPU registers. If g_pos is nonzero it
675 specifies the first register number and these registers are included in
676 a standard "g" packet. Direction is relative to gdb, i.e. get_reg is
677 gdb reading a CPU register, and set_reg is gdb modifying a CPU register.
680 void gdb_register_coprocessor(CPUState
*cpu
,
681 gdb_reg_cb get_reg
, gdb_reg_cb set_reg
,
682 int num_regs
, const char *xml
, int g_pos
)
685 GDBRegisterState
**p
;
689 /* Check for duplicates. */
690 if (strcmp((*p
)->xml
, xml
) == 0)
695 s
= g_new0(GDBRegisterState
, 1);
696 s
->base_reg
= cpu
->gdb_num_regs
;
697 s
->num_regs
= num_regs
;
698 s
->get_reg
= get_reg
;
699 s
->set_reg
= set_reg
;
702 /* Add to end of list. */
703 cpu
->gdb_num_regs
+= num_regs
;
706 if (g_pos
!= s
->base_reg
) {
707 fprintf(stderr
, "Error: Bad gdb register numbering for '%s'\n"
708 "Expected %d got %d\n", xml
, g_pos
, s
->base_reg
);
713 #ifndef CONFIG_USER_ONLY
714 static const int xlat_gdb_type
[] = {
715 [GDB_WATCHPOINT_WRITE
] = BP_GDB
| BP_MEM_WRITE
,
716 [GDB_WATCHPOINT_READ
] = BP_GDB
| BP_MEM_READ
,
717 [GDB_WATCHPOINT_ACCESS
] = BP_GDB
| BP_MEM_ACCESS
,
721 static int gdb_breakpoint_insert(target_ulong addr
, target_ulong len
, int type
)
728 return kvm_insert_breakpoint(gdbserver_state
->c_cpu
, addr
, len
, type
);
732 case GDB_BREAKPOINT_SW
:
733 case GDB_BREAKPOINT_HW
:
734 for (cpu
= first_cpu
; cpu
!= NULL
; cpu
= cpu
->next_cpu
) {
736 err
= cpu_breakpoint_insert(env
, addr
, BP_GDB
, NULL
);
741 #ifndef CONFIG_USER_ONLY
742 case GDB_WATCHPOINT_WRITE
:
743 case GDB_WATCHPOINT_READ
:
744 case GDB_WATCHPOINT_ACCESS
:
745 for (cpu
= first_cpu
; cpu
!= NULL
; cpu
= cpu
->next_cpu
) {
747 err
= cpu_watchpoint_insert(env
, addr
, len
, xlat_gdb_type
[type
],
759 static int gdb_breakpoint_remove(target_ulong addr
, target_ulong len
, int type
)
766 return kvm_remove_breakpoint(gdbserver_state
->c_cpu
, addr
, len
, type
);
770 case GDB_BREAKPOINT_SW
:
771 case GDB_BREAKPOINT_HW
:
772 for (cpu
= first_cpu
; cpu
!= NULL
; cpu
= cpu
->next_cpu
) {
774 err
= cpu_breakpoint_remove(env
, addr
, BP_GDB
);
779 #ifndef CONFIG_USER_ONLY
780 case GDB_WATCHPOINT_WRITE
:
781 case GDB_WATCHPOINT_READ
:
782 case GDB_WATCHPOINT_ACCESS
:
783 for (cpu
= first_cpu
; cpu
!= NULL
; cpu
= cpu
->next_cpu
) {
785 err
= cpu_watchpoint_remove(env
, addr
, len
, xlat_gdb_type
[type
]);
796 static void gdb_breakpoint_remove_all(void)
802 kvm_remove_all_breakpoints(gdbserver_state
->c_cpu
);
806 for (cpu
= first_cpu
; cpu
!= NULL
; cpu
= cpu
->next_cpu
) {
808 cpu_breakpoint_remove_all(env
, BP_GDB
);
809 #ifndef CONFIG_USER_ONLY
810 cpu_watchpoint_remove_all(env
, BP_GDB
);
815 static void gdb_set_cpu_pc(GDBState
*s
, target_ulong pc
)
817 CPUState
*cpu
= s
->c_cpu
;
818 CPUClass
*cc
= CPU_GET_CLASS(cpu
);
820 cpu_synchronize_state(cpu
);
826 static CPUState
*find_cpu(uint32_t thread_id
)
830 for (cpu
= first_cpu
; cpu
!= NULL
; cpu
= cpu
->next_cpu
) {
831 if (cpu_index(cpu
) == thread_id
) {
839 static int gdb_handle_packet(GDBState
*s
, const char *line_buf
)
844 int ch
, reg_size
, type
, res
;
845 char buf
[MAX_PACKET_LENGTH
];
846 uint8_t mem_buf
[MAX_PACKET_LENGTH
];
848 target_ulong addr
, len
;
851 printf("command='%s'\n", line_buf
);
857 /* TODO: Make this return the correct value for user-mode. */
858 snprintf(buf
, sizeof(buf
), "T%02xthread:%02x;", GDB_SIGNAL_TRAP
,
859 cpu_index(s
->c_cpu
));
861 /* Remove all the breakpoints when this query is issued,
862 * because gdb is doing and initial connect and the state
863 * should be cleaned up.
865 gdb_breakpoint_remove_all();
869 addr
= strtoull(p
, (char **)&p
, 16);
870 gdb_set_cpu_pc(s
, addr
);
876 s
->signal
= gdb_signal_to_target (strtoul(p
, (char **)&p
, 16));
882 if (strncmp(p
, "Cont", 4) == 0) {
883 int res_signal
, res_thread
;
887 put_packet(s
, "vCont;c;C;s;S");
902 if (action
== 'C' || action
== 'S') {
903 signal
= strtoul(p
, (char **)&p
, 16);
904 } else if (action
!= 'c' && action
!= 's') {
910 thread
= strtoull(p
+1, (char **)&p
, 16);
912 action
= tolower(action
);
913 if (res
== 0 || (res
== 'c' && action
== 's')) {
920 if (res_thread
!= -1 && res_thread
!= 0) {
921 cpu
= find_cpu(res_thread
);
923 put_packet(s
, "E22");
929 cpu_single_step(s
->c_cpu
, sstep_flags
);
931 s
->signal
= res_signal
;
937 goto unknown_command
;
940 #ifdef CONFIG_USER_ONLY
941 /* Kill the target */
942 fprintf(stderr
, "\nQEMU: Terminated via GDBstub\n");
947 gdb_breakpoint_remove_all();
948 gdb_syscall_mode
= GDB_SYS_DISABLED
;
954 addr
= strtoull(p
, (char **)&p
, 16);
955 gdb_set_cpu_pc(s
, addr
);
957 cpu_single_step(s
->c_cpu
, sstep_flags
);
965 ret
= strtoull(p
, (char **)&p
, 16);
968 err
= strtoull(p
, (char **)&p
, 16);
975 if (s
->current_syscall_cb
) {
976 s
->current_syscall_cb(s
->c_cpu
, ret
, err
);
977 s
->current_syscall_cb
= NULL
;
980 put_packet(s
, "T02");
987 cpu_synchronize_state(s
->g_cpu
);
989 for (addr
= 0; addr
< s
->g_cpu
->gdb_num_regs
; addr
++) {
990 reg_size
= gdb_read_register(s
->g_cpu
, mem_buf
+ len
, addr
);
993 memtohex(buf
, mem_buf
, len
);
997 cpu_synchronize_state(s
->g_cpu
);
1000 hextomem((uint8_t *)registers
, p
, len
);
1001 for (addr
= 0; addr
< s
->g_cpu
->gdb_num_regs
&& len
> 0; addr
++) {
1002 reg_size
= gdb_write_register(s
->g_cpu
, registers
, addr
);
1004 registers
+= reg_size
;
1006 put_packet(s
, "OK");
1009 addr
= strtoull(p
, (char **)&p
, 16);
1012 len
= strtoull(p
, NULL
, 16);
1013 if (target_memory_rw_debug(s
->g_cpu
, addr
, mem_buf
, len
, false) != 0) {
1014 put_packet (s
, "E14");
1016 memtohex(buf
, mem_buf
, len
);
1021 addr
= strtoull(p
, (char **)&p
, 16);
1024 len
= strtoull(p
, (char **)&p
, 16);
1027 hextomem(mem_buf
, p
, len
);
1028 if (target_memory_rw_debug(s
->g_cpu
, addr
, mem_buf
, len
,
1030 put_packet(s
, "E14");
1032 put_packet(s
, "OK");
1036 /* Older gdb are really dumb, and don't use 'g' if 'p' is avaialable.
1037 This works, but can be very slow. Anything new enough to
1038 understand XML also knows how to use this properly. */
1040 goto unknown_command
;
1041 addr
= strtoull(p
, (char **)&p
, 16);
1042 reg_size
= gdb_read_register(s
->g_cpu
, mem_buf
, addr
);
1044 memtohex(buf
, mem_buf
, reg_size
);
1047 put_packet(s
, "E14");
1052 goto unknown_command
;
1053 addr
= strtoull(p
, (char **)&p
, 16);
1056 reg_size
= strlen(p
) / 2;
1057 hextomem(mem_buf
, p
, reg_size
);
1058 gdb_write_register(s
->g_cpu
, mem_buf
, addr
);
1059 put_packet(s
, "OK");
1063 type
= strtoul(p
, (char **)&p
, 16);
1066 addr
= strtoull(p
, (char **)&p
, 16);
1069 len
= strtoull(p
, (char **)&p
, 16);
1071 res
= gdb_breakpoint_insert(addr
, len
, type
);
1073 res
= gdb_breakpoint_remove(addr
, len
, type
);
1075 put_packet(s
, "OK");
1076 else if (res
== -ENOSYS
)
1079 put_packet(s
, "E22");
1083 thread
= strtoull(p
, (char **)&p
, 16);
1084 if (thread
== -1 || thread
== 0) {
1085 put_packet(s
, "OK");
1088 cpu
= find_cpu(thread
);
1090 put_packet(s
, "E22");
1096 put_packet(s
, "OK");
1100 put_packet(s
, "OK");
1103 put_packet(s
, "E22");
1108 thread
= strtoull(p
, (char **)&p
, 16);
1109 cpu
= find_cpu(thread
);
1112 put_packet(s
, "OK");
1114 put_packet(s
, "E22");
1119 /* parse any 'q' packets here */
1120 if (!strcmp(p
,"qemu.sstepbits")) {
1121 /* Query Breakpoint bit definitions */
1122 snprintf(buf
, sizeof(buf
), "ENABLE=%x,NOIRQ=%x,NOTIMER=%x",
1128 } else if (strncmp(p
,"qemu.sstep",10) == 0) {
1129 /* Display or change the sstep_flags */
1132 /* Display current setting */
1133 snprintf(buf
, sizeof(buf
), "0x%x", sstep_flags
);
1138 type
= strtoul(p
, (char **)&p
, 16);
1140 put_packet(s
, "OK");
1142 } else if (strcmp(p
,"C") == 0) {
1143 /* "Current thread" remains vague in the spec, so always return
1144 * the first CPU (gdb returns the first thread). */
1145 put_packet(s
, "QC1");
1147 } else if (strcmp(p
,"fThreadInfo") == 0) {
1148 s
->query_cpu
= first_cpu
;
1149 goto report_cpuinfo
;
1150 } else if (strcmp(p
,"sThreadInfo") == 0) {
1153 snprintf(buf
, sizeof(buf
), "m%x", cpu_index(s
->query_cpu
));
1155 s
->query_cpu
= s
->query_cpu
->next_cpu
;
1159 } else if (strncmp(p
,"ThreadExtraInfo,", 16) == 0) {
1160 thread
= strtoull(p
+16, (char **)&p
, 16);
1161 cpu
= find_cpu(thread
);
1163 cpu_synchronize_state(cpu
);
1164 len
= snprintf((char *)mem_buf
, sizeof(mem_buf
),
1165 "CPU#%d [%s]", cpu
->cpu_index
,
1166 cpu
->halted
? "halted " : "running");
1167 memtohex(buf
, mem_buf
, len
);
1172 #ifdef CONFIG_USER_ONLY
1173 else if (strncmp(p
, "Offsets", 7) == 0) {
1174 CPUArchState
*env
= s
->c_cpu
->env_ptr
;
1175 TaskState
*ts
= env
->opaque
;
1177 snprintf(buf
, sizeof(buf
),
1178 "Text=" TARGET_ABI_FMT_lx
";Data=" TARGET_ABI_FMT_lx
1179 ";Bss=" TARGET_ABI_FMT_lx
,
1180 ts
->info
->code_offset
,
1181 ts
->info
->data_offset
,
1182 ts
->info
->data_offset
);
1186 #else /* !CONFIG_USER_ONLY */
1187 else if (strncmp(p
, "Rcmd,", 5) == 0) {
1188 int len
= strlen(p
+ 5);
1190 if ((len
% 2) != 0) {
1191 put_packet(s
, "E01");
1194 hextomem(mem_buf
, p
+ 5, len
);
1197 qemu_chr_be_write(s
->mon_chr
, mem_buf
, len
);
1198 put_packet(s
, "OK");
1201 #endif /* !CONFIG_USER_ONLY */
1202 if (strncmp(p
, "Supported", 9) == 0) {
1203 snprintf(buf
, sizeof(buf
), "PacketSize=%x", MAX_PACKET_LENGTH
);
1205 pstrcat(buf
, sizeof(buf
), ";qXfer:features:read+");
1211 if (strncmp(p
, "Xfer:features:read:", 19) == 0) {
1213 target_ulong total_len
;
1217 xml
= get_feature_xml(p
, &p
);
1219 snprintf(buf
, sizeof(buf
), "E00");
1226 addr
= strtoul(p
, (char **)&p
, 16);
1229 len
= strtoul(p
, (char **)&p
, 16);
1231 total_len
= strlen(xml
);
1232 if (addr
> total_len
) {
1233 snprintf(buf
, sizeof(buf
), "E00");
1237 if (len
> (MAX_PACKET_LENGTH
- 5) / 2)
1238 len
= (MAX_PACKET_LENGTH
- 5) / 2;
1239 if (len
< total_len
- addr
) {
1241 len
= memtox(buf
+ 1, xml
+ addr
, len
);
1244 len
= memtox(buf
+ 1, xml
+ addr
, total_len
- addr
);
1246 put_packet_binary(s
, buf
, len
+ 1);
1250 /* Unrecognised 'q' command. */
1251 goto unknown_command
;
1255 /* put empty packet */
1263 void gdb_set_stop_cpu(CPUState
*cpu
)
1265 gdbserver_state
->c_cpu
= cpu
;
1266 gdbserver_state
->g_cpu
= cpu
;
1269 #ifndef CONFIG_USER_ONLY
1270 static void gdb_vm_state_change(void *opaque
, int running
, RunState state
)
1272 GDBState
*s
= gdbserver_state
;
1273 CPUArchState
*env
= s
->c_cpu
->env_ptr
;
1274 CPUState
*cpu
= s
->c_cpu
;
1279 if (running
|| s
->state
== RS_INACTIVE
) {
1282 /* Is there a GDB syscall waiting to be sent? */
1283 if (s
->current_syscall_cb
) {
1284 put_packet(s
, s
->syscall_buf
);
1288 case RUN_STATE_DEBUG
:
1289 if (env
->watchpoint_hit
) {
1290 switch (env
->watchpoint_hit
->flags
& BP_MEM_ACCESS
) {
1301 snprintf(buf
, sizeof(buf
),
1302 "T%02xthread:%02x;%swatch:" TARGET_FMT_lx
";",
1303 GDB_SIGNAL_TRAP
, cpu_index(cpu
), type
,
1304 env
->watchpoint_hit
->vaddr
);
1305 env
->watchpoint_hit
= NULL
;
1309 ret
= GDB_SIGNAL_TRAP
;
1311 case RUN_STATE_PAUSED
:
1312 ret
= GDB_SIGNAL_INT
;
1314 case RUN_STATE_SHUTDOWN
:
1315 ret
= GDB_SIGNAL_QUIT
;
1317 case RUN_STATE_IO_ERROR
:
1318 ret
= GDB_SIGNAL_IO
;
1320 case RUN_STATE_WATCHDOG
:
1321 ret
= GDB_SIGNAL_ALRM
;
1323 case RUN_STATE_INTERNAL_ERROR
:
1324 ret
= GDB_SIGNAL_ABRT
;
1326 case RUN_STATE_SAVE_VM
:
1327 case RUN_STATE_RESTORE_VM
:
1329 case RUN_STATE_FINISH_MIGRATE
:
1330 ret
= GDB_SIGNAL_XCPU
;
1333 ret
= GDB_SIGNAL_UNKNOWN
;
1336 snprintf(buf
, sizeof(buf
), "T%02xthread:%02x;", ret
, cpu_index(cpu
));
1341 /* disable single step if it was enabled */
1342 cpu_single_step(cpu
, 0);
1346 /* Send a gdb syscall request.
1347 This accepts limited printf-style format specifiers, specifically:
1348 %x - target_ulong argument printed in hex.
1349 %lx - 64-bit argument printed in hex.
1350 %s - string pointer (target_ulong) and length (int) pair. */
1351 void gdb_do_syscall(gdb_syscall_complete_cb cb
, const char *fmt
, ...)
1360 s
= gdbserver_state
;
1363 s
->current_syscall_cb
= cb
;
1364 #ifndef CONFIG_USER_ONLY
1365 vm_stop(RUN_STATE_DEBUG
);
1369 p_end
= &s
->syscall_buf
[sizeof(s
->syscall_buf
)];
1376 addr
= va_arg(va
, target_ulong
);
1377 p
+= snprintf(p
, p_end
- p
, TARGET_FMT_lx
, addr
);
1380 if (*(fmt
++) != 'x')
1382 i64
= va_arg(va
, uint64_t);
1383 p
+= snprintf(p
, p_end
- p
, "%" PRIx64
, i64
);
1386 addr
= va_arg(va
, target_ulong
);
1387 p
+= snprintf(p
, p_end
- p
, TARGET_FMT_lx
"/%x",
1388 addr
, va_arg(va
, int));
1392 fprintf(stderr
, "gdbstub: Bad syscall format string '%s'\n",
1402 #ifdef CONFIG_USER_ONLY
1403 put_packet(s
, s
->syscall_buf
);
1404 gdb_handlesig(s
->c_cpu
, 0);
1406 /* In this case wait to send the syscall packet until notification that
1407 the CPU has stopped. This must be done because if the packet is sent
1408 now the reply from the syscall request could be received while the CPU
1409 is still in the running state, which can cause packets to be dropped
1410 and state transition 'T' packets to be sent while the syscall is still
1416 static void gdb_read_byte(GDBState
*s
, int ch
)
1421 #ifndef CONFIG_USER_ONLY
1422 if (s
->last_packet_len
) {
1423 /* Waiting for a response to the last packet. If we see the start
1424 of a new command then abandon the previous response. */
1427 printf("Got NACK, retransmitting\n");
1429 put_buffer(s
, (uint8_t *)s
->last_packet
, s
->last_packet_len
);
1433 printf("Got ACK\n");
1435 printf("Got '%c' when expecting ACK/NACK\n", ch
);
1437 if (ch
== '+' || ch
== '$')
1438 s
->last_packet_len
= 0;
1442 if (runstate_is_running()) {
1443 /* when the CPU is running, we cannot do anything except stop
1444 it when receiving a char */
1445 vm_stop(RUN_STATE_PAUSED
);
1452 s
->line_buf_index
= 0;
1453 s
->state
= RS_GETLINE
;
1458 s
->state
= RS_CHKSUM1
;
1459 } else if (s
->line_buf_index
>= sizeof(s
->line_buf
) - 1) {
1462 s
->line_buf
[s
->line_buf_index
++] = ch
;
1466 s
->line_buf
[s
->line_buf_index
] = '\0';
1467 s
->line_csum
= fromhex(ch
) << 4;
1468 s
->state
= RS_CHKSUM2
;
1471 s
->line_csum
|= fromhex(ch
);
1473 for(i
= 0; i
< s
->line_buf_index
; i
++) {
1474 csum
+= s
->line_buf
[i
];
1476 if (s
->line_csum
!= (csum
& 0xff)) {
1478 put_buffer(s
, &reply
, 1);
1482 put_buffer(s
, &reply
, 1);
1483 s
->state
= gdb_handle_packet(s
, s
->line_buf
);
1492 /* Tell the remote gdb that the process has exited. */
1493 void gdb_exit(CPUArchState
*env
, int code
)
1498 s
= gdbserver_state
;
1502 #ifdef CONFIG_USER_ONLY
1503 if (gdbserver_fd
< 0 || s
->fd
< 0) {
1508 snprintf(buf
, sizeof(buf
), "W%02x", (uint8_t)code
);
1511 #ifndef CONFIG_USER_ONLY
1513 qemu_chr_delete(s
->chr
);
1518 #ifdef CONFIG_USER_ONLY
1524 s
= gdbserver_state
;
1526 if (gdbserver_fd
< 0 || s
->fd
< 0)
1533 gdb_handlesig(CPUState
*cpu
, int sig
)
1535 CPUArchState
*env
= cpu
->env_ptr
;
1540 s
= gdbserver_state
;
1541 if (gdbserver_fd
< 0 || s
->fd
< 0) {
1545 /* disable single step if it was enabled */
1546 cpu_single_step(cpu
, 0);
1550 snprintf(buf
, sizeof(buf
), "S%02x", target_signal_to_gdb(sig
));
1553 /* put_packet() might have detected that the peer terminated the
1561 s
->running_state
= 0;
1562 while (s
->running_state
== 0) {
1563 n
= read(s
->fd
, buf
, 256);
1567 for (i
= 0; i
< n
; i
++) {
1568 gdb_read_byte(s
, buf
[i
]);
1570 } else if (n
== 0 || errno
!= EAGAIN
) {
1571 /* XXX: Connection closed. Should probably wait for another
1572 connection before continuing. */
1581 /* Tell the remote gdb that the process has exited due to SIG. */
1582 void gdb_signalled(CPUArchState
*env
, int sig
)
1587 s
= gdbserver_state
;
1588 if (gdbserver_fd
< 0 || s
->fd
< 0) {
1592 snprintf(buf
, sizeof(buf
), "X%02x", target_signal_to_gdb(sig
));
1596 static void gdb_accept(void)
1599 struct sockaddr_in sockaddr
;
1604 len
= sizeof(sockaddr
);
1605 fd
= accept(gdbserver_fd
, (struct sockaddr
*)&sockaddr
, &len
);
1606 if (fd
< 0 && errno
!= EINTR
) {
1609 } else if (fd
>= 0) {
1611 fcntl(fd
, F_SETFD
, FD_CLOEXEC
);
1617 /* set short latency */
1618 socket_set_nodelay(fd
);
1620 s
= g_malloc0(sizeof(GDBState
));
1621 s
->c_cpu
= first_cpu
;
1622 s
->g_cpu
= first_cpu
;
1626 gdbserver_state
= s
;
1628 fcntl(fd
, F_SETFL
, O_NONBLOCK
);
1631 static int gdbserver_open(int port
)
1633 struct sockaddr_in sockaddr
;
1636 fd
= socket(PF_INET
, SOCK_STREAM
, 0);
1642 fcntl(fd
, F_SETFD
, FD_CLOEXEC
);
1645 /* allow fast reuse */
1647 qemu_setsockopt(fd
, SOL_SOCKET
, SO_REUSEADDR
, &val
, sizeof(val
));
1649 sockaddr
.sin_family
= AF_INET
;
1650 sockaddr
.sin_port
= htons(port
);
1651 sockaddr
.sin_addr
.s_addr
= 0;
1652 ret
= bind(fd
, (struct sockaddr
*)&sockaddr
, sizeof(sockaddr
));
1658 ret
= listen(fd
, 0);
1667 int gdbserver_start(int port
)
1669 gdbserver_fd
= gdbserver_open(port
);
1670 if (gdbserver_fd
< 0)
1672 /* accept connections */
1677 /* Disable gdb stub for child processes. */
1678 void gdbserver_fork(CPUArchState
*env
)
1680 GDBState
*s
= gdbserver_state
;
1681 if (gdbserver_fd
< 0 || s
->fd
< 0)
1685 cpu_breakpoint_remove_all(env
, BP_GDB
);
1686 cpu_watchpoint_remove_all(env
, BP_GDB
);
1689 static int gdb_chr_can_receive(void *opaque
)
1691 /* We can handle an arbitrarily large amount of data.
1692 Pick the maximum packet size, which is as good as anything. */
1693 return MAX_PACKET_LENGTH
;
1696 static void gdb_chr_receive(void *opaque
, const uint8_t *buf
, int size
)
1700 for (i
= 0; i
< size
; i
++) {
1701 gdb_read_byte(gdbserver_state
, buf
[i
]);
1705 static void gdb_chr_event(void *opaque
, int event
)
1708 case CHR_EVENT_OPENED
:
1709 vm_stop(RUN_STATE_PAUSED
);
1717 static void gdb_monitor_output(GDBState
*s
, const char *msg
, int len
)
1719 char buf
[MAX_PACKET_LENGTH
];
1722 if (len
> (MAX_PACKET_LENGTH
/2) - 1)
1723 len
= (MAX_PACKET_LENGTH
/2) - 1;
1724 memtohex(buf
+ 1, (uint8_t *)msg
, len
);
1728 static int gdb_monitor_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
1730 const char *p
= (const char *)buf
;
1733 max_sz
= (sizeof(gdbserver_state
->last_packet
) - 2) / 2;
1735 if (len
<= max_sz
) {
1736 gdb_monitor_output(gdbserver_state
, p
, len
);
1739 gdb_monitor_output(gdbserver_state
, p
, max_sz
);
1747 static void gdb_sigterm_handler(int signal
)
1749 if (runstate_is_running()) {
1750 vm_stop(RUN_STATE_PAUSED
);
1755 int gdbserver_start(const char *device
)
1758 char gdbstub_device_name
[128];
1759 CharDriverState
*chr
= NULL
;
1760 CharDriverState
*mon_chr
;
1764 if (strcmp(device
, "none") != 0) {
1765 if (strstart(device
, "tcp:", NULL
)) {
1766 /* enforce required TCP attributes */
1767 snprintf(gdbstub_device_name
, sizeof(gdbstub_device_name
),
1768 "%s,nowait,nodelay,server", device
);
1769 device
= gdbstub_device_name
;
1772 else if (strcmp(device
, "stdio") == 0) {
1773 struct sigaction act
;
1775 memset(&act
, 0, sizeof(act
));
1776 act
.sa_handler
= gdb_sigterm_handler
;
1777 sigaction(SIGINT
, &act
, NULL
);
1780 chr
= qemu_chr_new("gdb", device
, NULL
);
1784 qemu_chr_fe_claim_no_fail(chr
);
1785 qemu_chr_add_handlers(chr
, gdb_chr_can_receive
, gdb_chr_receive
,
1786 gdb_chr_event
, NULL
);
1789 s
= gdbserver_state
;
1791 s
= g_malloc0(sizeof(GDBState
));
1792 gdbserver_state
= s
;
1794 qemu_add_vm_change_state_handler(gdb_vm_state_change
, NULL
);
1796 /* Initialize a monitor terminal for gdb */
1797 mon_chr
= g_malloc0(sizeof(*mon_chr
));
1798 mon_chr
->chr_write
= gdb_monitor_write
;
1799 monitor_init(mon_chr
, 0);
1802 qemu_chr_delete(s
->chr
);
1803 mon_chr
= s
->mon_chr
;
1804 memset(s
, 0, sizeof(GDBState
));
1806 s
->c_cpu
= first_cpu
;
1807 s
->g_cpu
= first_cpu
;
1809 s
->state
= chr
? RS_IDLE
: RS_INACTIVE
;
1810 s
->mon_chr
= mon_chr
;
1811 s
->current_syscall_cb
= NULL
;