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"
44 #ifdef CONFIG_USER_ONLY
45 #define GDB_ATTACHED "0"
47 #define GDB_ATTACHED "1"
50 static inline int target_memory_rw_debug(CPUState
*cpu
, target_ulong addr
,
51 uint8_t *buf
, int len
, bool is_write
)
53 CPUClass
*cc
= CPU_GET_CLASS(cpu
);
55 if (cc
->memory_rw_debug
) {
56 return cc
->memory_rw_debug(cpu
, addr
, buf
, len
, is_write
);
58 return cpu_memory_rw_debug(cpu
, addr
, buf
, len
, is_write
);
70 GDB_SIGNAL_UNKNOWN
= 143
73 #ifdef CONFIG_USER_ONLY
75 /* Map target signal numbers to GDB protocol signal numbers and vice
76 * versa. For user emulation's currently supported systems, we can
77 * assume most signals are defined.
80 static int gdb_signal_table
[] = {
240 /* In system mode we only need SIGINT and SIGTRAP; other signals
241 are not yet supported. */
248 static int gdb_signal_table
[] = {
258 #ifdef CONFIG_USER_ONLY
259 static int target_signal_to_gdb (int sig
)
262 for (i
= 0; i
< ARRAY_SIZE (gdb_signal_table
); i
++)
263 if (gdb_signal_table
[i
] == sig
)
265 return GDB_SIGNAL_UNKNOWN
;
269 static int gdb_signal_to_target (int sig
)
271 if (sig
< ARRAY_SIZE (gdb_signal_table
))
272 return gdb_signal_table
[sig
];
279 typedef struct GDBRegisterState
{
285 struct GDBRegisterState
*next
;
295 typedef struct GDBState
{
296 CPUState
*c_cpu
; /* current CPU for step/continue ops */
297 CPUState
*g_cpu
; /* current CPU for other ops */
298 CPUState
*query_cpu
; /* for q{f|s}ThreadInfo */
299 enum RSState state
; /* parsing state */
300 char line_buf
[MAX_PACKET_LENGTH
];
303 uint8_t last_packet
[MAX_PACKET_LENGTH
+ 4];
306 #ifdef CONFIG_USER_ONLY
310 CharDriverState
*chr
;
311 CharDriverState
*mon_chr
;
313 char syscall_buf
[256];
314 gdb_syscall_complete_cb current_syscall_cb
;
317 /* By default use no IRQs and no timers while single stepping so as to
318 * make single stepping like an ICE HW step.
320 static int sstep_flags
= SSTEP_ENABLE
|SSTEP_NOIRQ
|SSTEP_NOTIMER
;
322 static GDBState
*gdbserver_state
;
326 int semihosting_target
= SEMIHOSTING_TARGET_AUTO
;
328 #ifdef CONFIG_USER_ONLY
329 /* XXX: This is not thread safe. Do we care? */
330 static int gdbserver_fd
= -1;
332 static int get_char(GDBState
*s
)
338 ret
= qemu_recv(s
->fd
, &ch
, 1, 0);
340 if (errno
== ECONNRESET
)
342 if (errno
!= EINTR
&& errno
!= EAGAIN
)
344 } else if (ret
== 0) {
362 /* Decide if either remote gdb syscalls or native file IO should be used. */
363 int use_gdb_syscalls(void)
365 if (semihosting_target
== SEMIHOSTING_TARGET_NATIVE
) {
366 /* -semihosting-config target=native */
368 } else if (semihosting_target
== SEMIHOSTING_TARGET_GDB
) {
369 /* -semihosting-config target=gdb */
373 /* -semihosting-config target=auto */
374 /* On the first call check if gdb is connected and remember. */
375 if (gdb_syscall_mode
== GDB_SYS_UNKNOWN
) {
376 gdb_syscall_mode
= (gdbserver_state
? GDB_SYS_ENABLED
379 return gdb_syscall_mode
== GDB_SYS_ENABLED
;
382 /* Resume execution. */
383 static inline void gdb_continue(GDBState
*s
)
385 #ifdef CONFIG_USER_ONLY
386 s
->running_state
= 1;
388 if (!runstate_needs_reset()) {
394 static void put_buffer(GDBState
*s
, const uint8_t *buf
, int len
)
396 #ifdef CONFIG_USER_ONLY
400 ret
= send(s
->fd
, buf
, len
, 0);
402 if (errno
!= EINTR
&& errno
!= EAGAIN
)
410 qemu_chr_fe_write(s
->chr
, buf
, len
);
414 static inline int fromhex(int v
)
416 if (v
>= '0' && v
<= '9')
418 else if (v
>= 'A' && v
<= 'F')
420 else if (v
>= 'a' && v
<= 'f')
426 static inline int tohex(int v
)
434 static void memtohex(char *buf
, const uint8_t *mem
, int len
)
439 for(i
= 0; i
< len
; i
++) {
441 *q
++ = tohex(c
>> 4);
442 *q
++ = tohex(c
& 0xf);
447 static void hextomem(uint8_t *mem
, const char *buf
, int len
)
451 for(i
= 0; i
< len
; i
++) {
452 mem
[i
] = (fromhex(buf
[0]) << 4) | fromhex(buf
[1]);
457 /* return -1 if error, 0 if OK */
458 static int put_packet_binary(GDBState
*s
, const char *buf
, int len
)
469 for(i
= 0; i
< len
; i
++) {
473 *(p
++) = tohex((csum
>> 4) & 0xf);
474 *(p
++) = tohex((csum
) & 0xf);
476 s
->last_packet_len
= p
- s
->last_packet
;
477 put_buffer(s
, (uint8_t *)s
->last_packet
, s
->last_packet_len
);
479 #ifdef CONFIG_USER_ONLY
492 /* return -1 if error, 0 if OK */
493 static int put_packet(GDBState
*s
, const char *buf
)
496 printf("reply='%s'\n", buf
);
499 return put_packet_binary(s
, buf
, strlen(buf
));
502 /* Encode data using the encoding for 'x' packets. */
503 static int memtox(char *buf
, const char *mem
, int len
)
511 case '#': case '$': case '*': case '}':
523 static const char *get_feature_xml(const char *p
, const char **newp
,
529 static char target_xml
[1024];
532 while (p
[len
] && p
[len
] != ':')
537 if (strncmp(p
, "target.xml", len
) == 0) {
538 /* Generate the XML description for this CPU. */
539 if (!target_xml
[0]) {
541 CPUState
*cpu
= first_cpu
;
543 snprintf(target_xml
, sizeof(target_xml
),
544 "<?xml version=\"1.0\"?>"
545 "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">"
547 "<xi:include href=\"%s\"/>",
548 cc
->gdb_core_xml_file
);
550 for (r
= cpu
->gdb_regs
; r
; r
= r
->next
) {
551 pstrcat(target_xml
, sizeof(target_xml
), "<xi:include href=\"");
552 pstrcat(target_xml
, sizeof(target_xml
), r
->xml
);
553 pstrcat(target_xml
, sizeof(target_xml
), "\"/>");
555 pstrcat(target_xml
, sizeof(target_xml
), "</target>");
560 name
= xml_builtin
[i
][0];
561 if (!name
|| (strncmp(name
, p
, len
) == 0 && strlen(name
) == len
))
564 return name
? xml_builtin
[i
][1] : NULL
;
567 static int gdb_read_register(CPUState
*cpu
, uint8_t *mem_buf
, int reg
)
569 CPUClass
*cc
= CPU_GET_CLASS(cpu
);
570 CPUArchState
*env
= cpu
->env_ptr
;
573 if (reg
< cc
->gdb_num_core_regs
) {
574 return cc
->gdb_read_register(cpu
, mem_buf
, reg
);
577 for (r
= cpu
->gdb_regs
; r
; r
= r
->next
) {
578 if (r
->base_reg
<= reg
&& reg
< r
->base_reg
+ r
->num_regs
) {
579 return r
->get_reg(env
, mem_buf
, reg
- r
->base_reg
);
585 static int gdb_write_register(CPUState
*cpu
, uint8_t *mem_buf
, int reg
)
587 CPUClass
*cc
= CPU_GET_CLASS(cpu
);
588 CPUArchState
*env
= cpu
->env_ptr
;
591 if (reg
< cc
->gdb_num_core_regs
) {
592 return cc
->gdb_write_register(cpu
, mem_buf
, reg
);
595 for (r
= cpu
->gdb_regs
; r
; r
= r
->next
) {
596 if (r
->base_reg
<= reg
&& reg
< r
->base_reg
+ r
->num_regs
) {
597 return r
->set_reg(env
, mem_buf
, reg
- r
->base_reg
);
603 /* Register a supplemental set of CPU registers. If g_pos is nonzero it
604 specifies the first register number and these registers are included in
605 a standard "g" packet. Direction is relative to gdb, i.e. get_reg is
606 gdb reading a CPU register, and set_reg is gdb modifying a CPU register.
609 void gdb_register_coprocessor(CPUState
*cpu
,
610 gdb_reg_cb get_reg
, gdb_reg_cb set_reg
,
611 int num_regs
, const char *xml
, int g_pos
)
614 GDBRegisterState
**p
;
618 /* Check for duplicates. */
619 if (strcmp((*p
)->xml
, xml
) == 0)
624 s
= g_new0(GDBRegisterState
, 1);
625 s
->base_reg
= cpu
->gdb_num_regs
;
626 s
->num_regs
= num_regs
;
627 s
->get_reg
= get_reg
;
628 s
->set_reg
= set_reg
;
631 /* Add to end of list. */
632 cpu
->gdb_num_regs
+= num_regs
;
635 if (g_pos
!= s
->base_reg
) {
636 fprintf(stderr
, "Error: Bad gdb register numbering for '%s'\n"
637 "Expected %d got %d\n", xml
, g_pos
, s
->base_reg
);
639 cpu
->gdb_num_g_regs
= cpu
->gdb_num_regs
;
644 #ifndef CONFIG_USER_ONLY
645 /* Translate GDB watchpoint type to a flags value for cpu_watchpoint_* */
646 static inline int xlat_gdb_type(CPUState
*cpu
, int gdbtype
)
648 static const int xlat
[] = {
649 [GDB_WATCHPOINT_WRITE
] = BP_GDB
| BP_MEM_WRITE
,
650 [GDB_WATCHPOINT_READ
] = BP_GDB
| BP_MEM_READ
,
651 [GDB_WATCHPOINT_ACCESS
] = BP_GDB
| BP_MEM_ACCESS
,
654 CPUClass
*cc
= CPU_GET_CLASS(cpu
);
655 int cputype
= xlat
[gdbtype
];
657 if (cc
->gdb_stop_before_watchpoint
) {
658 cputype
|= BP_STOP_BEFORE_ACCESS
;
664 static int gdb_breakpoint_insert(target_ulong addr
, target_ulong len
, int type
)
670 return kvm_insert_breakpoint(gdbserver_state
->c_cpu
, addr
, len
, type
);
674 case GDB_BREAKPOINT_SW
:
675 case GDB_BREAKPOINT_HW
:
677 err
= cpu_breakpoint_insert(cpu
, addr
, BP_GDB
, NULL
);
683 #ifndef CONFIG_USER_ONLY
684 case GDB_WATCHPOINT_WRITE
:
685 case GDB_WATCHPOINT_READ
:
686 case GDB_WATCHPOINT_ACCESS
:
688 err
= cpu_watchpoint_insert(cpu
, addr
, len
,
689 xlat_gdb_type(cpu
, type
), NULL
);
701 static int gdb_breakpoint_remove(target_ulong addr
, target_ulong len
, int type
)
707 return kvm_remove_breakpoint(gdbserver_state
->c_cpu
, addr
, len
, type
);
711 case GDB_BREAKPOINT_SW
:
712 case GDB_BREAKPOINT_HW
:
714 err
= cpu_breakpoint_remove(cpu
, addr
, BP_GDB
);
720 #ifndef CONFIG_USER_ONLY
721 case GDB_WATCHPOINT_WRITE
:
722 case GDB_WATCHPOINT_READ
:
723 case GDB_WATCHPOINT_ACCESS
:
725 err
= cpu_watchpoint_remove(cpu
, addr
, len
,
726 xlat_gdb_type(cpu
, type
));
737 static void gdb_breakpoint_remove_all(void)
742 kvm_remove_all_breakpoints(gdbserver_state
->c_cpu
);
747 cpu_breakpoint_remove_all(cpu
, BP_GDB
);
748 #ifndef CONFIG_USER_ONLY
749 cpu_watchpoint_remove_all(cpu
, BP_GDB
);
754 static void gdb_set_cpu_pc(GDBState
*s
, target_ulong pc
)
756 CPUState
*cpu
= s
->c_cpu
;
757 CPUClass
*cc
= CPU_GET_CLASS(cpu
);
759 cpu_synchronize_state(cpu
);
765 static CPUState
*find_cpu(uint32_t thread_id
)
770 if (cpu_index(cpu
) == thread_id
) {
778 static int is_query_packet(const char *p
, const char *query
, char separator
)
780 unsigned int query_len
= strlen(query
);
782 return strncmp(p
, query
, query_len
) == 0 &&
783 (p
[query_len
] == '\0' || p
[query_len
] == separator
);
786 static int gdb_handle_packet(GDBState
*s
, const char *line_buf
)
792 int ch
, reg_size
, type
, res
;
793 char buf
[MAX_PACKET_LENGTH
];
794 uint8_t mem_buf
[MAX_PACKET_LENGTH
];
796 target_ulong addr
, len
;
799 printf("command='%s'\n", line_buf
);
805 /* TODO: Make this return the correct value for user-mode. */
806 snprintf(buf
, sizeof(buf
), "T%02xthread:%02x;", GDB_SIGNAL_TRAP
,
807 cpu_index(s
->c_cpu
));
809 /* Remove all the breakpoints when this query is issued,
810 * because gdb is doing and initial connect and the state
811 * should be cleaned up.
813 gdb_breakpoint_remove_all();
817 addr
= strtoull(p
, (char **)&p
, 16);
818 gdb_set_cpu_pc(s
, addr
);
824 s
->signal
= gdb_signal_to_target (strtoul(p
, (char **)&p
, 16));
830 if (strncmp(p
, "Cont", 4) == 0) {
831 int res_signal
, res_thread
;
835 put_packet(s
, "vCont;c;C;s;S");
850 if (action
== 'C' || action
== 'S') {
851 signal
= gdb_signal_to_target(strtoul(p
, (char **)&p
, 16));
855 } else if (action
!= 'c' && action
!= 's') {
861 thread
= strtoull(p
+1, (char **)&p
, 16);
863 action
= tolower(action
);
864 if (res
== 0 || (res
== 'c' && action
== 's')) {
871 if (res_thread
!= -1 && res_thread
!= 0) {
872 cpu
= find_cpu(res_thread
);
874 put_packet(s
, "E22");
880 cpu_single_step(s
->c_cpu
, sstep_flags
);
882 s
->signal
= res_signal
;
888 goto unknown_command
;
891 #ifdef CONFIG_USER_ONLY
892 /* Kill the target */
893 fprintf(stderr
, "\nQEMU: Terminated via GDBstub\n");
898 gdb_breakpoint_remove_all();
899 gdb_syscall_mode
= GDB_SYS_DISABLED
;
905 addr
= strtoull(p
, (char **)&p
, 16);
906 gdb_set_cpu_pc(s
, addr
);
908 cpu_single_step(s
->c_cpu
, sstep_flags
);
916 ret
= strtoull(p
, (char **)&p
, 16);
919 err
= strtoull(p
, (char **)&p
, 16);
926 if (s
->current_syscall_cb
) {
927 s
->current_syscall_cb(s
->c_cpu
, ret
, err
);
928 s
->current_syscall_cb
= NULL
;
931 put_packet(s
, "T02");
938 cpu_synchronize_state(s
->g_cpu
);
940 for (addr
= 0; addr
< s
->g_cpu
->gdb_num_g_regs
; addr
++) {
941 reg_size
= gdb_read_register(s
->g_cpu
, mem_buf
+ len
, addr
);
944 memtohex(buf
, mem_buf
, len
);
948 cpu_synchronize_state(s
->g_cpu
);
951 hextomem((uint8_t *)registers
, p
, len
);
952 for (addr
= 0; addr
< s
->g_cpu
->gdb_num_g_regs
&& len
> 0; addr
++) {
953 reg_size
= gdb_write_register(s
->g_cpu
, registers
, addr
);
955 registers
+= reg_size
;
960 addr
= strtoull(p
, (char **)&p
, 16);
963 len
= strtoull(p
, NULL
, 16);
964 if (target_memory_rw_debug(s
->g_cpu
, addr
, mem_buf
, len
, false) != 0) {
965 put_packet (s
, "E14");
967 memtohex(buf
, mem_buf
, len
);
972 addr
= strtoull(p
, (char **)&p
, 16);
975 len
= strtoull(p
, (char **)&p
, 16);
978 hextomem(mem_buf
, p
, len
);
979 if (target_memory_rw_debug(s
->g_cpu
, addr
, mem_buf
, len
,
981 put_packet(s
, "E14");
987 /* Older gdb are really dumb, and don't use 'g' if 'p' is avaialable.
988 This works, but can be very slow. Anything new enough to
989 understand XML also knows how to use this properly. */
991 goto unknown_command
;
992 addr
= strtoull(p
, (char **)&p
, 16);
993 reg_size
= gdb_read_register(s
->g_cpu
, mem_buf
, addr
);
995 memtohex(buf
, mem_buf
, reg_size
);
998 put_packet(s
, "E14");
1003 goto unknown_command
;
1004 addr
= strtoull(p
, (char **)&p
, 16);
1007 reg_size
= strlen(p
) / 2;
1008 hextomem(mem_buf
, p
, reg_size
);
1009 gdb_write_register(s
->g_cpu
, mem_buf
, addr
);
1010 put_packet(s
, "OK");
1014 type
= strtoul(p
, (char **)&p
, 16);
1017 addr
= strtoull(p
, (char **)&p
, 16);
1020 len
= strtoull(p
, (char **)&p
, 16);
1022 res
= gdb_breakpoint_insert(addr
, len
, type
);
1024 res
= gdb_breakpoint_remove(addr
, len
, type
);
1026 put_packet(s
, "OK");
1027 else if (res
== -ENOSYS
)
1030 put_packet(s
, "E22");
1034 thread
= strtoull(p
, (char **)&p
, 16);
1035 if (thread
== -1 || thread
== 0) {
1036 put_packet(s
, "OK");
1039 cpu
= find_cpu(thread
);
1041 put_packet(s
, "E22");
1047 put_packet(s
, "OK");
1051 put_packet(s
, "OK");
1054 put_packet(s
, "E22");
1059 thread
= strtoull(p
, (char **)&p
, 16);
1060 cpu
= find_cpu(thread
);
1063 put_packet(s
, "OK");
1065 put_packet(s
, "E22");
1070 /* parse any 'q' packets here */
1071 if (!strcmp(p
,"qemu.sstepbits")) {
1072 /* Query Breakpoint bit definitions */
1073 snprintf(buf
, sizeof(buf
), "ENABLE=%x,NOIRQ=%x,NOTIMER=%x",
1079 } else if (is_query_packet(p
, "qemu.sstep", '=')) {
1080 /* Display or change the sstep_flags */
1083 /* Display current setting */
1084 snprintf(buf
, sizeof(buf
), "0x%x", sstep_flags
);
1089 type
= strtoul(p
, (char **)&p
, 16);
1091 put_packet(s
, "OK");
1093 } else if (strcmp(p
,"C") == 0) {
1094 /* "Current thread" remains vague in the spec, so always return
1095 * the first CPU (gdb returns the first thread). */
1096 put_packet(s
, "QC1");
1098 } else if (strcmp(p
,"fThreadInfo") == 0) {
1099 s
->query_cpu
= first_cpu
;
1100 goto report_cpuinfo
;
1101 } else if (strcmp(p
,"sThreadInfo") == 0) {
1104 snprintf(buf
, sizeof(buf
), "m%x", cpu_index(s
->query_cpu
));
1106 s
->query_cpu
= CPU_NEXT(s
->query_cpu
);
1110 } else if (strncmp(p
,"ThreadExtraInfo,", 16) == 0) {
1111 thread
= strtoull(p
+16, (char **)&p
, 16);
1112 cpu
= find_cpu(thread
);
1114 cpu_synchronize_state(cpu
);
1115 len
= snprintf((char *)mem_buf
, sizeof(mem_buf
),
1116 "CPU#%d [%s]", cpu
->cpu_index
,
1117 cpu
->halted
? "halted " : "running");
1118 memtohex(buf
, mem_buf
, len
);
1123 #ifdef CONFIG_USER_ONLY
1124 else if (strcmp(p
, "Offsets") == 0) {
1125 TaskState
*ts
= s
->c_cpu
->opaque
;
1127 snprintf(buf
, sizeof(buf
),
1128 "Text=" TARGET_ABI_FMT_lx
";Data=" TARGET_ABI_FMT_lx
1129 ";Bss=" TARGET_ABI_FMT_lx
,
1130 ts
->info
->code_offset
,
1131 ts
->info
->data_offset
,
1132 ts
->info
->data_offset
);
1136 #else /* !CONFIG_USER_ONLY */
1137 else if (strncmp(p
, "Rcmd,", 5) == 0) {
1138 int len
= strlen(p
+ 5);
1140 if ((len
% 2) != 0) {
1141 put_packet(s
, "E01");
1144 hextomem(mem_buf
, p
+ 5, len
);
1147 qemu_chr_be_write(s
->mon_chr
, mem_buf
, len
);
1148 put_packet(s
, "OK");
1151 #endif /* !CONFIG_USER_ONLY */
1152 if (is_query_packet(p
, "Supported", ':')) {
1153 snprintf(buf
, sizeof(buf
), "PacketSize=%x", MAX_PACKET_LENGTH
);
1154 cc
= CPU_GET_CLASS(first_cpu
);
1155 if (cc
->gdb_core_xml_file
!= NULL
) {
1156 pstrcat(buf
, sizeof(buf
), ";qXfer:features:read+");
1161 if (strncmp(p
, "Xfer:features:read:", 19) == 0) {
1163 target_ulong total_len
;
1165 cc
= CPU_GET_CLASS(first_cpu
);
1166 if (cc
->gdb_core_xml_file
== NULL
) {
1167 goto unknown_command
;
1172 xml
= get_feature_xml(p
, &p
, cc
);
1174 snprintf(buf
, sizeof(buf
), "E00");
1181 addr
= strtoul(p
, (char **)&p
, 16);
1184 len
= strtoul(p
, (char **)&p
, 16);
1186 total_len
= strlen(xml
);
1187 if (addr
> total_len
) {
1188 snprintf(buf
, sizeof(buf
), "E00");
1192 if (len
> (MAX_PACKET_LENGTH
- 5) / 2)
1193 len
= (MAX_PACKET_LENGTH
- 5) / 2;
1194 if (len
< total_len
- addr
) {
1196 len
= memtox(buf
+ 1, xml
+ addr
, len
);
1199 len
= memtox(buf
+ 1, xml
+ addr
, total_len
- addr
);
1201 put_packet_binary(s
, buf
, len
+ 1);
1204 if (is_query_packet(p
, "Attached", ':')) {
1205 put_packet(s
, GDB_ATTACHED
);
1208 /* Unrecognised 'q' command. */
1209 goto unknown_command
;
1213 /* put empty packet */
1221 void gdb_set_stop_cpu(CPUState
*cpu
)
1223 gdbserver_state
->c_cpu
= cpu
;
1224 gdbserver_state
->g_cpu
= cpu
;
1227 #ifndef CONFIG_USER_ONLY
1228 static void gdb_vm_state_change(void *opaque
, int running
, RunState state
)
1230 GDBState
*s
= gdbserver_state
;
1231 CPUArchState
*env
= s
->c_cpu
->env_ptr
;
1232 CPUState
*cpu
= s
->c_cpu
;
1237 if (running
|| s
->state
== RS_INACTIVE
) {
1240 /* Is there a GDB syscall waiting to be sent? */
1241 if (s
->current_syscall_cb
) {
1242 put_packet(s
, s
->syscall_buf
);
1246 case RUN_STATE_DEBUG
:
1247 if (cpu
->watchpoint_hit
) {
1248 switch (cpu
->watchpoint_hit
->flags
& BP_MEM_ACCESS
) {
1259 snprintf(buf
, sizeof(buf
),
1260 "T%02xthread:%02x;%swatch:" TARGET_FMT_lx
";",
1261 GDB_SIGNAL_TRAP
, cpu_index(cpu
), type
,
1262 (target_ulong
)cpu
->watchpoint_hit
->vaddr
);
1263 cpu
->watchpoint_hit
= NULL
;
1267 ret
= GDB_SIGNAL_TRAP
;
1269 case RUN_STATE_PAUSED
:
1270 ret
= GDB_SIGNAL_INT
;
1272 case RUN_STATE_SHUTDOWN
:
1273 ret
= GDB_SIGNAL_QUIT
;
1275 case RUN_STATE_IO_ERROR
:
1276 ret
= GDB_SIGNAL_IO
;
1278 case RUN_STATE_WATCHDOG
:
1279 ret
= GDB_SIGNAL_ALRM
;
1281 case RUN_STATE_INTERNAL_ERROR
:
1282 ret
= GDB_SIGNAL_ABRT
;
1284 case RUN_STATE_SAVE_VM
:
1285 case RUN_STATE_RESTORE_VM
:
1287 case RUN_STATE_FINISH_MIGRATE
:
1288 ret
= GDB_SIGNAL_XCPU
;
1291 ret
= GDB_SIGNAL_UNKNOWN
;
1294 snprintf(buf
, sizeof(buf
), "T%02xthread:%02x;", ret
, cpu_index(cpu
));
1299 /* disable single step if it was enabled */
1300 cpu_single_step(cpu
, 0);
1304 /* Send a gdb syscall request.
1305 This accepts limited printf-style format specifiers, specifically:
1306 %x - target_ulong argument printed in hex.
1307 %lx - 64-bit argument printed in hex.
1308 %s - string pointer (target_ulong) and length (int) pair. */
1309 void gdb_do_syscall(gdb_syscall_complete_cb cb
, const char *fmt
, ...)
1318 s
= gdbserver_state
;
1321 s
->current_syscall_cb
= cb
;
1322 #ifndef CONFIG_USER_ONLY
1323 vm_stop(RUN_STATE_DEBUG
);
1327 p_end
= &s
->syscall_buf
[sizeof(s
->syscall_buf
)];
1334 addr
= va_arg(va
, target_ulong
);
1335 p
+= snprintf(p
, p_end
- p
, TARGET_FMT_lx
, addr
);
1338 if (*(fmt
++) != 'x')
1340 i64
= va_arg(va
, uint64_t);
1341 p
+= snprintf(p
, p_end
- p
, "%" PRIx64
, i64
);
1344 addr
= va_arg(va
, target_ulong
);
1345 p
+= snprintf(p
, p_end
- p
, TARGET_FMT_lx
"/%x",
1346 addr
, va_arg(va
, int));
1350 fprintf(stderr
, "gdbstub: Bad syscall format string '%s'\n",
1360 #ifdef CONFIG_USER_ONLY
1361 put_packet(s
, s
->syscall_buf
);
1362 gdb_handlesig(s
->c_cpu
, 0);
1364 /* In this case wait to send the syscall packet until notification that
1365 the CPU has stopped. This must be done because if the packet is sent
1366 now the reply from the syscall request could be received while the CPU
1367 is still in the running state, which can cause packets to be dropped
1368 and state transition 'T' packets to be sent while the syscall is still
1374 static void gdb_read_byte(GDBState
*s
, int ch
)
1379 #ifndef CONFIG_USER_ONLY
1380 if (s
->last_packet_len
) {
1381 /* Waiting for a response to the last packet. If we see the start
1382 of a new command then abandon the previous response. */
1385 printf("Got NACK, retransmitting\n");
1387 put_buffer(s
, (uint8_t *)s
->last_packet
, s
->last_packet_len
);
1391 printf("Got ACK\n");
1393 printf("Got '%c' when expecting ACK/NACK\n", ch
);
1395 if (ch
== '+' || ch
== '$')
1396 s
->last_packet_len
= 0;
1400 if (runstate_is_running()) {
1401 /* when the CPU is running, we cannot do anything except stop
1402 it when receiving a char */
1403 vm_stop(RUN_STATE_PAUSED
);
1410 s
->line_buf_index
= 0;
1411 s
->state
= RS_GETLINE
;
1416 s
->state
= RS_CHKSUM1
;
1417 } else if (s
->line_buf_index
>= sizeof(s
->line_buf
) - 1) {
1420 s
->line_buf
[s
->line_buf_index
++] = ch
;
1424 s
->line_buf
[s
->line_buf_index
] = '\0';
1425 s
->line_csum
= fromhex(ch
) << 4;
1426 s
->state
= RS_CHKSUM2
;
1429 s
->line_csum
|= fromhex(ch
);
1431 for(i
= 0; i
< s
->line_buf_index
; i
++) {
1432 csum
+= s
->line_buf
[i
];
1434 if (s
->line_csum
!= (csum
& 0xff)) {
1436 put_buffer(s
, &reply
, 1);
1440 put_buffer(s
, &reply
, 1);
1441 s
->state
= gdb_handle_packet(s
, s
->line_buf
);
1450 /* Tell the remote gdb that the process has exited. */
1451 void gdb_exit(CPUArchState
*env
, int code
)
1456 s
= gdbserver_state
;
1460 #ifdef CONFIG_USER_ONLY
1461 if (gdbserver_fd
< 0 || s
->fd
< 0) {
1470 snprintf(buf
, sizeof(buf
), "W%02x", (uint8_t)code
);
1473 #ifndef CONFIG_USER_ONLY
1474 qemu_chr_delete(s
->chr
);
1478 #ifdef CONFIG_USER_ONLY
1484 s
= gdbserver_state
;
1486 if (gdbserver_fd
< 0 || s
->fd
< 0)
1493 gdb_handlesig(CPUState
*cpu
, int sig
)
1495 CPUArchState
*env
= cpu
->env_ptr
;
1500 s
= gdbserver_state
;
1501 if (gdbserver_fd
< 0 || s
->fd
< 0) {
1505 /* disable single step if it was enabled */
1506 cpu_single_step(cpu
, 0);
1510 snprintf(buf
, sizeof(buf
), "S%02x", target_signal_to_gdb(sig
));
1513 /* put_packet() might have detected that the peer terminated the
1521 s
->running_state
= 0;
1522 while (s
->running_state
== 0) {
1523 n
= read(s
->fd
, buf
, 256);
1527 for (i
= 0; i
< n
; i
++) {
1528 gdb_read_byte(s
, buf
[i
]);
1530 } else if (n
== 0 || errno
!= EAGAIN
) {
1531 /* XXX: Connection closed. Should probably wait for another
1532 connection before continuing. */
1541 /* Tell the remote gdb that the process has exited due to SIG. */
1542 void gdb_signalled(CPUArchState
*env
, int sig
)
1547 s
= gdbserver_state
;
1548 if (gdbserver_fd
< 0 || s
->fd
< 0) {
1552 snprintf(buf
, sizeof(buf
), "X%02x", target_signal_to_gdb(sig
));
1556 static void gdb_accept(void)
1559 struct sockaddr_in sockaddr
;
1564 len
= sizeof(sockaddr
);
1565 fd
= accept(gdbserver_fd
, (struct sockaddr
*)&sockaddr
, &len
);
1566 if (fd
< 0 && errno
!= EINTR
) {
1569 } else if (fd
>= 0) {
1571 fcntl(fd
, F_SETFD
, FD_CLOEXEC
);
1577 /* set short latency */
1578 socket_set_nodelay(fd
);
1580 s
= g_malloc0(sizeof(GDBState
));
1581 s
->c_cpu
= first_cpu
;
1582 s
->g_cpu
= first_cpu
;
1584 gdb_has_xml
= false;
1586 gdbserver_state
= s
;
1588 fcntl(fd
, F_SETFL
, O_NONBLOCK
);
1591 static int gdbserver_open(int port
)
1593 struct sockaddr_in sockaddr
;
1596 fd
= socket(PF_INET
, SOCK_STREAM
, 0);
1602 fcntl(fd
, F_SETFD
, FD_CLOEXEC
);
1605 socket_set_fast_reuse(fd
);
1607 sockaddr
.sin_family
= AF_INET
;
1608 sockaddr
.sin_port
= htons(port
);
1609 sockaddr
.sin_addr
.s_addr
= 0;
1610 ret
= bind(fd
, (struct sockaddr
*)&sockaddr
, sizeof(sockaddr
));
1616 ret
= listen(fd
, 0);
1625 int gdbserver_start(int port
)
1627 gdbserver_fd
= gdbserver_open(port
);
1628 if (gdbserver_fd
< 0)
1630 /* accept connections */
1635 /* Disable gdb stub for child processes. */
1636 void gdbserver_fork(CPUArchState
*env
)
1638 CPUState
*cpu
= ENV_GET_CPU(env
);
1639 GDBState
*s
= gdbserver_state
;
1641 if (gdbserver_fd
< 0 || s
->fd
< 0) {
1646 cpu_breakpoint_remove_all(cpu
, BP_GDB
);
1647 cpu_watchpoint_remove_all(cpu
, BP_GDB
);
1650 static int gdb_chr_can_receive(void *opaque
)
1652 /* We can handle an arbitrarily large amount of data.
1653 Pick the maximum packet size, which is as good as anything. */
1654 return MAX_PACKET_LENGTH
;
1657 static void gdb_chr_receive(void *opaque
, const uint8_t *buf
, int size
)
1661 for (i
= 0; i
< size
; i
++) {
1662 gdb_read_byte(gdbserver_state
, buf
[i
]);
1666 static void gdb_chr_event(void *opaque
, int event
)
1669 case CHR_EVENT_OPENED
:
1670 vm_stop(RUN_STATE_PAUSED
);
1671 gdb_has_xml
= false;
1678 static void gdb_monitor_output(GDBState
*s
, const char *msg
, int len
)
1680 char buf
[MAX_PACKET_LENGTH
];
1683 if (len
> (MAX_PACKET_LENGTH
/2) - 1)
1684 len
= (MAX_PACKET_LENGTH
/2) - 1;
1685 memtohex(buf
+ 1, (uint8_t *)msg
, len
);
1689 static int gdb_monitor_write(CharDriverState
*chr
, const uint8_t *buf
, int len
)
1691 const char *p
= (const char *)buf
;
1694 max_sz
= (sizeof(gdbserver_state
->last_packet
) - 2) / 2;
1696 if (len
<= max_sz
) {
1697 gdb_monitor_output(gdbserver_state
, p
, len
);
1700 gdb_monitor_output(gdbserver_state
, p
, max_sz
);
1708 static void gdb_sigterm_handler(int signal
)
1710 if (runstate_is_running()) {
1711 vm_stop(RUN_STATE_PAUSED
);
1716 int gdbserver_start(const char *device
)
1719 char gdbstub_device_name
[128];
1720 CharDriverState
*chr
= NULL
;
1721 CharDriverState
*mon_chr
;
1725 if (strcmp(device
, "none") != 0) {
1726 if (strstart(device
, "tcp:", NULL
)) {
1727 /* enforce required TCP attributes */
1728 snprintf(gdbstub_device_name
, sizeof(gdbstub_device_name
),
1729 "%s,nowait,nodelay,server", device
);
1730 device
= gdbstub_device_name
;
1733 else if (strcmp(device
, "stdio") == 0) {
1734 struct sigaction act
;
1736 memset(&act
, 0, sizeof(act
));
1737 act
.sa_handler
= gdb_sigterm_handler
;
1738 sigaction(SIGINT
, &act
, NULL
);
1741 chr
= qemu_chr_new("gdb", device
, NULL
);
1745 qemu_chr_fe_claim_no_fail(chr
);
1746 qemu_chr_add_handlers(chr
, gdb_chr_can_receive
, gdb_chr_receive
,
1747 gdb_chr_event
, NULL
);
1750 s
= gdbserver_state
;
1752 s
= g_malloc0(sizeof(GDBState
));
1753 gdbserver_state
= s
;
1755 qemu_add_vm_change_state_handler(gdb_vm_state_change
, NULL
);
1757 /* Initialize a monitor terminal for gdb */
1758 mon_chr
= qemu_chr_alloc();
1759 mon_chr
->chr_write
= gdb_monitor_write
;
1760 monitor_init(mon_chr
, 0);
1763 qemu_chr_delete(s
->chr
);
1764 mon_chr
= s
->mon_chr
;
1765 memset(s
, 0, sizeof(GDBState
));
1767 s
->c_cpu
= first_cpu
;
1768 s
->g_cpu
= first_cpu
;
1770 s
->state
= chr
? RS_IDLE
: RS_INACTIVE
;
1771 s
->mon_chr
= mon_chr
;
1772 s
->current_syscall_cb
= NULL
;