target-xtensa: avoid double-stopping at breakpoints
[qemu.git] / gdbstub.c
blob1af25a6fe6332f89cdbe57b1a2b24e3f2961ff95
1 /*
2 * gdb server stub
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 "config.h"
20 #include "qemu-common.h"
21 #ifdef CONFIG_USER_ONLY
22 #include <stdlib.h>
23 #include <stdio.h>
24 #include <stdarg.h>
25 #include <string.h>
26 #include <errno.h>
27 #include <unistd.h>
28 #include <fcntl.h>
30 #include "qemu.h"
31 #else
32 #include "monitor/monitor.h"
33 #include "sysemu/char.h"
34 #include "sysemu/sysemu.h"
35 #include "exec/gdbstub.h"
36 #endif
38 #define MAX_PACKET_LENGTH 4096
40 #include "cpu.h"
41 #include "qemu/sockets.h"
42 #include "sysemu/kvm.h"
44 static inline int target_memory_rw_debug(CPUState *cpu, target_ulong addr,
45 uint8_t *buf, int len, bool is_write)
47 CPUClass *cc = CPU_GET_CLASS(cpu);
49 if (cc->memory_rw_debug) {
50 return cc->memory_rw_debug(cpu, addr, buf, len, is_write);
52 return cpu_memory_rw_debug(cpu, addr, buf, len, is_write);
55 enum {
56 GDB_SIGNAL_0 = 0,
57 GDB_SIGNAL_INT = 2,
58 GDB_SIGNAL_QUIT = 3,
59 GDB_SIGNAL_TRAP = 5,
60 GDB_SIGNAL_ABRT = 6,
61 GDB_SIGNAL_ALRM = 14,
62 GDB_SIGNAL_IO = 23,
63 GDB_SIGNAL_XCPU = 24,
64 GDB_SIGNAL_UNKNOWN = 143
67 #ifdef CONFIG_USER_ONLY
69 /* Map target signal numbers to GDB protocol signal numbers and vice
70 * versa. For user emulation's currently supported systems, we can
71 * assume most signals are defined.
74 static int gdb_signal_table[] = {
76 TARGET_SIGHUP,
77 TARGET_SIGINT,
78 TARGET_SIGQUIT,
79 TARGET_SIGILL,
80 TARGET_SIGTRAP,
81 TARGET_SIGABRT,
82 -1, /* SIGEMT */
83 TARGET_SIGFPE,
84 TARGET_SIGKILL,
85 TARGET_SIGBUS,
86 TARGET_SIGSEGV,
87 TARGET_SIGSYS,
88 TARGET_SIGPIPE,
89 TARGET_SIGALRM,
90 TARGET_SIGTERM,
91 TARGET_SIGURG,
92 TARGET_SIGSTOP,
93 TARGET_SIGTSTP,
94 TARGET_SIGCONT,
95 TARGET_SIGCHLD,
96 TARGET_SIGTTIN,
97 TARGET_SIGTTOU,
98 TARGET_SIGIO,
99 TARGET_SIGXCPU,
100 TARGET_SIGXFSZ,
101 TARGET_SIGVTALRM,
102 TARGET_SIGPROF,
103 TARGET_SIGWINCH,
104 -1, /* SIGLOST */
105 TARGET_SIGUSR1,
106 TARGET_SIGUSR2,
107 #ifdef TARGET_SIGPWR
108 TARGET_SIGPWR,
109 #else
111 #endif
112 -1, /* SIGPOLL */
124 #ifdef __SIGRTMIN
125 __SIGRTMIN + 1,
126 __SIGRTMIN + 2,
127 __SIGRTMIN + 3,
128 __SIGRTMIN + 4,
129 __SIGRTMIN + 5,
130 __SIGRTMIN + 6,
131 __SIGRTMIN + 7,
132 __SIGRTMIN + 8,
133 __SIGRTMIN + 9,
134 __SIGRTMIN + 10,
135 __SIGRTMIN + 11,
136 __SIGRTMIN + 12,
137 __SIGRTMIN + 13,
138 __SIGRTMIN + 14,
139 __SIGRTMIN + 15,
140 __SIGRTMIN + 16,
141 __SIGRTMIN + 17,
142 __SIGRTMIN + 18,
143 __SIGRTMIN + 19,
144 __SIGRTMIN + 20,
145 __SIGRTMIN + 21,
146 __SIGRTMIN + 22,
147 __SIGRTMIN + 23,
148 __SIGRTMIN + 24,
149 __SIGRTMIN + 25,
150 __SIGRTMIN + 26,
151 __SIGRTMIN + 27,
152 __SIGRTMIN + 28,
153 __SIGRTMIN + 29,
154 __SIGRTMIN + 30,
155 __SIGRTMIN + 31,
156 -1, /* SIGCANCEL */
157 __SIGRTMIN,
158 __SIGRTMIN + 32,
159 __SIGRTMIN + 33,
160 __SIGRTMIN + 34,
161 __SIGRTMIN + 35,
162 __SIGRTMIN + 36,
163 __SIGRTMIN + 37,
164 __SIGRTMIN + 38,
165 __SIGRTMIN + 39,
166 __SIGRTMIN + 40,
167 __SIGRTMIN + 41,
168 __SIGRTMIN + 42,
169 __SIGRTMIN + 43,
170 __SIGRTMIN + 44,
171 __SIGRTMIN + 45,
172 __SIGRTMIN + 46,
173 __SIGRTMIN + 47,
174 __SIGRTMIN + 48,
175 __SIGRTMIN + 49,
176 __SIGRTMIN + 50,
177 __SIGRTMIN + 51,
178 __SIGRTMIN + 52,
179 __SIGRTMIN + 53,
180 __SIGRTMIN + 54,
181 __SIGRTMIN + 55,
182 __SIGRTMIN + 56,
183 __SIGRTMIN + 57,
184 __SIGRTMIN + 58,
185 __SIGRTMIN + 59,
186 __SIGRTMIN + 60,
187 __SIGRTMIN + 61,
188 __SIGRTMIN + 62,
189 __SIGRTMIN + 63,
190 __SIGRTMIN + 64,
191 __SIGRTMIN + 65,
192 __SIGRTMIN + 66,
193 __SIGRTMIN + 67,
194 __SIGRTMIN + 68,
195 __SIGRTMIN + 69,
196 __SIGRTMIN + 70,
197 __SIGRTMIN + 71,
198 __SIGRTMIN + 72,
199 __SIGRTMIN + 73,
200 __SIGRTMIN + 74,
201 __SIGRTMIN + 75,
202 __SIGRTMIN + 76,
203 __SIGRTMIN + 77,
204 __SIGRTMIN + 78,
205 __SIGRTMIN + 79,
206 __SIGRTMIN + 80,
207 __SIGRTMIN + 81,
208 __SIGRTMIN + 82,
209 __SIGRTMIN + 83,
210 __SIGRTMIN + 84,
211 __SIGRTMIN + 85,
212 __SIGRTMIN + 86,
213 __SIGRTMIN + 87,
214 __SIGRTMIN + 88,
215 __SIGRTMIN + 89,
216 __SIGRTMIN + 90,
217 __SIGRTMIN + 91,
218 __SIGRTMIN + 92,
219 __SIGRTMIN + 93,
220 __SIGRTMIN + 94,
221 __SIGRTMIN + 95,
222 -1, /* SIGINFO */
223 -1, /* UNKNOWN */
224 -1, /* DEFAULT */
231 #endif
233 #else
234 /* In system mode we only need SIGINT and SIGTRAP; other signals
235 are not yet supported. */
237 enum {
238 TARGET_SIGINT = 2,
239 TARGET_SIGTRAP = 5
242 static int gdb_signal_table[] = {
245 TARGET_SIGINT,
248 TARGET_SIGTRAP
250 #endif
252 #ifdef CONFIG_USER_ONLY
253 static int target_signal_to_gdb (int sig)
255 int i;
256 for (i = 0; i < ARRAY_SIZE (gdb_signal_table); i++)
257 if (gdb_signal_table[i] == sig)
258 return i;
259 return GDB_SIGNAL_UNKNOWN;
261 #endif
263 static int gdb_signal_to_target (int sig)
265 if (sig < ARRAY_SIZE (gdb_signal_table))
266 return gdb_signal_table[sig];
267 else
268 return -1;
271 //#define DEBUG_GDB
273 typedef struct GDBRegisterState {
274 int base_reg;
275 int num_regs;
276 gdb_reg_cb get_reg;
277 gdb_reg_cb set_reg;
278 const char *xml;
279 struct GDBRegisterState *next;
280 } GDBRegisterState;
282 enum RSState {
283 RS_INACTIVE,
284 RS_IDLE,
285 RS_GETLINE,
286 RS_CHKSUM1,
287 RS_CHKSUM2,
289 typedef struct GDBState {
290 CPUState *c_cpu; /* current CPU for step/continue ops */
291 CPUState *g_cpu; /* current CPU for other ops */
292 CPUState *query_cpu; /* for q{f|s}ThreadInfo */
293 enum RSState state; /* parsing state */
294 char line_buf[MAX_PACKET_LENGTH];
295 int line_buf_index;
296 int line_csum;
297 uint8_t last_packet[MAX_PACKET_LENGTH + 4];
298 int last_packet_len;
299 int signal;
300 #ifdef CONFIG_USER_ONLY
301 int fd;
302 int running_state;
303 #else
304 CharDriverState *chr;
305 CharDriverState *mon_chr;
306 #endif
307 char syscall_buf[256];
308 gdb_syscall_complete_cb current_syscall_cb;
309 } GDBState;
311 /* By default use no IRQs and no timers while single stepping so as to
312 * make single stepping like an ICE HW step.
314 static int sstep_flags = SSTEP_ENABLE|SSTEP_NOIRQ|SSTEP_NOTIMER;
316 static GDBState *gdbserver_state;
318 bool gdb_has_xml;
320 #ifdef CONFIG_USER_ONLY
321 /* XXX: This is not thread safe. Do we care? */
322 static int gdbserver_fd = -1;
324 static int get_char(GDBState *s)
326 uint8_t ch;
327 int ret;
329 for(;;) {
330 ret = qemu_recv(s->fd, &ch, 1, 0);
331 if (ret < 0) {
332 if (errno == ECONNRESET)
333 s->fd = -1;
334 if (errno != EINTR && errno != EAGAIN)
335 return -1;
336 } else if (ret == 0) {
337 close(s->fd);
338 s->fd = -1;
339 return -1;
340 } else {
341 break;
344 return ch;
346 #endif
348 static enum {
349 GDB_SYS_UNKNOWN,
350 GDB_SYS_ENABLED,
351 GDB_SYS_DISABLED,
352 } gdb_syscall_mode;
354 /* If gdb is connected when the first semihosting syscall occurs then use
355 remote gdb syscalls. Otherwise use native file IO. */
356 int use_gdb_syscalls(void)
358 if (gdb_syscall_mode == GDB_SYS_UNKNOWN) {
359 gdb_syscall_mode = (gdbserver_state ? GDB_SYS_ENABLED
360 : GDB_SYS_DISABLED);
362 return gdb_syscall_mode == GDB_SYS_ENABLED;
365 /* Resume execution. */
366 static inline void gdb_continue(GDBState *s)
368 #ifdef CONFIG_USER_ONLY
369 s->running_state = 1;
370 #else
371 if (runstate_check(RUN_STATE_GUEST_PANICKED)) {
372 runstate_set(RUN_STATE_DEBUG);
374 if (!runstate_needs_reset()) {
375 vm_start();
377 #endif
380 static void put_buffer(GDBState *s, const uint8_t *buf, int len)
382 #ifdef CONFIG_USER_ONLY
383 int ret;
385 while (len > 0) {
386 ret = send(s->fd, buf, len, 0);
387 if (ret < 0) {
388 if (errno != EINTR && errno != EAGAIN)
389 return;
390 } else {
391 buf += ret;
392 len -= ret;
395 #else
396 qemu_chr_fe_write(s->chr, buf, len);
397 #endif
400 static inline int fromhex(int v)
402 if (v >= '0' && v <= '9')
403 return v - '0';
404 else if (v >= 'A' && v <= 'F')
405 return v - 'A' + 10;
406 else if (v >= 'a' && v <= 'f')
407 return v - 'a' + 10;
408 else
409 return 0;
412 static inline int tohex(int v)
414 if (v < 10)
415 return v + '0';
416 else
417 return v - 10 + 'a';
420 static void memtohex(char *buf, const uint8_t *mem, int len)
422 int i, c;
423 char *q;
424 q = buf;
425 for(i = 0; i < len; i++) {
426 c = mem[i];
427 *q++ = tohex(c >> 4);
428 *q++ = tohex(c & 0xf);
430 *q = '\0';
433 static void hextomem(uint8_t *mem, const char *buf, int len)
435 int i;
437 for(i = 0; i < len; i++) {
438 mem[i] = (fromhex(buf[0]) << 4) | fromhex(buf[1]);
439 buf += 2;
443 /* return -1 if error, 0 if OK */
444 static int put_packet_binary(GDBState *s, const char *buf, int len)
446 int csum, i;
447 uint8_t *p;
449 for(;;) {
450 p = s->last_packet;
451 *(p++) = '$';
452 memcpy(p, buf, len);
453 p += len;
454 csum = 0;
455 for(i = 0; i < len; i++) {
456 csum += buf[i];
458 *(p++) = '#';
459 *(p++) = tohex((csum >> 4) & 0xf);
460 *(p++) = tohex((csum) & 0xf);
462 s->last_packet_len = p - s->last_packet;
463 put_buffer(s, (uint8_t *)s->last_packet, s->last_packet_len);
465 #ifdef CONFIG_USER_ONLY
466 i = get_char(s);
467 if (i < 0)
468 return -1;
469 if (i == '+')
470 break;
471 #else
472 break;
473 #endif
475 return 0;
478 /* return -1 if error, 0 if OK */
479 static int put_packet(GDBState *s, const char *buf)
481 #ifdef DEBUG_GDB
482 printf("reply='%s'\n", buf);
483 #endif
485 return put_packet_binary(s, buf, strlen(buf));
488 /* Encode data using the encoding for 'x' packets. */
489 static int memtox(char *buf, const char *mem, int len)
491 char *p = buf;
492 char c;
494 while (len--) {
495 c = *(mem++);
496 switch (c) {
497 case '#': case '$': case '*': case '}':
498 *(p++) = '}';
499 *(p++) = c ^ 0x20;
500 break;
501 default:
502 *(p++) = c;
503 break;
506 return p - buf;
509 static const char *get_feature_xml(const char *p, const char **newp,
510 CPUClass *cc)
512 size_t len;
513 int i;
514 const char *name;
515 static char target_xml[1024];
517 len = 0;
518 while (p[len] && p[len] != ':')
519 len++;
520 *newp = p + len;
522 name = NULL;
523 if (strncmp(p, "target.xml", len) == 0) {
524 /* Generate the XML description for this CPU. */
525 if (!target_xml[0]) {
526 GDBRegisterState *r;
527 CPUState *cpu = first_cpu;
529 snprintf(target_xml, sizeof(target_xml),
530 "<?xml version=\"1.0\"?>"
531 "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">"
532 "<target>"
533 "<xi:include href=\"%s\"/>",
534 cc->gdb_core_xml_file);
536 for (r = cpu->gdb_regs; r; r = r->next) {
537 pstrcat(target_xml, sizeof(target_xml), "<xi:include href=\"");
538 pstrcat(target_xml, sizeof(target_xml), r->xml);
539 pstrcat(target_xml, sizeof(target_xml), "\"/>");
541 pstrcat(target_xml, sizeof(target_xml), "</target>");
543 return target_xml;
545 for (i = 0; ; i++) {
546 name = xml_builtin[i][0];
547 if (!name || (strncmp(name, p, len) == 0 && strlen(name) == len))
548 break;
550 return name ? xml_builtin[i][1] : NULL;
553 static int gdb_read_register(CPUState *cpu, uint8_t *mem_buf, int reg)
555 CPUClass *cc = CPU_GET_CLASS(cpu);
556 CPUArchState *env = cpu->env_ptr;
557 GDBRegisterState *r;
559 if (reg < cc->gdb_num_core_regs) {
560 return cc->gdb_read_register(cpu, mem_buf, reg);
563 for (r = cpu->gdb_regs; r; r = r->next) {
564 if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
565 return r->get_reg(env, mem_buf, reg - r->base_reg);
568 return 0;
571 static int gdb_write_register(CPUState *cpu, uint8_t *mem_buf, int reg)
573 CPUClass *cc = CPU_GET_CLASS(cpu);
574 CPUArchState *env = cpu->env_ptr;
575 GDBRegisterState *r;
577 if (reg < cc->gdb_num_core_regs) {
578 return cc->gdb_write_register(cpu, mem_buf, reg);
581 for (r = cpu->gdb_regs; r; r = r->next) {
582 if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
583 return r->set_reg(env, mem_buf, reg - r->base_reg);
586 return 0;
589 /* Register a supplemental set of CPU registers. If g_pos is nonzero it
590 specifies the first register number and these registers are included in
591 a standard "g" packet. Direction is relative to gdb, i.e. get_reg is
592 gdb reading a CPU register, and set_reg is gdb modifying a CPU register.
595 void gdb_register_coprocessor(CPUState *cpu,
596 gdb_reg_cb get_reg, gdb_reg_cb set_reg,
597 int num_regs, const char *xml, int g_pos)
599 GDBRegisterState *s;
600 GDBRegisterState **p;
602 p = &cpu->gdb_regs;
603 while (*p) {
604 /* Check for duplicates. */
605 if (strcmp((*p)->xml, xml) == 0)
606 return;
607 p = &(*p)->next;
610 s = g_new0(GDBRegisterState, 1);
611 s->base_reg = cpu->gdb_num_regs;
612 s->num_regs = num_regs;
613 s->get_reg = get_reg;
614 s->set_reg = set_reg;
615 s->xml = xml;
617 /* Add to end of list. */
618 cpu->gdb_num_regs += num_regs;
619 *p = s;
620 if (g_pos) {
621 if (g_pos != s->base_reg) {
622 fprintf(stderr, "Error: Bad gdb register numbering for '%s'\n"
623 "Expected %d got %d\n", xml, g_pos, s->base_reg);
628 #ifndef CONFIG_USER_ONLY
629 static const int xlat_gdb_type[] = {
630 [GDB_WATCHPOINT_WRITE] = BP_GDB | BP_MEM_WRITE,
631 [GDB_WATCHPOINT_READ] = BP_GDB | BP_MEM_READ,
632 [GDB_WATCHPOINT_ACCESS] = BP_GDB | BP_MEM_ACCESS,
634 #endif
636 static int gdb_breakpoint_insert(target_ulong addr, target_ulong len, int type)
638 CPUState *cpu;
639 CPUArchState *env;
640 int err = 0;
642 if (kvm_enabled()) {
643 return kvm_insert_breakpoint(gdbserver_state->c_cpu, addr, len, type);
646 switch (type) {
647 case GDB_BREAKPOINT_SW:
648 case GDB_BREAKPOINT_HW:
649 for (cpu = first_cpu; cpu != NULL; cpu = cpu->next_cpu) {
650 env = cpu->env_ptr;
651 err = cpu_breakpoint_insert(env, addr, BP_GDB, NULL);
652 if (err)
653 break;
655 return err;
656 #ifndef CONFIG_USER_ONLY
657 case GDB_WATCHPOINT_WRITE:
658 case GDB_WATCHPOINT_READ:
659 case GDB_WATCHPOINT_ACCESS:
660 for (cpu = first_cpu; cpu != NULL; cpu = cpu->next_cpu) {
661 env = cpu->env_ptr;
662 err = cpu_watchpoint_insert(env, addr, len, xlat_gdb_type[type],
663 NULL);
664 if (err)
665 break;
667 return err;
668 #endif
669 default:
670 return -ENOSYS;
674 static int gdb_breakpoint_remove(target_ulong addr, target_ulong len, int type)
676 CPUState *cpu;
677 CPUArchState *env;
678 int err = 0;
680 if (kvm_enabled()) {
681 return kvm_remove_breakpoint(gdbserver_state->c_cpu, addr, len, type);
684 switch (type) {
685 case GDB_BREAKPOINT_SW:
686 case GDB_BREAKPOINT_HW:
687 for (cpu = first_cpu; cpu != NULL; cpu = cpu->next_cpu) {
688 env = cpu->env_ptr;
689 err = cpu_breakpoint_remove(env, addr, BP_GDB);
690 if (err)
691 break;
693 return err;
694 #ifndef CONFIG_USER_ONLY
695 case GDB_WATCHPOINT_WRITE:
696 case GDB_WATCHPOINT_READ:
697 case GDB_WATCHPOINT_ACCESS:
698 for (cpu = first_cpu; cpu != NULL; cpu = cpu->next_cpu) {
699 env = cpu->env_ptr;
700 err = cpu_watchpoint_remove(env, addr, len, xlat_gdb_type[type]);
701 if (err)
702 break;
704 return err;
705 #endif
706 default:
707 return -ENOSYS;
711 static void gdb_breakpoint_remove_all(void)
713 CPUState *cpu;
714 CPUArchState *env;
716 if (kvm_enabled()) {
717 kvm_remove_all_breakpoints(gdbserver_state->c_cpu);
718 return;
721 for (cpu = first_cpu; cpu != NULL; cpu = cpu->next_cpu) {
722 env = cpu->env_ptr;
723 cpu_breakpoint_remove_all(env, BP_GDB);
724 #ifndef CONFIG_USER_ONLY
725 cpu_watchpoint_remove_all(env, BP_GDB);
726 #endif
730 static void gdb_set_cpu_pc(GDBState *s, target_ulong pc)
732 CPUState *cpu = s->c_cpu;
733 CPUClass *cc = CPU_GET_CLASS(cpu);
735 cpu_synchronize_state(cpu);
736 if (cc->set_pc) {
737 cc->set_pc(cpu, pc);
741 static CPUState *find_cpu(uint32_t thread_id)
743 CPUState *cpu;
745 for (cpu = first_cpu; cpu != NULL; cpu = cpu->next_cpu) {
746 if (cpu_index(cpu) == thread_id) {
747 return cpu;
751 return NULL;
754 static int gdb_handle_packet(GDBState *s, const char *line_buf)
756 CPUState *cpu;
757 CPUClass *cc;
758 const char *p;
759 uint32_t thread;
760 int ch, reg_size, type, res;
761 char buf[MAX_PACKET_LENGTH];
762 uint8_t mem_buf[MAX_PACKET_LENGTH];
763 uint8_t *registers;
764 target_ulong addr, len;
766 #ifdef DEBUG_GDB
767 printf("command='%s'\n", line_buf);
768 #endif
769 p = line_buf;
770 ch = *p++;
771 switch(ch) {
772 case '?':
773 /* TODO: Make this return the correct value for user-mode. */
774 snprintf(buf, sizeof(buf), "T%02xthread:%02x;", GDB_SIGNAL_TRAP,
775 cpu_index(s->c_cpu));
776 put_packet(s, buf);
777 /* Remove all the breakpoints when this query is issued,
778 * because gdb is doing and initial connect and the state
779 * should be cleaned up.
781 gdb_breakpoint_remove_all();
782 break;
783 case 'c':
784 if (*p != '\0') {
785 addr = strtoull(p, (char **)&p, 16);
786 gdb_set_cpu_pc(s, addr);
788 s->signal = 0;
789 gdb_continue(s);
790 return RS_IDLE;
791 case 'C':
792 s->signal = gdb_signal_to_target (strtoul(p, (char **)&p, 16));
793 if (s->signal == -1)
794 s->signal = 0;
795 gdb_continue(s);
796 return RS_IDLE;
797 case 'v':
798 if (strncmp(p, "Cont", 4) == 0) {
799 int res_signal, res_thread;
801 p += 4;
802 if (*p == '?') {
803 put_packet(s, "vCont;c;C;s;S");
804 break;
806 res = 0;
807 res_signal = 0;
808 res_thread = 0;
809 while (*p) {
810 int action, signal;
812 if (*p++ != ';') {
813 res = 0;
814 break;
816 action = *p++;
817 signal = 0;
818 if (action == 'C' || action == 'S') {
819 signal = strtoul(p, (char **)&p, 16);
820 } else if (action != 'c' && action != 's') {
821 res = 0;
822 break;
824 thread = 0;
825 if (*p == ':') {
826 thread = strtoull(p+1, (char **)&p, 16);
828 action = tolower(action);
829 if (res == 0 || (res == 'c' && action == 's')) {
830 res = action;
831 res_signal = signal;
832 res_thread = thread;
835 if (res) {
836 if (res_thread != -1 && res_thread != 0) {
837 cpu = find_cpu(res_thread);
838 if (cpu == NULL) {
839 put_packet(s, "E22");
840 break;
842 s->c_cpu = cpu;
844 if (res == 's') {
845 cpu_single_step(s->c_cpu, sstep_flags);
847 s->signal = res_signal;
848 gdb_continue(s);
849 return RS_IDLE;
851 break;
852 } else {
853 goto unknown_command;
855 case 'k':
856 #ifdef CONFIG_USER_ONLY
857 /* Kill the target */
858 fprintf(stderr, "\nQEMU: Terminated via GDBstub\n");
859 exit(0);
860 #endif
861 case 'D':
862 /* Detach packet */
863 gdb_breakpoint_remove_all();
864 gdb_syscall_mode = GDB_SYS_DISABLED;
865 gdb_continue(s);
866 put_packet(s, "OK");
867 break;
868 case 's':
869 if (*p != '\0') {
870 addr = strtoull(p, (char **)&p, 16);
871 gdb_set_cpu_pc(s, addr);
873 cpu_single_step(s->c_cpu, sstep_flags);
874 gdb_continue(s);
875 return RS_IDLE;
876 case 'F':
878 target_ulong ret;
879 target_ulong err;
881 ret = strtoull(p, (char **)&p, 16);
882 if (*p == ',') {
883 p++;
884 err = strtoull(p, (char **)&p, 16);
885 } else {
886 err = 0;
888 if (*p == ',')
889 p++;
890 type = *p;
891 if (s->current_syscall_cb) {
892 s->current_syscall_cb(s->c_cpu, ret, err);
893 s->current_syscall_cb = NULL;
895 if (type == 'C') {
896 put_packet(s, "T02");
897 } else {
898 gdb_continue(s);
901 break;
902 case 'g':
903 cpu_synchronize_state(s->g_cpu);
904 len = 0;
905 for (addr = 0; addr < s->g_cpu->gdb_num_regs; addr++) {
906 reg_size = gdb_read_register(s->g_cpu, mem_buf + len, addr);
907 len += reg_size;
909 memtohex(buf, mem_buf, len);
910 put_packet(s, buf);
911 break;
912 case 'G':
913 cpu_synchronize_state(s->g_cpu);
914 registers = mem_buf;
915 len = strlen(p) / 2;
916 hextomem((uint8_t *)registers, p, len);
917 for (addr = 0; addr < s->g_cpu->gdb_num_regs && len > 0; addr++) {
918 reg_size = gdb_write_register(s->g_cpu, registers, addr);
919 len -= reg_size;
920 registers += reg_size;
922 put_packet(s, "OK");
923 break;
924 case 'm':
925 addr = strtoull(p, (char **)&p, 16);
926 if (*p == ',')
927 p++;
928 len = strtoull(p, NULL, 16);
929 if (target_memory_rw_debug(s->g_cpu, addr, mem_buf, len, false) != 0) {
930 put_packet (s, "E14");
931 } else {
932 memtohex(buf, mem_buf, len);
933 put_packet(s, buf);
935 break;
936 case 'M':
937 addr = strtoull(p, (char **)&p, 16);
938 if (*p == ',')
939 p++;
940 len = strtoull(p, (char **)&p, 16);
941 if (*p == ':')
942 p++;
943 hextomem(mem_buf, p, len);
944 if (target_memory_rw_debug(s->g_cpu, addr, mem_buf, len,
945 true) != 0) {
946 put_packet(s, "E14");
947 } else {
948 put_packet(s, "OK");
950 break;
951 case 'p':
952 /* Older gdb are really dumb, and don't use 'g' if 'p' is avaialable.
953 This works, but can be very slow. Anything new enough to
954 understand XML also knows how to use this properly. */
955 if (!gdb_has_xml)
956 goto unknown_command;
957 addr = strtoull(p, (char **)&p, 16);
958 reg_size = gdb_read_register(s->g_cpu, mem_buf, addr);
959 if (reg_size) {
960 memtohex(buf, mem_buf, reg_size);
961 put_packet(s, buf);
962 } else {
963 put_packet(s, "E14");
965 break;
966 case 'P':
967 if (!gdb_has_xml)
968 goto unknown_command;
969 addr = strtoull(p, (char **)&p, 16);
970 if (*p == '=')
971 p++;
972 reg_size = strlen(p) / 2;
973 hextomem(mem_buf, p, reg_size);
974 gdb_write_register(s->g_cpu, mem_buf, addr);
975 put_packet(s, "OK");
976 break;
977 case 'Z':
978 case 'z':
979 type = strtoul(p, (char **)&p, 16);
980 if (*p == ',')
981 p++;
982 addr = strtoull(p, (char **)&p, 16);
983 if (*p == ',')
984 p++;
985 len = strtoull(p, (char **)&p, 16);
986 if (ch == 'Z')
987 res = gdb_breakpoint_insert(addr, len, type);
988 else
989 res = gdb_breakpoint_remove(addr, len, type);
990 if (res >= 0)
991 put_packet(s, "OK");
992 else if (res == -ENOSYS)
993 put_packet(s, "");
994 else
995 put_packet(s, "E22");
996 break;
997 case 'H':
998 type = *p++;
999 thread = strtoull(p, (char **)&p, 16);
1000 if (thread == -1 || thread == 0) {
1001 put_packet(s, "OK");
1002 break;
1004 cpu = find_cpu(thread);
1005 if (cpu == NULL) {
1006 put_packet(s, "E22");
1007 break;
1009 switch (type) {
1010 case 'c':
1011 s->c_cpu = cpu;
1012 put_packet(s, "OK");
1013 break;
1014 case 'g':
1015 s->g_cpu = cpu;
1016 put_packet(s, "OK");
1017 break;
1018 default:
1019 put_packet(s, "E22");
1020 break;
1022 break;
1023 case 'T':
1024 thread = strtoull(p, (char **)&p, 16);
1025 cpu = find_cpu(thread);
1027 if (cpu != NULL) {
1028 put_packet(s, "OK");
1029 } else {
1030 put_packet(s, "E22");
1032 break;
1033 case 'q':
1034 case 'Q':
1035 /* parse any 'q' packets here */
1036 if (!strcmp(p,"qemu.sstepbits")) {
1037 /* Query Breakpoint bit definitions */
1038 snprintf(buf, sizeof(buf), "ENABLE=%x,NOIRQ=%x,NOTIMER=%x",
1039 SSTEP_ENABLE,
1040 SSTEP_NOIRQ,
1041 SSTEP_NOTIMER);
1042 put_packet(s, buf);
1043 break;
1044 } else if (strncmp(p,"qemu.sstep",10) == 0) {
1045 /* Display or change the sstep_flags */
1046 p += 10;
1047 if (*p != '=') {
1048 /* Display current setting */
1049 snprintf(buf, sizeof(buf), "0x%x", sstep_flags);
1050 put_packet(s, buf);
1051 break;
1053 p++;
1054 type = strtoul(p, (char **)&p, 16);
1055 sstep_flags = type;
1056 put_packet(s, "OK");
1057 break;
1058 } else if (strcmp(p,"C") == 0) {
1059 /* "Current thread" remains vague in the spec, so always return
1060 * the first CPU (gdb returns the first thread). */
1061 put_packet(s, "QC1");
1062 break;
1063 } else if (strcmp(p,"fThreadInfo") == 0) {
1064 s->query_cpu = first_cpu;
1065 goto report_cpuinfo;
1066 } else if (strcmp(p,"sThreadInfo") == 0) {
1067 report_cpuinfo:
1068 if (s->query_cpu) {
1069 snprintf(buf, sizeof(buf), "m%x", cpu_index(s->query_cpu));
1070 put_packet(s, buf);
1071 s->query_cpu = s->query_cpu->next_cpu;
1072 } else
1073 put_packet(s, "l");
1074 break;
1075 } else if (strncmp(p,"ThreadExtraInfo,", 16) == 0) {
1076 thread = strtoull(p+16, (char **)&p, 16);
1077 cpu = find_cpu(thread);
1078 if (cpu != NULL) {
1079 cpu_synchronize_state(cpu);
1080 len = snprintf((char *)mem_buf, sizeof(mem_buf),
1081 "CPU#%d [%s]", cpu->cpu_index,
1082 cpu->halted ? "halted " : "running");
1083 memtohex(buf, mem_buf, len);
1084 put_packet(s, buf);
1086 break;
1088 #ifdef CONFIG_USER_ONLY
1089 else if (strncmp(p, "Offsets", 7) == 0) {
1090 CPUArchState *env = s->c_cpu->env_ptr;
1091 TaskState *ts = env->opaque;
1093 snprintf(buf, sizeof(buf),
1094 "Text=" TARGET_ABI_FMT_lx ";Data=" TARGET_ABI_FMT_lx
1095 ";Bss=" TARGET_ABI_FMT_lx,
1096 ts->info->code_offset,
1097 ts->info->data_offset,
1098 ts->info->data_offset);
1099 put_packet(s, buf);
1100 break;
1102 #else /* !CONFIG_USER_ONLY */
1103 else if (strncmp(p, "Rcmd,", 5) == 0) {
1104 int len = strlen(p + 5);
1106 if ((len % 2) != 0) {
1107 put_packet(s, "E01");
1108 break;
1110 hextomem(mem_buf, p + 5, len);
1111 len = len / 2;
1112 mem_buf[len++] = 0;
1113 qemu_chr_be_write(s->mon_chr, mem_buf, len);
1114 put_packet(s, "OK");
1115 break;
1117 #endif /* !CONFIG_USER_ONLY */
1118 if (strncmp(p, "Supported", 9) == 0) {
1119 snprintf(buf, sizeof(buf), "PacketSize=%x", MAX_PACKET_LENGTH);
1120 cc = CPU_GET_CLASS(first_cpu);
1121 if (cc->gdb_core_xml_file != NULL) {
1122 pstrcat(buf, sizeof(buf), ";qXfer:features:read+");
1124 put_packet(s, buf);
1125 break;
1127 if (strncmp(p, "Xfer:features:read:", 19) == 0) {
1128 const char *xml;
1129 target_ulong total_len;
1131 cc = CPU_GET_CLASS(first_cpu);
1132 if (cc->gdb_core_xml_file == NULL) {
1133 goto unknown_command;
1136 gdb_has_xml = true;
1137 p += 19;
1138 xml = get_feature_xml(p, &p, cc);
1139 if (!xml) {
1140 snprintf(buf, sizeof(buf), "E00");
1141 put_packet(s, buf);
1142 break;
1145 if (*p == ':')
1146 p++;
1147 addr = strtoul(p, (char **)&p, 16);
1148 if (*p == ',')
1149 p++;
1150 len = strtoul(p, (char **)&p, 16);
1152 total_len = strlen(xml);
1153 if (addr > total_len) {
1154 snprintf(buf, sizeof(buf), "E00");
1155 put_packet(s, buf);
1156 break;
1158 if (len > (MAX_PACKET_LENGTH - 5) / 2)
1159 len = (MAX_PACKET_LENGTH - 5) / 2;
1160 if (len < total_len - addr) {
1161 buf[0] = 'm';
1162 len = memtox(buf + 1, xml + addr, len);
1163 } else {
1164 buf[0] = 'l';
1165 len = memtox(buf + 1, xml + addr, total_len - addr);
1167 put_packet_binary(s, buf, len + 1);
1168 break;
1170 /* Unrecognised 'q' command. */
1171 goto unknown_command;
1173 default:
1174 unknown_command:
1175 /* put empty packet */
1176 buf[0] = '\0';
1177 put_packet(s, buf);
1178 break;
1180 return RS_IDLE;
1183 void gdb_set_stop_cpu(CPUState *cpu)
1185 gdbserver_state->c_cpu = cpu;
1186 gdbserver_state->g_cpu = cpu;
1189 #ifndef CONFIG_USER_ONLY
1190 static void gdb_vm_state_change(void *opaque, int running, RunState state)
1192 GDBState *s = gdbserver_state;
1193 CPUArchState *env = s->c_cpu->env_ptr;
1194 CPUState *cpu = s->c_cpu;
1195 char buf[256];
1196 const char *type;
1197 int ret;
1199 if (running || s->state == RS_INACTIVE) {
1200 return;
1202 /* Is there a GDB syscall waiting to be sent? */
1203 if (s->current_syscall_cb) {
1204 put_packet(s, s->syscall_buf);
1205 return;
1207 switch (state) {
1208 case RUN_STATE_DEBUG:
1209 if (env->watchpoint_hit) {
1210 switch (env->watchpoint_hit->flags & BP_MEM_ACCESS) {
1211 case BP_MEM_READ:
1212 type = "r";
1213 break;
1214 case BP_MEM_ACCESS:
1215 type = "a";
1216 break;
1217 default:
1218 type = "";
1219 break;
1221 snprintf(buf, sizeof(buf),
1222 "T%02xthread:%02x;%swatch:" TARGET_FMT_lx ";",
1223 GDB_SIGNAL_TRAP, cpu_index(cpu), type,
1224 env->watchpoint_hit->vaddr);
1225 env->watchpoint_hit = NULL;
1226 goto send_packet;
1228 tb_flush(env);
1229 ret = GDB_SIGNAL_TRAP;
1230 break;
1231 case RUN_STATE_PAUSED:
1232 ret = GDB_SIGNAL_INT;
1233 break;
1234 case RUN_STATE_SHUTDOWN:
1235 ret = GDB_SIGNAL_QUIT;
1236 break;
1237 case RUN_STATE_IO_ERROR:
1238 ret = GDB_SIGNAL_IO;
1239 break;
1240 case RUN_STATE_WATCHDOG:
1241 ret = GDB_SIGNAL_ALRM;
1242 break;
1243 case RUN_STATE_INTERNAL_ERROR:
1244 ret = GDB_SIGNAL_ABRT;
1245 break;
1246 case RUN_STATE_SAVE_VM:
1247 case RUN_STATE_RESTORE_VM:
1248 return;
1249 case RUN_STATE_FINISH_MIGRATE:
1250 ret = GDB_SIGNAL_XCPU;
1251 break;
1252 default:
1253 ret = GDB_SIGNAL_UNKNOWN;
1254 break;
1256 snprintf(buf, sizeof(buf), "T%02xthread:%02x;", ret, cpu_index(cpu));
1258 send_packet:
1259 put_packet(s, buf);
1261 /* disable single step if it was enabled */
1262 cpu_single_step(cpu, 0);
1264 #endif
1266 /* Send a gdb syscall request.
1267 This accepts limited printf-style format specifiers, specifically:
1268 %x - target_ulong argument printed in hex.
1269 %lx - 64-bit argument printed in hex.
1270 %s - string pointer (target_ulong) and length (int) pair. */
1271 void gdb_do_syscall(gdb_syscall_complete_cb cb, const char *fmt, ...)
1273 va_list va;
1274 char *p;
1275 char *p_end;
1276 target_ulong addr;
1277 uint64_t i64;
1278 GDBState *s;
1280 s = gdbserver_state;
1281 if (!s)
1282 return;
1283 s->current_syscall_cb = cb;
1284 #ifndef CONFIG_USER_ONLY
1285 vm_stop(RUN_STATE_DEBUG);
1286 #endif
1287 va_start(va, fmt);
1288 p = s->syscall_buf;
1289 p_end = &s->syscall_buf[sizeof(s->syscall_buf)];
1290 *(p++) = 'F';
1291 while (*fmt) {
1292 if (*fmt == '%') {
1293 fmt++;
1294 switch (*fmt++) {
1295 case 'x':
1296 addr = va_arg(va, target_ulong);
1297 p += snprintf(p, p_end - p, TARGET_FMT_lx, addr);
1298 break;
1299 case 'l':
1300 if (*(fmt++) != 'x')
1301 goto bad_format;
1302 i64 = va_arg(va, uint64_t);
1303 p += snprintf(p, p_end - p, "%" PRIx64, i64);
1304 break;
1305 case 's':
1306 addr = va_arg(va, target_ulong);
1307 p += snprintf(p, p_end - p, TARGET_FMT_lx "/%x",
1308 addr, va_arg(va, int));
1309 break;
1310 default:
1311 bad_format:
1312 fprintf(stderr, "gdbstub: Bad syscall format string '%s'\n",
1313 fmt - 1);
1314 break;
1316 } else {
1317 *(p++) = *(fmt++);
1320 *p = 0;
1321 va_end(va);
1322 #ifdef CONFIG_USER_ONLY
1323 put_packet(s, s->syscall_buf);
1324 gdb_handlesig(s->c_cpu, 0);
1325 #else
1326 /* In this case wait to send the syscall packet until notification that
1327 the CPU has stopped. This must be done because if the packet is sent
1328 now the reply from the syscall request could be received while the CPU
1329 is still in the running state, which can cause packets to be dropped
1330 and state transition 'T' packets to be sent while the syscall is still
1331 being processed. */
1332 cpu_exit(s->c_cpu);
1333 #endif
1336 static void gdb_read_byte(GDBState *s, int ch)
1338 int i, csum;
1339 uint8_t reply;
1341 #ifndef CONFIG_USER_ONLY
1342 if (s->last_packet_len) {
1343 /* Waiting for a response to the last packet. If we see the start
1344 of a new command then abandon the previous response. */
1345 if (ch == '-') {
1346 #ifdef DEBUG_GDB
1347 printf("Got NACK, retransmitting\n");
1348 #endif
1349 put_buffer(s, (uint8_t *)s->last_packet, s->last_packet_len);
1351 #ifdef DEBUG_GDB
1352 else if (ch == '+')
1353 printf("Got ACK\n");
1354 else
1355 printf("Got '%c' when expecting ACK/NACK\n", ch);
1356 #endif
1357 if (ch == '+' || ch == '$')
1358 s->last_packet_len = 0;
1359 if (ch != '$')
1360 return;
1362 if (runstate_is_running()) {
1363 /* when the CPU is running, we cannot do anything except stop
1364 it when receiving a char */
1365 vm_stop(RUN_STATE_PAUSED);
1366 } else
1367 #endif
1369 switch(s->state) {
1370 case RS_IDLE:
1371 if (ch == '$') {
1372 s->line_buf_index = 0;
1373 s->state = RS_GETLINE;
1375 break;
1376 case RS_GETLINE:
1377 if (ch == '#') {
1378 s->state = RS_CHKSUM1;
1379 } else if (s->line_buf_index >= sizeof(s->line_buf) - 1) {
1380 s->state = RS_IDLE;
1381 } else {
1382 s->line_buf[s->line_buf_index++] = ch;
1384 break;
1385 case RS_CHKSUM1:
1386 s->line_buf[s->line_buf_index] = '\0';
1387 s->line_csum = fromhex(ch) << 4;
1388 s->state = RS_CHKSUM2;
1389 break;
1390 case RS_CHKSUM2:
1391 s->line_csum |= fromhex(ch);
1392 csum = 0;
1393 for(i = 0; i < s->line_buf_index; i++) {
1394 csum += s->line_buf[i];
1396 if (s->line_csum != (csum & 0xff)) {
1397 reply = '-';
1398 put_buffer(s, &reply, 1);
1399 s->state = RS_IDLE;
1400 } else {
1401 reply = '+';
1402 put_buffer(s, &reply, 1);
1403 s->state = gdb_handle_packet(s, s->line_buf);
1405 break;
1406 default:
1407 abort();
1412 /* Tell the remote gdb that the process has exited. */
1413 void gdb_exit(CPUArchState *env, int code)
1415 GDBState *s;
1416 char buf[4];
1418 s = gdbserver_state;
1419 if (!s) {
1420 return;
1422 #ifdef CONFIG_USER_ONLY
1423 if (gdbserver_fd < 0 || s->fd < 0) {
1424 return;
1426 #endif
1428 snprintf(buf, sizeof(buf), "W%02x", (uint8_t)code);
1429 put_packet(s, buf);
1431 #ifndef CONFIG_USER_ONLY
1432 if (s->chr) {
1433 qemu_chr_delete(s->chr);
1435 #endif
1438 #ifdef CONFIG_USER_ONLY
1440 gdb_queuesig (void)
1442 GDBState *s;
1444 s = gdbserver_state;
1446 if (gdbserver_fd < 0 || s->fd < 0)
1447 return 0;
1448 else
1449 return 1;
1453 gdb_handlesig(CPUState *cpu, int sig)
1455 CPUArchState *env = cpu->env_ptr;
1456 GDBState *s;
1457 char buf[256];
1458 int n;
1460 s = gdbserver_state;
1461 if (gdbserver_fd < 0 || s->fd < 0) {
1462 return sig;
1465 /* disable single step if it was enabled */
1466 cpu_single_step(cpu, 0);
1467 tb_flush(env);
1469 if (sig != 0) {
1470 snprintf(buf, sizeof(buf), "S%02x", target_signal_to_gdb(sig));
1471 put_packet(s, buf);
1473 /* put_packet() might have detected that the peer terminated the
1474 connection. */
1475 if (s->fd < 0) {
1476 return sig;
1479 sig = 0;
1480 s->state = RS_IDLE;
1481 s->running_state = 0;
1482 while (s->running_state == 0) {
1483 n = read(s->fd, buf, 256);
1484 if (n > 0) {
1485 int i;
1487 for (i = 0; i < n; i++) {
1488 gdb_read_byte(s, buf[i]);
1490 } else if (n == 0 || errno != EAGAIN) {
1491 /* XXX: Connection closed. Should probably wait for another
1492 connection before continuing. */
1493 return sig;
1496 sig = s->signal;
1497 s->signal = 0;
1498 return sig;
1501 /* Tell the remote gdb that the process has exited due to SIG. */
1502 void gdb_signalled(CPUArchState *env, int sig)
1504 GDBState *s;
1505 char buf[4];
1507 s = gdbserver_state;
1508 if (gdbserver_fd < 0 || s->fd < 0) {
1509 return;
1512 snprintf(buf, sizeof(buf), "X%02x", target_signal_to_gdb(sig));
1513 put_packet(s, buf);
1516 static void gdb_accept(void)
1518 GDBState *s;
1519 struct sockaddr_in sockaddr;
1520 socklen_t len;
1521 int fd;
1523 for(;;) {
1524 len = sizeof(sockaddr);
1525 fd = accept(gdbserver_fd, (struct sockaddr *)&sockaddr, &len);
1526 if (fd < 0 && errno != EINTR) {
1527 perror("accept");
1528 return;
1529 } else if (fd >= 0) {
1530 #ifndef _WIN32
1531 fcntl(fd, F_SETFD, FD_CLOEXEC);
1532 #endif
1533 break;
1537 /* set short latency */
1538 socket_set_nodelay(fd);
1540 s = g_malloc0(sizeof(GDBState));
1541 s->c_cpu = first_cpu;
1542 s->g_cpu = first_cpu;
1543 s->fd = fd;
1544 gdb_has_xml = false;
1546 gdbserver_state = s;
1548 fcntl(fd, F_SETFL, O_NONBLOCK);
1551 static int gdbserver_open(int port)
1553 struct sockaddr_in sockaddr;
1554 int fd, val, ret;
1556 fd = socket(PF_INET, SOCK_STREAM, 0);
1557 if (fd < 0) {
1558 perror("socket");
1559 return -1;
1561 #ifndef _WIN32
1562 fcntl(fd, F_SETFD, FD_CLOEXEC);
1563 #endif
1565 /* allow fast reuse */
1566 val = 1;
1567 qemu_setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val));
1569 sockaddr.sin_family = AF_INET;
1570 sockaddr.sin_port = htons(port);
1571 sockaddr.sin_addr.s_addr = 0;
1572 ret = bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr));
1573 if (ret < 0) {
1574 perror("bind");
1575 close(fd);
1576 return -1;
1578 ret = listen(fd, 0);
1579 if (ret < 0) {
1580 perror("listen");
1581 close(fd);
1582 return -1;
1584 return fd;
1587 int gdbserver_start(int port)
1589 gdbserver_fd = gdbserver_open(port);
1590 if (gdbserver_fd < 0)
1591 return -1;
1592 /* accept connections */
1593 gdb_accept();
1594 return 0;
1597 /* Disable gdb stub for child processes. */
1598 void gdbserver_fork(CPUArchState *env)
1600 GDBState *s = gdbserver_state;
1601 if (gdbserver_fd < 0 || s->fd < 0)
1602 return;
1603 close(s->fd);
1604 s->fd = -1;
1605 cpu_breakpoint_remove_all(env, BP_GDB);
1606 cpu_watchpoint_remove_all(env, BP_GDB);
1608 #else
1609 static int gdb_chr_can_receive(void *opaque)
1611 /* We can handle an arbitrarily large amount of data.
1612 Pick the maximum packet size, which is as good as anything. */
1613 return MAX_PACKET_LENGTH;
1616 static void gdb_chr_receive(void *opaque, const uint8_t *buf, int size)
1618 int i;
1620 for (i = 0; i < size; i++) {
1621 gdb_read_byte(gdbserver_state, buf[i]);
1625 static void gdb_chr_event(void *opaque, int event)
1627 switch (event) {
1628 case CHR_EVENT_OPENED:
1629 vm_stop(RUN_STATE_PAUSED);
1630 gdb_has_xml = false;
1631 break;
1632 default:
1633 break;
1637 static void gdb_monitor_output(GDBState *s, const char *msg, int len)
1639 char buf[MAX_PACKET_LENGTH];
1641 buf[0] = 'O';
1642 if (len > (MAX_PACKET_LENGTH/2) - 1)
1643 len = (MAX_PACKET_LENGTH/2) - 1;
1644 memtohex(buf + 1, (uint8_t *)msg, len);
1645 put_packet(s, buf);
1648 static int gdb_monitor_write(CharDriverState *chr, const uint8_t *buf, int len)
1650 const char *p = (const char *)buf;
1651 int max_sz;
1653 max_sz = (sizeof(gdbserver_state->last_packet) - 2) / 2;
1654 for (;;) {
1655 if (len <= max_sz) {
1656 gdb_monitor_output(gdbserver_state, p, len);
1657 break;
1659 gdb_monitor_output(gdbserver_state, p, max_sz);
1660 p += max_sz;
1661 len -= max_sz;
1663 return len;
1666 #ifndef _WIN32
1667 static void gdb_sigterm_handler(int signal)
1669 if (runstate_is_running()) {
1670 vm_stop(RUN_STATE_PAUSED);
1673 #endif
1675 int gdbserver_start(const char *device)
1677 GDBState *s;
1678 char gdbstub_device_name[128];
1679 CharDriverState *chr = NULL;
1680 CharDriverState *mon_chr;
1682 if (!device)
1683 return -1;
1684 if (strcmp(device, "none") != 0) {
1685 if (strstart(device, "tcp:", NULL)) {
1686 /* enforce required TCP attributes */
1687 snprintf(gdbstub_device_name, sizeof(gdbstub_device_name),
1688 "%s,nowait,nodelay,server", device);
1689 device = gdbstub_device_name;
1691 #ifndef _WIN32
1692 else if (strcmp(device, "stdio") == 0) {
1693 struct sigaction act;
1695 memset(&act, 0, sizeof(act));
1696 act.sa_handler = gdb_sigterm_handler;
1697 sigaction(SIGINT, &act, NULL);
1699 #endif
1700 chr = qemu_chr_new("gdb", device, NULL);
1701 if (!chr)
1702 return -1;
1704 qemu_chr_fe_claim_no_fail(chr);
1705 qemu_chr_add_handlers(chr, gdb_chr_can_receive, gdb_chr_receive,
1706 gdb_chr_event, NULL);
1709 s = gdbserver_state;
1710 if (!s) {
1711 s = g_malloc0(sizeof(GDBState));
1712 gdbserver_state = s;
1714 qemu_add_vm_change_state_handler(gdb_vm_state_change, NULL);
1716 /* Initialize a monitor terminal for gdb */
1717 mon_chr = g_malloc0(sizeof(*mon_chr));
1718 mon_chr->chr_write = gdb_monitor_write;
1719 monitor_init(mon_chr, 0);
1720 } else {
1721 if (s->chr)
1722 qemu_chr_delete(s->chr);
1723 mon_chr = s->mon_chr;
1724 memset(s, 0, sizeof(GDBState));
1726 s->c_cpu = first_cpu;
1727 s->g_cpu = first_cpu;
1728 s->chr = chr;
1729 s->state = chr ? RS_IDLE : RS_INACTIVE;
1730 s->mon_chr = mon_chr;
1731 s->current_syscall_cb = NULL;
1733 return 0;
1735 #endif