]> git.proxmox.com Git - mirror_qemu.git/blame - gdbstub.c
qdev-properties: add UUID property type
[mirror_qemu.git] / gdbstub.c
CommitLineData
b4608c04
FB
1/*
2 * gdb server stub
5fafdf24 3 *
3475187d 4 * Copyright (c) 2003-2005 Fabrice Bellard
b4608c04
FB
5 *
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.
10 *
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.
15 *
16 * You should have received a copy of the GNU Lesser General Public
8167ee88 17 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
b4608c04 18 */
d38ea87a 19#include "qemu/osdep.h"
da34e65c 20#include "qapi/error.h"
508b4ecc 21#include "qemu/error-report.h"
f348b6d1 22#include "qemu/cutils.h"
33c11879 23#include "cpu.h"
f348b6d1 24#ifdef CONFIG_USER_ONLY
1fddef4b
FB
25#include "qemu.h"
26#else
83c9089e 27#include "monitor/monitor.h"
8228e353 28#include "chardev/char.h"
4d43a603 29#include "chardev/char-fe.h"
9c17d615 30#include "sysemu/sysemu.h"
022c62cb 31#include "exec/gdbstub.h"
1fddef4b 32#endif
67b915a5 33
56aebc89
PB
34#define MAX_PACKET_LENGTH 4096
35
1de7afc9 36#include "qemu/sockets.h"
b3946626 37#include "sysemu/hw_accel.h"
9c17d615 38#include "sysemu/kvm.h"
cfe67cef 39#include "exec/semihost.h"
63c91552 40#include "exec/exec-all.h"
ca587a8e 41
a3919386
JK
42#ifdef CONFIG_USER_ONLY
43#define GDB_ATTACHED "0"
44#else
45#define GDB_ATTACHED "1"
46#endif
47
f3659eee
AF
48static inline int target_memory_rw_debug(CPUState *cpu, target_ulong addr,
49 uint8_t *buf, int len, bool is_write)
44520db1 50{
f3659eee
AF
51 CPUClass *cc = CPU_GET_CLASS(cpu);
52
53 if (cc->memory_rw_debug) {
54 return cc->memory_rw_debug(cpu, addr, buf, len, is_write);
55 }
56 return cpu_memory_rw_debug(cpu, addr, buf, len, is_write);
44520db1 57}
ca587a8e 58
d2a6c857
AB
59/* Return the GDB index for a given vCPU state.
60 *
61 * For user mode this is simply the thread id. In system mode GDB
62 * numbers CPUs from 1 as 0 is reserved as an "any cpu" index.
63 */
64static inline int cpu_gdb_index(CPUState *cpu)
65{
66#if defined(CONFIG_USER_ONLY)
bd88c780
AB
67 TaskState *ts = (TaskState *) cpu->opaque;
68 return ts->ts_tid;
d2a6c857
AB
69#else
70 return cpu->cpu_index + 1;
71#endif
72}
73
ca587a8e
AJ
74enum {
75 GDB_SIGNAL_0 = 0,
76 GDB_SIGNAL_INT = 2,
425189a8 77 GDB_SIGNAL_QUIT = 3,
ca587a8e 78 GDB_SIGNAL_TRAP = 5,
425189a8
JK
79 GDB_SIGNAL_ABRT = 6,
80 GDB_SIGNAL_ALRM = 14,
81 GDB_SIGNAL_IO = 23,
82 GDB_SIGNAL_XCPU = 24,
ca587a8e
AJ
83 GDB_SIGNAL_UNKNOWN = 143
84};
85
86#ifdef CONFIG_USER_ONLY
87
88/* Map target signal numbers to GDB protocol signal numbers and vice
89 * versa. For user emulation's currently supported systems, we can
90 * assume most signals are defined.
91 */
92
93static int gdb_signal_table[] = {
94 0,
95 TARGET_SIGHUP,
96 TARGET_SIGINT,
97 TARGET_SIGQUIT,
98 TARGET_SIGILL,
99 TARGET_SIGTRAP,
100 TARGET_SIGABRT,
101 -1, /* SIGEMT */
102 TARGET_SIGFPE,
103 TARGET_SIGKILL,
104 TARGET_SIGBUS,
105 TARGET_SIGSEGV,
106 TARGET_SIGSYS,
107 TARGET_SIGPIPE,
108 TARGET_SIGALRM,
109 TARGET_SIGTERM,
110 TARGET_SIGURG,
111 TARGET_SIGSTOP,
112 TARGET_SIGTSTP,
113 TARGET_SIGCONT,
114 TARGET_SIGCHLD,
115 TARGET_SIGTTIN,
116 TARGET_SIGTTOU,
117 TARGET_SIGIO,
118 TARGET_SIGXCPU,
119 TARGET_SIGXFSZ,
120 TARGET_SIGVTALRM,
121 TARGET_SIGPROF,
122 TARGET_SIGWINCH,
123 -1, /* SIGLOST */
124 TARGET_SIGUSR1,
125 TARGET_SIGUSR2,
c72d5bf8 126#ifdef TARGET_SIGPWR
ca587a8e 127 TARGET_SIGPWR,
c72d5bf8
BS
128#else
129 -1,
130#endif
ca587a8e
AJ
131 -1, /* SIGPOLL */
132 -1,
133 -1,
134 -1,
135 -1,
136 -1,
137 -1,
138 -1,
139 -1,
140 -1,
141 -1,
142 -1,
c72d5bf8 143#ifdef __SIGRTMIN
ca587a8e
AJ
144 __SIGRTMIN + 1,
145 __SIGRTMIN + 2,
146 __SIGRTMIN + 3,
147 __SIGRTMIN + 4,
148 __SIGRTMIN + 5,
149 __SIGRTMIN + 6,
150 __SIGRTMIN + 7,
151 __SIGRTMIN + 8,
152 __SIGRTMIN + 9,
153 __SIGRTMIN + 10,
154 __SIGRTMIN + 11,
155 __SIGRTMIN + 12,
156 __SIGRTMIN + 13,
157 __SIGRTMIN + 14,
158 __SIGRTMIN + 15,
159 __SIGRTMIN + 16,
160 __SIGRTMIN + 17,
161 __SIGRTMIN + 18,
162 __SIGRTMIN + 19,
163 __SIGRTMIN + 20,
164 __SIGRTMIN + 21,
165 __SIGRTMIN + 22,
166 __SIGRTMIN + 23,
167 __SIGRTMIN + 24,
168 __SIGRTMIN + 25,
169 __SIGRTMIN + 26,
170 __SIGRTMIN + 27,
171 __SIGRTMIN + 28,
172 __SIGRTMIN + 29,
173 __SIGRTMIN + 30,
174 __SIGRTMIN + 31,
175 -1, /* SIGCANCEL */
176 __SIGRTMIN,
177 __SIGRTMIN + 32,
178 __SIGRTMIN + 33,
179 __SIGRTMIN + 34,
180 __SIGRTMIN + 35,
181 __SIGRTMIN + 36,
182 __SIGRTMIN + 37,
183 __SIGRTMIN + 38,
184 __SIGRTMIN + 39,
185 __SIGRTMIN + 40,
186 __SIGRTMIN + 41,
187 __SIGRTMIN + 42,
188 __SIGRTMIN + 43,
189 __SIGRTMIN + 44,
190 __SIGRTMIN + 45,
191 __SIGRTMIN + 46,
192 __SIGRTMIN + 47,
193 __SIGRTMIN + 48,
194 __SIGRTMIN + 49,
195 __SIGRTMIN + 50,
196 __SIGRTMIN + 51,
197 __SIGRTMIN + 52,
198 __SIGRTMIN + 53,
199 __SIGRTMIN + 54,
200 __SIGRTMIN + 55,
201 __SIGRTMIN + 56,
202 __SIGRTMIN + 57,
203 __SIGRTMIN + 58,
204 __SIGRTMIN + 59,
205 __SIGRTMIN + 60,
206 __SIGRTMIN + 61,
207 __SIGRTMIN + 62,
208 __SIGRTMIN + 63,
209 __SIGRTMIN + 64,
210 __SIGRTMIN + 65,
211 __SIGRTMIN + 66,
212 __SIGRTMIN + 67,
213 __SIGRTMIN + 68,
214 __SIGRTMIN + 69,
215 __SIGRTMIN + 70,
216 __SIGRTMIN + 71,
217 __SIGRTMIN + 72,
218 __SIGRTMIN + 73,
219 __SIGRTMIN + 74,
220 __SIGRTMIN + 75,
221 __SIGRTMIN + 76,
222 __SIGRTMIN + 77,
223 __SIGRTMIN + 78,
224 __SIGRTMIN + 79,
225 __SIGRTMIN + 80,
226 __SIGRTMIN + 81,
227 __SIGRTMIN + 82,
228 __SIGRTMIN + 83,
229 __SIGRTMIN + 84,
230 __SIGRTMIN + 85,
231 __SIGRTMIN + 86,
232 __SIGRTMIN + 87,
233 __SIGRTMIN + 88,
234 __SIGRTMIN + 89,
235 __SIGRTMIN + 90,
236 __SIGRTMIN + 91,
237 __SIGRTMIN + 92,
238 __SIGRTMIN + 93,
239 __SIGRTMIN + 94,
240 __SIGRTMIN + 95,
241 -1, /* SIGINFO */
242 -1, /* UNKNOWN */
243 -1, /* DEFAULT */
244 -1,
245 -1,
246 -1,
247 -1,
248 -1,
249 -1
c72d5bf8 250#endif
ca587a8e 251};
8f447cc7 252#else
ca587a8e
AJ
253/* In system mode we only need SIGINT and SIGTRAP; other signals
254 are not yet supported. */
255
256enum {
257 TARGET_SIGINT = 2,
258 TARGET_SIGTRAP = 5
259};
260
261static int gdb_signal_table[] = {
262 -1,
263 -1,
264 TARGET_SIGINT,
265 -1,
266 -1,
267 TARGET_SIGTRAP
268};
269#endif
270
271#ifdef CONFIG_USER_ONLY
272static int target_signal_to_gdb (int sig)
273{
274 int i;
275 for (i = 0; i < ARRAY_SIZE (gdb_signal_table); i++)
276 if (gdb_signal_table[i] == sig)
277 return i;
278 return GDB_SIGNAL_UNKNOWN;
279}
8f447cc7 280#endif
b4608c04 281
ca587a8e
AJ
282static int gdb_signal_to_target (int sig)
283{
284 if (sig < ARRAY_SIZE (gdb_signal_table))
285 return gdb_signal_table[sig];
286 else
287 return -1;
288}
289
118e2268
AB
290/* #define DEBUG_GDB */
291
292#ifdef DEBUG_GDB
293# define DEBUG_GDB_GATE 1
294#else
295# define DEBUG_GDB_GATE 0
296#endif
297
298#define gdb_debug(fmt, ...) do { \
299 if (DEBUG_GDB_GATE) { \
300 fprintf(stderr, "%s: " fmt, __func__, ## __VA_ARGS__); \
301 } \
302} while (0)
303
b4608c04 304
56aebc89
PB
305typedef struct GDBRegisterState {
306 int base_reg;
307 int num_regs;
308 gdb_reg_cb get_reg;
309 gdb_reg_cb set_reg;
310 const char *xml;
311 struct GDBRegisterState *next;
312} GDBRegisterState;
313
858693c6 314enum RSState {
36556b20 315 RS_INACTIVE,
858693c6
FB
316 RS_IDLE,
317 RS_GETLINE,
4bf43122
DG
318 RS_GETLINE_ESC,
319 RS_GETLINE_RLE,
858693c6
FB
320 RS_CHKSUM1,
321 RS_CHKSUM2,
322};
858693c6 323typedef struct GDBState {
2e0f2cfb
AF
324 CPUState *c_cpu; /* current CPU for step/continue ops */
325 CPUState *g_cpu; /* current CPU for other ops */
52f34623 326 CPUState *query_cpu; /* for q{f|s}ThreadInfo */
41625033 327 enum RSState state; /* parsing state */
56aebc89 328 char line_buf[MAX_PACKET_LENGTH];
858693c6 329 int line_buf_index;
4bf43122
DG
330 int line_sum; /* running checksum */
331 int line_csum; /* checksum at the end of the packet */
56aebc89 332 uint8_t last_packet[MAX_PACKET_LENGTH + 4];
4046d913 333 int last_packet_len;
1f487ee9 334 int signal;
41625033 335#ifdef CONFIG_USER_ONLY
4046d913 336 int fd;
41625033 337 int running_state;
4046d913 338#else
32a6ebec 339 CharBackend chr;
0ec7b3e7 340 Chardev *mon_chr;
41625033 341#endif
cdb432b2
MI
342 char syscall_buf[256];
343 gdb_syscall_complete_cb current_syscall_cb;
858693c6 344} GDBState;
b4608c04 345
60897d36
EI
346/* By default use no IRQs and no timers while single stepping so as to
347 * make single stepping like an ICE HW step.
348 */
349static int sstep_flags = SSTEP_ENABLE|SSTEP_NOIRQ|SSTEP_NOTIMER;
350
880a7578
AL
351static GDBState *gdbserver_state;
352
5b50e790 353bool gdb_has_xml;
56aebc89 354
1fddef4b 355#ifdef CONFIG_USER_ONLY
4046d913
PB
356/* XXX: This is not thread safe. Do we care? */
357static int gdbserver_fd = -1;
358
858693c6 359static int get_char(GDBState *s)
b4608c04
FB
360{
361 uint8_t ch;
362 int ret;
363
364 for(;;) {
00aa0040 365 ret = qemu_recv(s->fd, &ch, 1, 0);
b4608c04 366 if (ret < 0) {
1f487ee9
EI
367 if (errno == ECONNRESET)
368 s->fd = -1;
5819e3e0 369 if (errno != EINTR)
b4608c04
FB
370 return -1;
371 } else if (ret == 0) {
1f487ee9
EI
372 close(s->fd);
373 s->fd = -1;
b4608c04
FB
374 return -1;
375 } else {
376 break;
377 }
378 }
379 return ch;
380}
4046d913 381#endif
b4608c04 382
654efcf3 383static enum {
a2d1ebaf
PB
384 GDB_SYS_UNKNOWN,
385 GDB_SYS_ENABLED,
386 GDB_SYS_DISABLED,
387} gdb_syscall_mode;
388
a38bb079 389/* Decide if either remote gdb syscalls or native file IO should be used. */
a2d1ebaf
PB
390int use_gdb_syscalls(void)
391{
cfe67cef
LA
392 SemihostingTarget target = semihosting_get_target();
393 if (target == SEMIHOSTING_TARGET_NATIVE) {
a38bb079
LI
394 /* -semihosting-config target=native */
395 return false;
cfe67cef 396 } else if (target == SEMIHOSTING_TARGET_GDB) {
a38bb079
LI
397 /* -semihosting-config target=gdb */
398 return true;
399 }
400
401 /* -semihosting-config target=auto */
402 /* On the first call check if gdb is connected and remember. */
a2d1ebaf 403 if (gdb_syscall_mode == GDB_SYS_UNKNOWN) {
880a7578
AL
404 gdb_syscall_mode = (gdbserver_state ? GDB_SYS_ENABLED
405 : GDB_SYS_DISABLED);
a2d1ebaf
PB
406 }
407 return gdb_syscall_mode == GDB_SYS_ENABLED;
408}
409
ba70a624
EI
410/* Resume execution. */
411static inline void gdb_continue(GDBState *s)
412{
413#ifdef CONFIG_USER_ONLY
414 s->running_state = 1;
415#else
26ac7a31 416 if (!runstate_needs_reset()) {
87f25c12
PB
417 vm_start();
418 }
ba70a624
EI
419#endif
420}
421
544177ad
CI
422/*
423 * Resume execution, per CPU actions. For user-mode emulation it's
424 * equivalent to gdb_continue.
425 */
426static int gdb_continue_partial(GDBState *s, char *newstates)
427{
428 CPUState *cpu;
429 int res = 0;
430#ifdef CONFIG_USER_ONLY
431 /*
432 * This is not exactly accurate, but it's an improvement compared to the
433 * previous situation, where only one CPU would be single-stepped.
434 */
435 CPU_FOREACH(cpu) {
436 if (newstates[cpu->cpu_index] == 's') {
437 cpu_single_step(cpu, sstep_flags);
438 }
439 }
440 s->running_state = 1;
441#else
442 int flag = 0;
443
444 if (!runstate_needs_reset()) {
445 if (vm_prepare_start()) {
446 return 0;
447 }
448
449 CPU_FOREACH(cpu) {
450 switch (newstates[cpu->cpu_index]) {
451 case 0:
452 case 1:
453 break; /* nothing to do here */
454 case 's':
455 cpu_single_step(cpu, sstep_flags);
456 cpu_resume(cpu);
457 flag = 1;
458 break;
459 case 'c':
460 cpu_resume(cpu);
461 flag = 1;
462 break;
463 default:
464 res = -1;
465 break;
466 }
467 }
468 }
469 if (flag) {
470 qemu_clock_enable(QEMU_CLOCK_VIRTUAL, true);
471 }
472#endif
473 return res;
474}
475
858693c6 476static void put_buffer(GDBState *s, const uint8_t *buf, int len)
b4608c04 477{
4046d913 478#ifdef CONFIG_USER_ONLY
b4608c04
FB
479 int ret;
480
481 while (len > 0) {
8f447cc7 482 ret = send(s->fd, buf, len, 0);
b4608c04 483 if (ret < 0) {
5819e3e0 484 if (errno != EINTR)
b4608c04
FB
485 return;
486 } else {
487 buf += ret;
488 len -= ret;
489 }
490 }
4046d913 491#else
6ab3fc32
DB
492 /* XXX this blocks entire thread. Rewrite to use
493 * qemu_chr_fe_write and background I/O callbacks */
5345fdb4 494 qemu_chr_fe_write_all(&s->chr, buf, len);
4046d913 495#endif
b4608c04
FB
496}
497
498static inline int fromhex(int v)
499{
500 if (v >= '0' && v <= '9')
501 return v - '0';
502 else if (v >= 'A' && v <= 'F')
503 return v - 'A' + 10;
504 else if (v >= 'a' && v <= 'f')
505 return v - 'a' + 10;
506 else
507 return 0;
508}
509
510static inline int tohex(int v)
511{
512 if (v < 10)
513 return v + '0';
514 else
515 return v - 10 + 'a';
516}
517
518static void memtohex(char *buf, const uint8_t *mem, int len)
519{
520 int i, c;
521 char *q;
522 q = buf;
523 for(i = 0; i < len; i++) {
524 c = mem[i];
525 *q++ = tohex(c >> 4);
526 *q++ = tohex(c & 0xf);
527 }
528 *q = '\0';
529}
530
531static void hextomem(uint8_t *mem, const char *buf, int len)
532{
533 int i;
534
535 for(i = 0; i < len; i++) {
536 mem[i] = (fromhex(buf[0]) << 4) | fromhex(buf[1]);
537 buf += 2;
538 }
539}
540
b4608c04 541/* return -1 if error, 0 if OK */
56aebc89 542static int put_packet_binary(GDBState *s, const char *buf, int len)
b4608c04 543{
56aebc89 544 int csum, i;
60fe76f3 545 uint8_t *p;
b4608c04 546
b4608c04 547 for(;;) {
4046d913
PB
548 p = s->last_packet;
549 *(p++) = '$';
4046d913
PB
550 memcpy(p, buf, len);
551 p += len;
b4608c04
FB
552 csum = 0;
553 for(i = 0; i < len; i++) {
554 csum += buf[i];
555 }
4046d913
PB
556 *(p++) = '#';
557 *(p++) = tohex((csum >> 4) & 0xf);
558 *(p++) = tohex((csum) & 0xf);
b4608c04 559
4046d913 560 s->last_packet_len = p - s->last_packet;
ffe8ab83 561 put_buffer(s, (uint8_t *)s->last_packet, s->last_packet_len);
b4608c04 562
4046d913
PB
563#ifdef CONFIG_USER_ONLY
564 i = get_char(s);
565 if (i < 0)
b4608c04 566 return -1;
4046d913 567 if (i == '+')
b4608c04 568 break;
4046d913
PB
569#else
570 break;
571#endif
b4608c04
FB
572 }
573 return 0;
574}
575
56aebc89
PB
576/* return -1 if error, 0 if OK */
577static int put_packet(GDBState *s, const char *buf)
578{
118e2268 579 gdb_debug("reply='%s'\n", buf);
79808573 580
56aebc89
PB
581 return put_packet_binary(s, buf, strlen(buf));
582}
583
56aebc89
PB
584/* Encode data using the encoding for 'x' packets. */
585static int memtox(char *buf, const char *mem, int len)
586{
587 char *p = buf;
588 char c;
589
590 while (len--) {
591 c = *(mem++);
592 switch (c) {
593 case '#': case '$': case '*': case '}':
594 *(p++) = '}';
595 *(p++) = c ^ 0x20;
596 break;
597 default:
598 *(p++) = c;
599 break;
600 }
601 }
602 return p - buf;
603}
f1ccf904 604
5b24c641
AF
605static const char *get_feature_xml(const char *p, const char **newp,
606 CPUClass *cc)
56aebc89 607{
56aebc89
PB
608 size_t len;
609 int i;
610 const char *name;
611 static char target_xml[1024];
612
613 len = 0;
614 while (p[len] && p[len] != ':')
615 len++;
616 *newp = p + len;
617
618 name = NULL;
619 if (strncmp(p, "target.xml", len) == 0) {
620 /* Generate the XML description for this CPU. */
621 if (!target_xml[0]) {
622 GDBRegisterState *r;
eac8b355 623 CPUState *cpu = first_cpu;
56aebc89 624
b3820e6c
DH
625 pstrcat(target_xml, sizeof(target_xml),
626 "<?xml version=\"1.0\"?>"
627 "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">"
628 "<target>");
629 if (cc->gdb_arch_name) {
630 gchar *arch = cc->gdb_arch_name(cpu);
631 pstrcat(target_xml, sizeof(target_xml), "<architecture>");
632 pstrcat(target_xml, sizeof(target_xml), arch);
633 pstrcat(target_xml, sizeof(target_xml), "</architecture>");
634 g_free(arch);
635 }
636 pstrcat(target_xml, sizeof(target_xml), "<xi:include href=\"");
637 pstrcat(target_xml, sizeof(target_xml), cc->gdb_core_xml_file);
638 pstrcat(target_xml, sizeof(target_xml), "\"/>");
eac8b355 639 for (r = cpu->gdb_regs; r; r = r->next) {
2dc766da
BS
640 pstrcat(target_xml, sizeof(target_xml), "<xi:include href=\"");
641 pstrcat(target_xml, sizeof(target_xml), r->xml);
642 pstrcat(target_xml, sizeof(target_xml), "\"/>");
56aebc89 643 }
2dc766da 644 pstrcat(target_xml, sizeof(target_xml), "</target>");
56aebc89
PB
645 }
646 return target_xml;
647 }
648 for (i = 0; ; i++) {
649 name = xml_builtin[i][0];
650 if (!name || (strncmp(name, p, len) == 0 && strlen(name) == len))
651 break;
652 }
653 return name ? xml_builtin[i][1] : NULL;
654}
f1ccf904 655
385b9f0e 656static int gdb_read_register(CPUState *cpu, uint8_t *mem_buf, int reg)
56aebc89 657{
a0e372f0 658 CPUClass *cc = CPU_GET_CLASS(cpu);
385b9f0e 659 CPUArchState *env = cpu->env_ptr;
56aebc89 660 GDBRegisterState *r;
f1ccf904 661
a0e372f0 662 if (reg < cc->gdb_num_core_regs) {
5b50e790 663 return cc->gdb_read_register(cpu, mem_buf, reg);
a0e372f0 664 }
f1ccf904 665
eac8b355 666 for (r = cpu->gdb_regs; r; r = r->next) {
56aebc89
PB
667 if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
668 return r->get_reg(env, mem_buf, reg - r->base_reg);
669 }
670 }
671 return 0;
f1ccf904
TS
672}
673
385b9f0e 674static int gdb_write_register(CPUState *cpu, uint8_t *mem_buf, int reg)
f1ccf904 675{
a0e372f0 676 CPUClass *cc = CPU_GET_CLASS(cpu);
385b9f0e 677 CPUArchState *env = cpu->env_ptr;
56aebc89 678 GDBRegisterState *r;
f1ccf904 679
a0e372f0 680 if (reg < cc->gdb_num_core_regs) {
5b50e790 681 return cc->gdb_write_register(cpu, mem_buf, reg);
a0e372f0 682 }
56aebc89 683
eac8b355 684 for (r = cpu->gdb_regs; r; r = r->next) {
56aebc89
PB
685 if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
686 return r->set_reg(env, mem_buf, reg - r->base_reg);
687 }
688 }
6da41eaf
FB
689 return 0;
690}
691
56aebc89
PB
692/* Register a supplemental set of CPU registers. If g_pos is nonzero it
693 specifies the first register number and these registers are included in
694 a standard "g" packet. Direction is relative to gdb, i.e. get_reg is
695 gdb reading a CPU register, and set_reg is gdb modifying a CPU register.
696 */
697
22169d41
AF
698void gdb_register_coprocessor(CPUState *cpu,
699 gdb_reg_cb get_reg, gdb_reg_cb set_reg,
700 int num_regs, const char *xml, int g_pos)
6da41eaf 701{
56aebc89
PB
702 GDBRegisterState *s;
703 GDBRegisterState **p;
56aebc89 704
eac8b355 705 p = &cpu->gdb_regs;
56aebc89
PB
706 while (*p) {
707 /* Check for duplicates. */
708 if (strcmp((*p)->xml, xml) == 0)
709 return;
710 p = &(*p)->next;
711 }
9643c25f
SW
712
713 s = g_new0(GDBRegisterState, 1);
a0e372f0 714 s->base_reg = cpu->gdb_num_regs;
9643c25f
SW
715 s->num_regs = num_regs;
716 s->get_reg = get_reg;
717 s->set_reg = set_reg;
718 s->xml = xml;
719
56aebc89 720 /* Add to end of list. */
a0e372f0 721 cpu->gdb_num_regs += num_regs;
56aebc89
PB
722 *p = s;
723 if (g_pos) {
724 if (g_pos != s->base_reg) {
7ae6c571
ZY
725 error_report("Error: Bad gdb register numbering for '%s', "
726 "expected %d got %d", xml, g_pos, s->base_reg);
35143f01
AF
727 } else {
728 cpu->gdb_num_g_regs = cpu->gdb_num_regs;
56aebc89
PB
729 }
730 }
6da41eaf
FB
731}
732
a1d1bb31 733#ifndef CONFIG_USER_ONLY
2472b6c0
PM
734/* Translate GDB watchpoint type to a flags value for cpu_watchpoint_* */
735static inline int xlat_gdb_type(CPUState *cpu, int gdbtype)
736{
737 static const int xlat[] = {
738 [GDB_WATCHPOINT_WRITE] = BP_GDB | BP_MEM_WRITE,
739 [GDB_WATCHPOINT_READ] = BP_GDB | BP_MEM_READ,
740 [GDB_WATCHPOINT_ACCESS] = BP_GDB | BP_MEM_ACCESS,
741 };
742
743 CPUClass *cc = CPU_GET_CLASS(cpu);
744 int cputype = xlat[gdbtype];
745
746 if (cc->gdb_stop_before_watchpoint) {
747 cputype |= BP_STOP_BEFORE_ACCESS;
748 }
749 return cputype;
750}
a1d1bb31
AL
751#endif
752
880a7578 753static int gdb_breakpoint_insert(target_ulong addr, target_ulong len, int type)
a1d1bb31 754{
182735ef 755 CPUState *cpu;
880a7578
AL
756 int err = 0;
757
62278814 758 if (kvm_enabled()) {
2e0f2cfb 759 return kvm_insert_breakpoint(gdbserver_state->c_cpu, addr, len, type);
62278814 760 }
e22a25c9 761
a1d1bb31
AL
762 switch (type) {
763 case GDB_BREAKPOINT_SW:
764 case GDB_BREAKPOINT_HW:
bdc44640 765 CPU_FOREACH(cpu) {
b3310ab3
AF
766 err = cpu_breakpoint_insert(cpu, addr, BP_GDB, NULL);
767 if (err) {
880a7578 768 break;
b3310ab3 769 }
880a7578
AL
770 }
771 return err;
a1d1bb31
AL
772#ifndef CONFIG_USER_ONLY
773 case GDB_WATCHPOINT_WRITE:
774 case GDB_WATCHPOINT_READ:
775 case GDB_WATCHPOINT_ACCESS:
bdc44640 776 CPU_FOREACH(cpu) {
2472b6c0
PM
777 err = cpu_watchpoint_insert(cpu, addr, len,
778 xlat_gdb_type(cpu, type), NULL);
779 if (err) {
880a7578 780 break;
2472b6c0 781 }
880a7578
AL
782 }
783 return err;
a1d1bb31
AL
784#endif
785 default:
786 return -ENOSYS;
787 }
788}
789
880a7578 790static int gdb_breakpoint_remove(target_ulong addr, target_ulong len, int type)
a1d1bb31 791{
182735ef 792 CPUState *cpu;
880a7578
AL
793 int err = 0;
794
62278814 795 if (kvm_enabled()) {
2e0f2cfb 796 return kvm_remove_breakpoint(gdbserver_state->c_cpu, addr, len, type);
62278814 797 }
e22a25c9 798
a1d1bb31
AL
799 switch (type) {
800 case GDB_BREAKPOINT_SW:
801 case GDB_BREAKPOINT_HW:
bdc44640 802 CPU_FOREACH(cpu) {
b3310ab3
AF
803 err = cpu_breakpoint_remove(cpu, addr, BP_GDB);
804 if (err) {
880a7578 805 break;
b3310ab3 806 }
880a7578
AL
807 }
808 return err;
a1d1bb31
AL
809#ifndef CONFIG_USER_ONLY
810 case GDB_WATCHPOINT_WRITE:
811 case GDB_WATCHPOINT_READ:
812 case GDB_WATCHPOINT_ACCESS:
bdc44640 813 CPU_FOREACH(cpu) {
2472b6c0
PM
814 err = cpu_watchpoint_remove(cpu, addr, len,
815 xlat_gdb_type(cpu, type));
880a7578
AL
816 if (err)
817 break;
818 }
819 return err;
a1d1bb31
AL
820#endif
821 default:
822 return -ENOSYS;
823 }
824}
825
880a7578 826static void gdb_breakpoint_remove_all(void)
a1d1bb31 827{
182735ef 828 CPUState *cpu;
880a7578 829
e22a25c9 830 if (kvm_enabled()) {
2e0f2cfb 831 kvm_remove_all_breakpoints(gdbserver_state->c_cpu);
e22a25c9
AL
832 return;
833 }
834
bdc44640 835 CPU_FOREACH(cpu) {
b3310ab3 836 cpu_breakpoint_remove_all(cpu, BP_GDB);
a1d1bb31 837#ifndef CONFIG_USER_ONLY
75a34036 838 cpu_watchpoint_remove_all(cpu, BP_GDB);
a1d1bb31 839#endif
880a7578 840 }
a1d1bb31
AL
841}
842
fab9d284
AJ
843static void gdb_set_cpu_pc(GDBState *s, target_ulong pc)
844{
2e0f2cfb 845 CPUState *cpu = s->c_cpu;
f45748f1
AF
846
847 cpu_synchronize_state(cpu);
4a2b24ed 848 cpu_set_pc(cpu, pc);
fab9d284
AJ
849}
850
2e0f2cfb 851static CPUState *find_cpu(uint32_t thread_id)
1e9fa730 852{
0d34282f 853 CPUState *cpu;
1e9fa730 854
bdc44640 855 CPU_FOREACH(cpu) {
d2a6c857 856 if (cpu_gdb_index(cpu) == thread_id) {
2e0f2cfb 857 return cpu;
aa48dd93 858 }
1e9fa730 859 }
aa48dd93
AF
860
861 return NULL;
1e9fa730
NF
862}
863
4dabe747
JK
864static int is_query_packet(const char *p, const char *query, char separator)
865{
866 unsigned int query_len = strlen(query);
867
868 return strncmp(p, query, query_len) == 0 &&
869 (p[query_len] == '\0' || p[query_len] == separator);
870}
871
544177ad
CI
872/**
873 * gdb_handle_vcont - Parses and handles a vCont packet.
874 * returns -ENOTSUP if a command is unsupported, -EINVAL or -ERANGE if there is
875 * a format error, 0 on success.
876 */
877static int gdb_handle_vcont(GDBState *s, const char *p)
878{
879 int res, idx, signal = 0;
880 char cur_action;
881 char *newstates;
882 unsigned long tmp;
883 CPUState *cpu;
884#ifdef CONFIG_USER_ONLY
885 int max_cpus = 1; /* global variable max_cpus exists only in system mode */
886
887 CPU_FOREACH(cpu) {
888 max_cpus = max_cpus <= cpu->cpu_index ? cpu->cpu_index + 1 : max_cpus;
889 }
890#endif
891 /* uninitialised CPUs stay 0 */
892 newstates = g_new0(char, max_cpus);
893
894 /* mark valid CPUs with 1 */
895 CPU_FOREACH(cpu) {
896 newstates[cpu->cpu_index] = 1;
897 }
898
899 /*
900 * res keeps track of what error we are returning, with -ENOTSUP meaning
901 * that the command is unknown or unsupported, thus returning an empty
902 * packet, while -EINVAL and -ERANGE cause an E22 packet, due to invalid,
903 * or incorrect parameters passed.
904 */
905 res = 0;
906 while (*p) {
907 if (*p++ != ';') {
908 res = -ENOTSUP;
909 goto out;
910 }
911
912 cur_action = *p++;
913 if (cur_action == 'C' || cur_action == 'S') {
95a5befc 914 cur_action = qemu_tolower(cur_action);
544177ad
CI
915 res = qemu_strtoul(p + 1, &p, 16, &tmp);
916 if (res) {
917 goto out;
918 }
919 signal = gdb_signal_to_target(tmp);
920 } else if (cur_action != 'c' && cur_action != 's') {
921 /* unknown/invalid/unsupported command */
922 res = -ENOTSUP;
923 goto out;
924 }
925 /* thread specification. special values: (none), -1 = all; 0 = any */
926 if ((p[0] == ':' && p[1] == '-' && p[2] == '1') || (p[0] != ':')) {
927 if (*p == ':') {
928 p += 3;
929 }
930 for (idx = 0; idx < max_cpus; idx++) {
931 if (newstates[idx] == 1) {
932 newstates[idx] = cur_action;
933 }
934 }
935 } else if (*p == ':') {
936 p++;
937 res = qemu_strtoul(p, &p, 16, &tmp);
938 if (res) {
939 goto out;
940 }
5a6a1ad1 941
544177ad 942 /* 0 means any thread, so we pick the first valid CPU */
5a6a1ad1 943 cpu = tmp ? find_cpu(tmp) : first_cpu;
544177ad 944
544177ad 945 /* invalid CPU/thread specified */
5a6a1ad1 946 if (!cpu) {
544177ad
CI
947 res = -EINVAL;
948 goto out;
949 }
5a6a1ad1 950
544177ad
CI
951 /* only use if no previous match occourred */
952 if (newstates[cpu->cpu_index] == 1) {
953 newstates[cpu->cpu_index] = cur_action;
954 }
955 }
956 }
957 s->signal = signal;
958 gdb_continue_partial(s, newstates);
959
960out:
961 g_free(newstates);
962
963 return res;
964}
965
880a7578 966static int gdb_handle_packet(GDBState *s, const char *line_buf)
b4608c04 967{
2e0f2cfb 968 CPUState *cpu;
5b24c641 969 CPUClass *cc;
b4608c04 970 const char *p;
1e9fa730
NF
971 uint32_t thread;
972 int ch, reg_size, type, res;
56aebc89
PB
973 char buf[MAX_PACKET_LENGTH];
974 uint8_t mem_buf[MAX_PACKET_LENGTH];
975 uint8_t *registers;
9d9754a3 976 target_ulong addr, len;
3b46e624 977
118e2268
AB
978
979 gdb_debug("command='%s'\n", line_buf);
980
858693c6
FB
981 p = line_buf;
982 ch = *p++;
983 switch(ch) {
984 case '?':
1fddef4b 985 /* TODO: Make this return the correct value for user-mode. */
ca587a8e 986 snprintf(buf, sizeof(buf), "T%02xthread:%02x;", GDB_SIGNAL_TRAP,
d2a6c857 987 cpu_gdb_index(s->c_cpu));
858693c6 988 put_packet(s, buf);
7d03f82f
EI
989 /* Remove all the breakpoints when this query is issued,
990 * because gdb is doing and initial connect and the state
991 * should be cleaned up.
992 */
880a7578 993 gdb_breakpoint_remove_all();
858693c6
FB
994 break;
995 case 'c':
996 if (*p != '\0') {
9d9754a3 997 addr = strtoull(p, (char **)&p, 16);
fab9d284 998 gdb_set_cpu_pc(s, addr);
858693c6 999 }
ca587a8e 1000 s->signal = 0;
ba70a624 1001 gdb_continue(s);
41625033 1002 return RS_IDLE;
1f487ee9 1003 case 'C':
ca587a8e
AJ
1004 s->signal = gdb_signal_to_target (strtoul(p, (char **)&p, 16));
1005 if (s->signal == -1)
1006 s->signal = 0;
1f487ee9
EI
1007 gdb_continue(s);
1008 return RS_IDLE;
dd32aa10
JK
1009 case 'v':
1010 if (strncmp(p, "Cont", 4) == 0) {
dd32aa10
JK
1011 p += 4;
1012 if (*p == '?') {
1013 put_packet(s, "vCont;c;C;s;S");
1014 break;
1015 }
544177ad
CI
1016
1017 res = gdb_handle_vcont(s, p);
1018
dd32aa10 1019 if (res) {
544177ad
CI
1020 if ((res == -EINVAL) || (res == -ERANGE)) {
1021 put_packet(s, "E22");
1022 break;
dd32aa10 1023 }
544177ad 1024 goto unknown_command;
dd32aa10
JK
1025 }
1026 break;
1027 } else {
1028 goto unknown_command;
1029 }
7d03f82f
EI
1030 case 'k':
1031 /* Kill the target */
7ae6c571 1032 error_report("QEMU: Terminated via GDBstub");
7d03f82f
EI
1033 exit(0);
1034 case 'D':
1035 /* Detach packet */
880a7578 1036 gdb_breakpoint_remove_all();
7ea06da3 1037 gdb_syscall_mode = GDB_SYS_DISABLED;
7d03f82f
EI
1038 gdb_continue(s);
1039 put_packet(s, "OK");
1040 break;
858693c6
FB
1041 case 's':
1042 if (*p != '\0') {
8fac5803 1043 addr = strtoull(p, (char **)&p, 16);
fab9d284 1044 gdb_set_cpu_pc(s, addr);
858693c6 1045 }
2e0f2cfb 1046 cpu_single_step(s->c_cpu, sstep_flags);
ba70a624 1047 gdb_continue(s);
41625033 1048 return RS_IDLE;
a2d1ebaf
PB
1049 case 'F':
1050 {
1051 target_ulong ret;
1052 target_ulong err;
1053
1054 ret = strtoull(p, (char **)&p, 16);
1055 if (*p == ',') {
1056 p++;
1057 err = strtoull(p, (char **)&p, 16);
1058 } else {
1059 err = 0;
1060 }
1061 if (*p == ',')
1062 p++;
1063 type = *p;
cdb432b2 1064 if (s->current_syscall_cb) {
2e0f2cfb 1065 s->current_syscall_cb(s->c_cpu, ret, err);
cdb432b2
MI
1066 s->current_syscall_cb = NULL;
1067 }
a2d1ebaf
PB
1068 if (type == 'C') {
1069 put_packet(s, "T02");
1070 } else {
ba70a624 1071 gdb_continue(s);
a2d1ebaf
PB
1072 }
1073 }
1074 break;
858693c6 1075 case 'g':
2e0f2cfb 1076 cpu_synchronize_state(s->g_cpu);
56aebc89 1077 len = 0;
35143f01 1078 for (addr = 0; addr < s->g_cpu->gdb_num_g_regs; addr++) {
2e0f2cfb 1079 reg_size = gdb_read_register(s->g_cpu, mem_buf + len, addr);
56aebc89
PB
1080 len += reg_size;
1081 }
1082 memtohex(buf, mem_buf, len);
858693c6
FB
1083 put_packet(s, buf);
1084 break;
1085 case 'G':
2e0f2cfb 1086 cpu_synchronize_state(s->g_cpu);
56aebc89 1087 registers = mem_buf;
858693c6
FB
1088 len = strlen(p) / 2;
1089 hextomem((uint8_t *)registers, p, len);
35143f01 1090 for (addr = 0; addr < s->g_cpu->gdb_num_g_regs && len > 0; addr++) {
2e0f2cfb 1091 reg_size = gdb_write_register(s->g_cpu, registers, addr);
56aebc89
PB
1092 len -= reg_size;
1093 registers += reg_size;
1094 }
858693c6
FB
1095 put_packet(s, "OK");
1096 break;
1097 case 'm':
9d9754a3 1098 addr = strtoull(p, (char **)&p, 16);
858693c6
FB
1099 if (*p == ',')
1100 p++;
9d9754a3 1101 len = strtoull(p, NULL, 16);
5accecb3
KW
1102
1103 /* memtohex() doubles the required space */
1104 if (len > MAX_PACKET_LENGTH / 2) {
1105 put_packet (s, "E22");
1106 break;
1107 }
1108
2e0f2cfb 1109 if (target_memory_rw_debug(s->g_cpu, addr, mem_buf, len, false) != 0) {
6f970bd9
FB
1110 put_packet (s, "E14");
1111 } else {
1112 memtohex(buf, mem_buf, len);
1113 put_packet(s, buf);
1114 }
858693c6
FB
1115 break;
1116 case 'M':
9d9754a3 1117 addr = strtoull(p, (char **)&p, 16);
858693c6
FB
1118 if (*p == ',')
1119 p++;
9d9754a3 1120 len = strtoull(p, (char **)&p, 16);
b328f873 1121 if (*p == ':')
858693c6 1122 p++;
5accecb3
KW
1123
1124 /* hextomem() reads 2*len bytes */
1125 if (len > strlen(p) / 2) {
1126 put_packet (s, "E22");
1127 break;
1128 }
858693c6 1129 hextomem(mem_buf, p, len);
2e0f2cfb 1130 if (target_memory_rw_debug(s->g_cpu, addr, mem_buf, len,
f3659eee 1131 true) != 0) {
905f20b1 1132 put_packet(s, "E14");
44520db1 1133 } else {
858693c6 1134 put_packet(s, "OK");
44520db1 1135 }
858693c6 1136 break;
56aebc89
PB
1137 case 'p':
1138 /* Older gdb are really dumb, and don't use 'g' if 'p' is avaialable.
1139 This works, but can be very slow. Anything new enough to
1140 understand XML also knows how to use this properly. */
1141 if (!gdb_has_xml)
1142 goto unknown_command;
1143 addr = strtoull(p, (char **)&p, 16);
2e0f2cfb 1144 reg_size = gdb_read_register(s->g_cpu, mem_buf, addr);
56aebc89
PB
1145 if (reg_size) {
1146 memtohex(buf, mem_buf, reg_size);
1147 put_packet(s, buf);
1148 } else {
1149 put_packet(s, "E14");
1150 }
1151 break;
1152 case 'P':
1153 if (!gdb_has_xml)
1154 goto unknown_command;
1155 addr = strtoull(p, (char **)&p, 16);
1156 if (*p == '=')
1157 p++;
1158 reg_size = strlen(p) / 2;
1159 hextomem(mem_buf, p, reg_size);
2e0f2cfb 1160 gdb_write_register(s->g_cpu, mem_buf, addr);
56aebc89
PB
1161 put_packet(s, "OK");
1162 break;
858693c6 1163 case 'Z':
858693c6
FB
1164 case 'z':
1165 type = strtoul(p, (char **)&p, 16);
1166 if (*p == ',')
1167 p++;
9d9754a3 1168 addr = strtoull(p, (char **)&p, 16);
858693c6
FB
1169 if (*p == ',')
1170 p++;
9d9754a3 1171 len = strtoull(p, (char **)&p, 16);
a1d1bb31 1172 if (ch == 'Z')
880a7578 1173 res = gdb_breakpoint_insert(addr, len, type);
a1d1bb31 1174 else
880a7578 1175 res = gdb_breakpoint_remove(addr, len, type);
a1d1bb31
AL
1176 if (res >= 0)
1177 put_packet(s, "OK");
1178 else if (res == -ENOSYS)
0f459d16 1179 put_packet(s, "");
a1d1bb31
AL
1180 else
1181 put_packet(s, "E22");
858693c6 1182 break;
880a7578
AL
1183 case 'H':
1184 type = *p++;
1185 thread = strtoull(p, (char **)&p, 16);
1186 if (thread == -1 || thread == 0) {
1187 put_packet(s, "OK");
1188 break;
1189 }
2e0f2cfb
AF
1190 cpu = find_cpu(thread);
1191 if (cpu == NULL) {
880a7578
AL
1192 put_packet(s, "E22");
1193 break;
1194 }
1195 switch (type) {
1196 case 'c':
2e0f2cfb 1197 s->c_cpu = cpu;
880a7578
AL
1198 put_packet(s, "OK");
1199 break;
1200 case 'g':
2e0f2cfb 1201 s->g_cpu = cpu;
880a7578
AL
1202 put_packet(s, "OK");
1203 break;
1204 default:
1205 put_packet(s, "E22");
1206 break;
1207 }
1208 break;
1209 case 'T':
1210 thread = strtoull(p, (char **)&p, 16);
2e0f2cfb 1211 cpu = find_cpu(thread);
1e9fa730 1212
2e0f2cfb 1213 if (cpu != NULL) {
1e9fa730
NF
1214 put_packet(s, "OK");
1215 } else {
880a7578 1216 put_packet(s, "E22");
1e9fa730 1217 }
880a7578 1218 break;
978efd6a 1219 case 'q':
60897d36
EI
1220 case 'Q':
1221 /* parse any 'q' packets here */
1222 if (!strcmp(p,"qemu.sstepbits")) {
1223 /* Query Breakpoint bit definitions */
363a37d5
BS
1224 snprintf(buf, sizeof(buf), "ENABLE=%x,NOIRQ=%x,NOTIMER=%x",
1225 SSTEP_ENABLE,
1226 SSTEP_NOIRQ,
1227 SSTEP_NOTIMER);
60897d36
EI
1228 put_packet(s, buf);
1229 break;
4dabe747 1230 } else if (is_query_packet(p, "qemu.sstep", '=')) {
60897d36
EI
1231 /* Display or change the sstep_flags */
1232 p += 10;
1233 if (*p != '=') {
1234 /* Display current setting */
363a37d5 1235 snprintf(buf, sizeof(buf), "0x%x", sstep_flags);
60897d36
EI
1236 put_packet(s, buf);
1237 break;
1238 }
1239 p++;
1240 type = strtoul(p, (char **)&p, 16);
1241 sstep_flags = type;
1242 put_packet(s, "OK");
1243 break;
880a7578
AL
1244 } else if (strcmp(p,"C") == 0) {
1245 /* "Current thread" remains vague in the spec, so always return
1246 * the first CPU (gdb returns the first thread). */
1247 put_packet(s, "QC1");
1248 break;
1249 } else if (strcmp(p,"fThreadInfo") == 0) {
52f34623 1250 s->query_cpu = first_cpu;
880a7578
AL
1251 goto report_cpuinfo;
1252 } else if (strcmp(p,"sThreadInfo") == 0) {
1253 report_cpuinfo:
1254 if (s->query_cpu) {
d2a6c857 1255 snprintf(buf, sizeof(buf), "m%x", cpu_gdb_index(s->query_cpu));
880a7578 1256 put_packet(s, buf);
bdc44640 1257 s->query_cpu = CPU_NEXT(s->query_cpu);
880a7578
AL
1258 } else
1259 put_packet(s, "l");
1260 break;
1261 } else if (strncmp(p,"ThreadExtraInfo,", 16) == 0) {
1262 thread = strtoull(p+16, (char **)&p, 16);
2e0f2cfb
AF
1263 cpu = find_cpu(thread);
1264 if (cpu != NULL) {
cb446eca 1265 cpu_synchronize_state(cpu);
5accecb3
KW
1266 /* memtohex() doubles the required space */
1267 len = snprintf((char *)mem_buf, sizeof(buf) / 2,
55e5c285 1268 "CPU#%d [%s]", cpu->cpu_index,
259186a7 1269 cpu->halted ? "halted " : "running");
1e9fa730
NF
1270 memtohex(buf, mem_buf, len);
1271 put_packet(s, buf);
1272 }
880a7578 1273 break;
60897d36 1274 }
0b8a988c 1275#ifdef CONFIG_USER_ONLY
070949f3 1276 else if (strcmp(p, "Offsets") == 0) {
0429a971 1277 TaskState *ts = s->c_cpu->opaque;
978efd6a 1278
363a37d5
BS
1279 snprintf(buf, sizeof(buf),
1280 "Text=" TARGET_ABI_FMT_lx ";Data=" TARGET_ABI_FMT_lx
1281 ";Bss=" TARGET_ABI_FMT_lx,
1282 ts->info->code_offset,
1283 ts->info->data_offset,
1284 ts->info->data_offset);
978efd6a
PB
1285 put_packet(s, buf);
1286 break;
1287 }
0b8a988c 1288#else /* !CONFIG_USER_ONLY */
8a34a0fb
AL
1289 else if (strncmp(p, "Rcmd,", 5) == 0) {
1290 int len = strlen(p + 5);
1291
1292 if ((len % 2) != 0) {
1293 put_packet(s, "E01");
1294 break;
1295 }
8a34a0fb 1296 len = len / 2;
5accecb3 1297 hextomem(mem_buf, p + 5, len);
8a34a0fb 1298 mem_buf[len++] = 0;
fa5efccb 1299 qemu_chr_be_write(s->mon_chr, mem_buf, len);
8a34a0fb
AL
1300 put_packet(s, "OK");
1301 break;
1302 }
0b8a988c 1303#endif /* !CONFIG_USER_ONLY */
4dabe747 1304 if (is_query_packet(p, "Supported", ':')) {
5b3715bf 1305 snprintf(buf, sizeof(buf), "PacketSize=%x", MAX_PACKET_LENGTH);
5b24c641
AF
1306 cc = CPU_GET_CLASS(first_cpu);
1307 if (cc->gdb_core_xml_file != NULL) {
1308 pstrcat(buf, sizeof(buf), ";qXfer:features:read+");
1309 }
56aebc89
PB
1310 put_packet(s, buf);
1311 break;
1312 }
56aebc89
PB
1313 if (strncmp(p, "Xfer:features:read:", 19) == 0) {
1314 const char *xml;
1315 target_ulong total_len;
1316
5b24c641
AF
1317 cc = CPU_GET_CLASS(first_cpu);
1318 if (cc->gdb_core_xml_file == NULL) {
1319 goto unknown_command;
1320 }
1321
5b50e790 1322 gdb_has_xml = true;
56aebc89 1323 p += 19;
5b24c641 1324 xml = get_feature_xml(p, &p, cc);
56aebc89 1325 if (!xml) {
5b3715bf 1326 snprintf(buf, sizeof(buf), "E00");
56aebc89
PB
1327 put_packet(s, buf);
1328 break;
1329 }
1330
1331 if (*p == ':')
1332 p++;
1333 addr = strtoul(p, (char **)&p, 16);
1334 if (*p == ',')
1335 p++;
1336 len = strtoul(p, (char **)&p, 16);
1337
1338 total_len = strlen(xml);
1339 if (addr > total_len) {
5b3715bf 1340 snprintf(buf, sizeof(buf), "E00");
56aebc89
PB
1341 put_packet(s, buf);
1342 break;
1343 }
1344 if (len > (MAX_PACKET_LENGTH - 5) / 2)
1345 len = (MAX_PACKET_LENGTH - 5) / 2;
1346 if (len < total_len - addr) {
1347 buf[0] = 'm';
1348 len = memtox(buf + 1, xml + addr, len);
1349 } else {
1350 buf[0] = 'l';
1351 len = memtox(buf + 1, xml + addr, total_len - addr);
1352 }
1353 put_packet_binary(s, buf, len + 1);
1354 break;
1355 }
a3919386
JK
1356 if (is_query_packet(p, "Attached", ':')) {
1357 put_packet(s, GDB_ATTACHED);
1358 break;
1359 }
56aebc89
PB
1360 /* Unrecognised 'q' command. */
1361 goto unknown_command;
1362
858693c6 1363 default:
56aebc89 1364 unknown_command:
858693c6
FB
1365 /* put empty packet */
1366 buf[0] = '\0';
1367 put_packet(s, buf);
1368 break;
1369 }
1370 return RS_IDLE;
1371}
1372
64f6b346 1373void gdb_set_stop_cpu(CPUState *cpu)
880a7578 1374{
2e0f2cfb
AF
1375 gdbserver_state->c_cpu = cpu;
1376 gdbserver_state->g_cpu = cpu;
880a7578
AL
1377}
1378
1fddef4b 1379#ifndef CONFIG_USER_ONLY
1dfb4dd9 1380static void gdb_vm_state_change(void *opaque, int running, RunState state)
858693c6 1381{
880a7578 1382 GDBState *s = gdbserver_state;
2e0f2cfb 1383 CPUState *cpu = s->c_cpu;
858693c6 1384 char buf[256];
d6fc1b39 1385 const char *type;
858693c6
FB
1386 int ret;
1387
cdb432b2
MI
1388 if (running || s->state == RS_INACTIVE) {
1389 return;
1390 }
1391 /* Is there a GDB syscall waiting to be sent? */
1392 if (s->current_syscall_cb) {
1393 put_packet(s, s->syscall_buf);
a2d1ebaf 1394 return;
e07bbac5 1395 }
1dfb4dd9 1396 switch (state) {
0461d5a6 1397 case RUN_STATE_DEBUG:
ff4700b0
AF
1398 if (cpu->watchpoint_hit) {
1399 switch (cpu->watchpoint_hit->flags & BP_MEM_ACCESS) {
a1d1bb31 1400 case BP_MEM_READ:
d6fc1b39
AL
1401 type = "r";
1402 break;
a1d1bb31 1403 case BP_MEM_ACCESS:
d6fc1b39
AL
1404 type = "a";
1405 break;
1406 default:
1407 type = "";
1408 break;
1409 }
880a7578
AL
1410 snprintf(buf, sizeof(buf),
1411 "T%02xthread:%02x;%swatch:" TARGET_FMT_lx ";",
d2a6c857 1412 GDB_SIGNAL_TRAP, cpu_gdb_index(cpu), type,
ff4700b0
AF
1413 (target_ulong)cpu->watchpoint_hit->vaddr);
1414 cpu->watchpoint_hit = NULL;
425189a8 1415 goto send_packet;
6658ffb8 1416 }
bbd77c18 1417 tb_flush(cpu);
ca587a8e 1418 ret = GDB_SIGNAL_TRAP;
425189a8 1419 break;
0461d5a6 1420 case RUN_STATE_PAUSED:
9781e040 1421 ret = GDB_SIGNAL_INT;
425189a8 1422 break;
0461d5a6 1423 case RUN_STATE_SHUTDOWN:
425189a8
JK
1424 ret = GDB_SIGNAL_QUIT;
1425 break;
0461d5a6 1426 case RUN_STATE_IO_ERROR:
425189a8
JK
1427 ret = GDB_SIGNAL_IO;
1428 break;
0461d5a6 1429 case RUN_STATE_WATCHDOG:
425189a8
JK
1430 ret = GDB_SIGNAL_ALRM;
1431 break;
0461d5a6 1432 case RUN_STATE_INTERNAL_ERROR:
425189a8
JK
1433 ret = GDB_SIGNAL_ABRT;
1434 break;
0461d5a6
LC
1435 case RUN_STATE_SAVE_VM:
1436 case RUN_STATE_RESTORE_VM:
425189a8 1437 return;
0461d5a6 1438 case RUN_STATE_FINISH_MIGRATE:
425189a8
JK
1439 ret = GDB_SIGNAL_XCPU;
1440 break;
1441 default:
1442 ret = GDB_SIGNAL_UNKNOWN;
1443 break;
bbeb7b5c 1444 }
226d007d 1445 gdb_set_stop_cpu(cpu);
d2a6c857 1446 snprintf(buf, sizeof(buf), "T%02xthread:%02x;", ret, cpu_gdb_index(cpu));
425189a8
JK
1447
1448send_packet:
858693c6 1449 put_packet(s, buf);
425189a8
JK
1450
1451 /* disable single step if it was enabled */
3825b28f 1452 cpu_single_step(cpu, 0);
858693c6 1453}
1fddef4b 1454#endif
858693c6 1455
a2d1ebaf
PB
1456/* Send a gdb syscall request.
1457 This accepts limited printf-style format specifiers, specifically:
a87295e8
PB
1458 %x - target_ulong argument printed in hex.
1459 %lx - 64-bit argument printed in hex.
1460 %s - string pointer (target_ulong) and length (int) pair. */
19239b39 1461void gdb_do_syscallv(gdb_syscall_complete_cb cb, const char *fmt, va_list va)
a2d1ebaf 1462{
a2d1ebaf 1463 char *p;
cdb432b2 1464 char *p_end;
a2d1ebaf 1465 target_ulong addr;
a87295e8 1466 uint64_t i64;
a2d1ebaf
PB
1467 GDBState *s;
1468
880a7578 1469 s = gdbserver_state;
a2d1ebaf
PB
1470 if (!s)
1471 return;
cdb432b2 1472 s->current_syscall_cb = cb;
a2d1ebaf 1473#ifndef CONFIG_USER_ONLY
0461d5a6 1474 vm_stop(RUN_STATE_DEBUG);
a2d1ebaf 1475#endif
cdb432b2
MI
1476 p = s->syscall_buf;
1477 p_end = &s->syscall_buf[sizeof(s->syscall_buf)];
a2d1ebaf
PB
1478 *(p++) = 'F';
1479 while (*fmt) {
1480 if (*fmt == '%') {
1481 fmt++;
1482 switch (*fmt++) {
1483 case 'x':
1484 addr = va_arg(va, target_ulong);
cdb432b2 1485 p += snprintf(p, p_end - p, TARGET_FMT_lx, addr);
a2d1ebaf 1486 break;
a87295e8
PB
1487 case 'l':
1488 if (*(fmt++) != 'x')
1489 goto bad_format;
1490 i64 = va_arg(va, uint64_t);
cdb432b2 1491 p += snprintf(p, p_end - p, "%" PRIx64, i64);
a87295e8 1492 break;
a2d1ebaf
PB
1493 case 's':
1494 addr = va_arg(va, target_ulong);
cdb432b2 1495 p += snprintf(p, p_end - p, TARGET_FMT_lx "/%x",
363a37d5 1496 addr, va_arg(va, int));
a2d1ebaf
PB
1497 break;
1498 default:
a87295e8 1499 bad_format:
7ae6c571
ZY
1500 error_report("gdbstub: Bad syscall format string '%s'",
1501 fmt - 1);
a2d1ebaf
PB
1502 break;
1503 }
1504 } else {
1505 *(p++) = *(fmt++);
1506 }
1507 }
8a93e02a 1508 *p = 0;
a2d1ebaf 1509#ifdef CONFIG_USER_ONLY
cdb432b2 1510 put_packet(s, s->syscall_buf);
2e0f2cfb 1511 gdb_handlesig(s->c_cpu, 0);
a2d1ebaf 1512#else
cdb432b2
MI
1513 /* In this case wait to send the syscall packet until notification that
1514 the CPU has stopped. This must be done because if the packet is sent
1515 now the reply from the syscall request could be received while the CPU
1516 is still in the running state, which can cause packets to be dropped
1517 and state transition 'T' packets to be sent while the syscall is still
1518 being processed. */
9102deda 1519 qemu_cpu_kick(s->c_cpu);
a2d1ebaf
PB
1520#endif
1521}
1522
19239b39
PM
1523void gdb_do_syscall(gdb_syscall_complete_cb cb, const char *fmt, ...)
1524{
1525 va_list va;
1526
1527 va_start(va, fmt);
1528 gdb_do_syscallv(cb, fmt, va);
1529 va_end(va);
1530}
1531
6a00d601 1532static void gdb_read_byte(GDBState *s, int ch)
858693c6 1533{
60fe76f3 1534 uint8_t reply;
858693c6 1535
1fddef4b 1536#ifndef CONFIG_USER_ONLY
4046d913
PB
1537 if (s->last_packet_len) {
1538 /* Waiting for a response to the last packet. If we see the start
1539 of a new command then abandon the previous response. */
1540 if (ch == '-') {
118e2268 1541 gdb_debug("Got NACK, retransmitting\n");
ffe8ab83 1542 put_buffer(s, (uint8_t *)s->last_packet, s->last_packet_len);
118e2268
AB
1543 } else if (ch == '+') {
1544 gdb_debug("Got ACK\n");
1545 } else {
1546 gdb_debug("Got '%c' when expecting ACK/NACK\n", ch);
4046d913 1547 }
118e2268 1548
4046d913
PB
1549 if (ch == '+' || ch == '$')
1550 s->last_packet_len = 0;
1551 if (ch != '$')
1552 return;
1553 }
1354869c 1554 if (runstate_is_running()) {
858693c6
FB
1555 /* when the CPU is running, we cannot do anything except stop
1556 it when receiving a char */
0461d5a6 1557 vm_stop(RUN_STATE_PAUSED);
5fafdf24 1558 } else
1fddef4b 1559#endif
41625033 1560 {
858693c6
FB
1561 switch(s->state) {
1562 case RS_IDLE:
1563 if (ch == '$') {
4bf43122 1564 /* start of command packet */
858693c6 1565 s->line_buf_index = 0;
4bf43122 1566 s->line_sum = 0;
858693c6 1567 s->state = RS_GETLINE;
4bf43122 1568 } else {
118e2268 1569 gdb_debug("received garbage between packets: 0x%x\n", ch);
c33a346e 1570 }
b4608c04 1571 break;
858693c6 1572 case RS_GETLINE:
4bf43122
DG
1573 if (ch == '}') {
1574 /* start escape sequence */
1575 s->state = RS_GETLINE_ESC;
1576 s->line_sum += ch;
1577 } else if (ch == '*') {
1578 /* start run length encoding sequence */
1579 s->state = RS_GETLINE_RLE;
1580 s->line_sum += ch;
1581 } else if (ch == '#') {
1582 /* end of command, start of checksum*/
1583 s->state = RS_CHKSUM1;
1584 } else if (s->line_buf_index >= sizeof(s->line_buf) - 1) {
118e2268 1585 gdb_debug("command buffer overrun, dropping command\n");
4bf43122
DG
1586 s->state = RS_IDLE;
1587 } else {
1588 /* unescaped command character */
1589 s->line_buf[s->line_buf_index++] = ch;
1590 s->line_sum += ch;
1591 }
1592 break;
1593 case RS_GETLINE_ESC:
858693c6 1594 if (ch == '#') {
4bf43122
DG
1595 /* unexpected end of command in escape sequence */
1596 s->state = RS_CHKSUM1;
858693c6 1597 } else if (s->line_buf_index >= sizeof(s->line_buf) - 1) {
4bf43122 1598 /* command buffer overrun */
118e2268 1599 gdb_debug("command buffer overrun, dropping command\n");
858693c6 1600 s->state = RS_IDLE;
4c3a88a2 1601 } else {
4bf43122
DG
1602 /* parse escaped character and leave escape state */
1603 s->line_buf[s->line_buf_index++] = ch ^ 0x20;
1604 s->line_sum += ch;
1605 s->state = RS_GETLINE;
1606 }
1607 break;
1608 case RS_GETLINE_RLE:
1609 if (ch < ' ') {
1610 /* invalid RLE count encoding */
118e2268 1611 gdb_debug("got invalid RLE count: 0x%x\n", ch);
4bf43122
DG
1612 s->state = RS_GETLINE;
1613 } else {
1614 /* decode repeat length */
1615 int repeat = (unsigned char)ch - ' ' + 3;
1616 if (s->line_buf_index + repeat >= sizeof(s->line_buf) - 1) {
1617 /* that many repeats would overrun the command buffer */
118e2268 1618 gdb_debug("command buffer overrun, dropping command\n");
4bf43122
DG
1619 s->state = RS_IDLE;
1620 } else if (s->line_buf_index < 1) {
1621 /* got a repeat but we have nothing to repeat */
118e2268 1622 gdb_debug("got invalid RLE sequence\n");
4bf43122
DG
1623 s->state = RS_GETLINE;
1624 } else {
1625 /* repeat the last character */
1626 memset(s->line_buf + s->line_buf_index,
1627 s->line_buf[s->line_buf_index - 1], repeat);
1628 s->line_buf_index += repeat;
1629 s->line_sum += ch;
1630 s->state = RS_GETLINE;
1631 }
4c3a88a2
FB
1632 }
1633 break;
858693c6 1634 case RS_CHKSUM1:
4bf43122
DG
1635 /* get high hex digit of checksum */
1636 if (!isxdigit(ch)) {
118e2268 1637 gdb_debug("got invalid command checksum digit\n");
4bf43122
DG
1638 s->state = RS_GETLINE;
1639 break;
1640 }
858693c6
FB
1641 s->line_buf[s->line_buf_index] = '\0';
1642 s->line_csum = fromhex(ch) << 4;
1643 s->state = RS_CHKSUM2;
1644 break;
1645 case RS_CHKSUM2:
4bf43122
DG
1646 /* get low hex digit of checksum */
1647 if (!isxdigit(ch)) {
118e2268 1648 gdb_debug("got invalid command checksum digit\n");
4bf43122
DG
1649 s->state = RS_GETLINE;
1650 break;
858693c6 1651 }
4bf43122
DG
1652 s->line_csum |= fromhex(ch);
1653
1654 if (s->line_csum != (s->line_sum & 0xff)) {
118e2268 1655 gdb_debug("got command packet with incorrect checksum\n");
4bf43122 1656 /* send NAK reply */
60fe76f3
TS
1657 reply = '-';
1658 put_buffer(s, &reply, 1);
858693c6 1659 s->state = RS_IDLE;
4c3a88a2 1660 } else {
4bf43122 1661 /* send ACK reply */
60fe76f3
TS
1662 reply = '+';
1663 put_buffer(s, &reply, 1);
880a7578 1664 s->state = gdb_handle_packet(s, s->line_buf);
4c3a88a2
FB
1665 }
1666 break;
a2d1ebaf
PB
1667 default:
1668 abort();
858693c6
FB
1669 }
1670 }
1671}
1672
0e1c9c54 1673/* Tell the remote gdb that the process has exited. */
9349b4f9 1674void gdb_exit(CPUArchState *env, int code)
0e1c9c54
PB
1675{
1676 GDBState *s;
1677 char buf[4];
1678
1679 s = gdbserver_state;
1680 if (!s) {
1681 return;
1682 }
1683#ifdef CONFIG_USER_ONLY
1684 if (gdbserver_fd < 0 || s->fd < 0) {
1685 return;
1686 }
1687#endif
1688
1689 snprintf(buf, sizeof(buf), "W%02x", (uint8_t)code);
1690 put_packet(s, buf);
e2af15b2
FC
1691
1692#ifndef CONFIG_USER_ONLY
1ce2610c 1693 qemu_chr_fe_deinit(&s->chr, true);
e2af15b2 1694#endif
0e1c9c54
PB
1695}
1696
1fddef4b
FB
1697#ifdef CONFIG_USER_ONLY
1698int
db6b81d4 1699gdb_handlesig(CPUState *cpu, int sig)
1fddef4b 1700{
5ca666c7
AF
1701 GDBState *s;
1702 char buf[256];
1703 int n;
1fddef4b 1704
5ca666c7
AF
1705 s = gdbserver_state;
1706 if (gdbserver_fd < 0 || s->fd < 0) {
1707 return sig;
1708 }
1fddef4b 1709
5ca666c7 1710 /* disable single step if it was enabled */
3825b28f 1711 cpu_single_step(cpu, 0);
bbd77c18 1712 tb_flush(cpu);
1fddef4b 1713
5ca666c7
AF
1714 if (sig != 0) {
1715 snprintf(buf, sizeof(buf), "S%02x", target_signal_to_gdb(sig));
1716 put_packet(s, buf);
1717 }
1718 /* put_packet() might have detected that the peer terminated the
1719 connection. */
1720 if (s->fd < 0) {
1721 return sig;
1722 }
1fddef4b 1723
5ca666c7
AF
1724 sig = 0;
1725 s->state = RS_IDLE;
1726 s->running_state = 0;
1727 while (s->running_state == 0) {
1728 n = read(s->fd, buf, 256);
1729 if (n > 0) {
1730 int i;
1731
1732 for (i = 0; i < n; i++) {
1733 gdb_read_byte(s, buf[i]);
1734 }
5819e3e0 1735 } else {
5ca666c7
AF
1736 /* XXX: Connection closed. Should probably wait for another
1737 connection before continuing. */
5819e3e0
PW
1738 if (n == 0) {
1739 close(s->fd);
1740 }
1741 s->fd = -1;
5ca666c7 1742 return sig;
1fddef4b 1743 }
5ca666c7
AF
1744 }
1745 sig = s->signal;
1746 s->signal = 0;
1747 return sig;
1fddef4b 1748}
e9009676 1749
ca587a8e 1750/* Tell the remote gdb that the process has exited due to SIG. */
9349b4f9 1751void gdb_signalled(CPUArchState *env, int sig)
ca587a8e 1752{
5ca666c7
AF
1753 GDBState *s;
1754 char buf[4];
ca587a8e 1755
5ca666c7
AF
1756 s = gdbserver_state;
1757 if (gdbserver_fd < 0 || s->fd < 0) {
1758 return;
1759 }
ca587a8e 1760
5ca666c7
AF
1761 snprintf(buf, sizeof(buf), "X%02x", target_signal_to_gdb(sig));
1762 put_packet(s, buf);
ca587a8e 1763}
1fddef4b 1764
880a7578 1765static void gdb_accept(void)
858693c6
FB
1766{
1767 GDBState *s;
1768 struct sockaddr_in sockaddr;
1769 socklen_t len;
bf1c852a 1770 int fd;
858693c6
FB
1771
1772 for(;;) {
1773 len = sizeof(sockaddr);
1774 fd = accept(gdbserver_fd, (struct sockaddr *)&sockaddr, &len);
1775 if (fd < 0 && errno != EINTR) {
1776 perror("accept");
1777 return;
1778 } else if (fd >= 0) {
40ff6d7e
KW
1779#ifndef _WIN32
1780 fcntl(fd, F_SETFD, FD_CLOEXEC);
1781#endif
b4608c04
FB
1782 break;
1783 }
1784 }
858693c6
FB
1785
1786 /* set short latency */
bf1c852a 1787 socket_set_nodelay(fd);
3b46e624 1788
7267c094 1789 s = g_malloc0(sizeof(GDBState));
2e0f2cfb
AF
1790 s->c_cpu = first_cpu;
1791 s->g_cpu = first_cpu;
858693c6 1792 s->fd = fd;
5b50e790 1793 gdb_has_xml = false;
858693c6 1794
880a7578 1795 gdbserver_state = s;
858693c6
FB
1796}
1797
1798static int gdbserver_open(int port)
1799{
1800 struct sockaddr_in sockaddr;
6669ca13 1801 int fd, ret;
858693c6
FB
1802
1803 fd = socket(PF_INET, SOCK_STREAM, 0);
1804 if (fd < 0) {
1805 perror("socket");
1806 return -1;
1807 }
40ff6d7e
KW
1808#ifndef _WIN32
1809 fcntl(fd, F_SETFD, FD_CLOEXEC);
1810#endif
858693c6 1811
6669ca13 1812 socket_set_fast_reuse(fd);
858693c6
FB
1813
1814 sockaddr.sin_family = AF_INET;
1815 sockaddr.sin_port = htons(port);
1816 sockaddr.sin_addr.s_addr = 0;
1817 ret = bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr));
1818 if (ret < 0) {
1819 perror("bind");
bb16172c 1820 close(fd);
858693c6
FB
1821 return -1;
1822 }
96165b9e 1823 ret = listen(fd, 1);
858693c6
FB
1824 if (ret < 0) {
1825 perror("listen");
bb16172c 1826 close(fd);
858693c6
FB
1827 return -1;
1828 }
858693c6
FB
1829 return fd;
1830}
1831
1832int gdbserver_start(int port)
1833{
1834 gdbserver_fd = gdbserver_open(port);
1835 if (gdbserver_fd < 0)
1836 return -1;
1837 /* accept connections */
880a7578 1838 gdb_accept();
4046d913
PB
1839 return 0;
1840}
2b1319c8
AJ
1841
1842/* Disable gdb stub for child processes. */
f7ec7f7b 1843void gdbserver_fork(CPUState *cpu)
2b1319c8
AJ
1844{
1845 GDBState *s = gdbserver_state;
75a34036
AF
1846
1847 if (gdbserver_fd < 0 || s->fd < 0) {
1848 return;
1849 }
2b1319c8
AJ
1850 close(s->fd);
1851 s->fd = -1;
b3310ab3 1852 cpu_breakpoint_remove_all(cpu, BP_GDB);
75a34036 1853 cpu_watchpoint_remove_all(cpu, BP_GDB);
2b1319c8 1854}
1fddef4b 1855#else
aa1f17c1 1856static int gdb_chr_can_receive(void *opaque)
4046d913 1857{
56aebc89
PB
1858 /* We can handle an arbitrarily large amount of data.
1859 Pick the maximum packet size, which is as good as anything. */
1860 return MAX_PACKET_LENGTH;
4046d913
PB
1861}
1862
aa1f17c1 1863static void gdb_chr_receive(void *opaque, const uint8_t *buf, int size)
4046d913 1864{
4046d913
PB
1865 int i;
1866
1867 for (i = 0; i < size; i++) {
880a7578 1868 gdb_read_byte(gdbserver_state, buf[i]);
4046d913
PB
1869 }
1870}
1871
1872static void gdb_chr_event(void *opaque, int event)
1873{
1874 switch (event) {
b6b8df56 1875 case CHR_EVENT_OPENED:
0461d5a6 1876 vm_stop(RUN_STATE_PAUSED);
5b50e790 1877 gdb_has_xml = false;
4046d913
PB
1878 break;
1879 default:
1880 break;
1881 }
1882}
1883
8a34a0fb
AL
1884static void gdb_monitor_output(GDBState *s, const char *msg, int len)
1885{
1886 char buf[MAX_PACKET_LENGTH];
1887
1888 buf[0] = 'O';
1889 if (len > (MAX_PACKET_LENGTH/2) - 1)
1890 len = (MAX_PACKET_LENGTH/2) - 1;
1891 memtohex(buf + 1, (uint8_t *)msg, len);
1892 put_packet(s, buf);
1893}
1894
0ec7b3e7 1895static int gdb_monitor_write(Chardev *chr, const uint8_t *buf, int len)
8a34a0fb
AL
1896{
1897 const char *p = (const char *)buf;
1898 int max_sz;
1899
1900 max_sz = (sizeof(gdbserver_state->last_packet) - 2) / 2;
1901 for (;;) {
1902 if (len <= max_sz) {
1903 gdb_monitor_output(gdbserver_state, p, len);
1904 break;
1905 }
1906 gdb_monitor_output(gdbserver_state, p, max_sz);
1907 p += max_sz;
1908 len -= max_sz;
1909 }
1910 return len;
1911}
1912
59030a8c
AL
1913#ifndef _WIN32
1914static void gdb_sigterm_handler(int signal)
1915{
1354869c 1916 if (runstate_is_running()) {
0461d5a6 1917 vm_stop(RUN_STATE_PAUSED);
e07bbac5 1918 }
59030a8c
AL
1919}
1920#endif
1921
777357d7
MAL
1922static void gdb_monitor_open(Chardev *chr, ChardevBackend *backend,
1923 bool *be_opened, Error **errp)
1924{
1925 *be_opened = false;
1926}
1927
1928static void char_gdb_class_init(ObjectClass *oc, void *data)
1929{
1930 ChardevClass *cc = CHARDEV_CLASS(oc);
1931
1932 cc->internal = true;
1933 cc->open = gdb_monitor_open;
1934 cc->chr_write = gdb_monitor_write;
1935}
1936
1937#define TYPE_CHARDEV_GDB "chardev-gdb"
1938
1939static const TypeInfo char_gdb_type_info = {
1940 .name = TYPE_CHARDEV_GDB,
1941 .parent = TYPE_CHARDEV,
1942 .class_init = char_gdb_class_init,
1943};
1944
59030a8c 1945int gdbserver_start(const char *device)
4046d913
PB
1946{
1947 GDBState *s;
59030a8c 1948 char gdbstub_device_name[128];
0ec7b3e7
MAL
1949 Chardev *chr = NULL;
1950 Chardev *mon_chr;
cfc3475a 1951
508b4ecc
ZY
1952 if (!first_cpu) {
1953 error_report("gdbstub: meaningless to attach gdb to a "
1954 "machine without any CPU.");
1955 return -1;
1956 }
1957
59030a8c
AL
1958 if (!device)
1959 return -1;
1960 if (strcmp(device, "none") != 0) {
1961 if (strstart(device, "tcp:", NULL)) {
1962 /* enforce required TCP attributes */
1963 snprintf(gdbstub_device_name, sizeof(gdbstub_device_name),
1964 "%s,nowait,nodelay,server", device);
1965 device = gdbstub_device_name;
36556b20 1966 }
59030a8c
AL
1967#ifndef _WIN32
1968 else if (strcmp(device, "stdio") == 0) {
1969 struct sigaction act;
4046d913 1970
59030a8c
AL
1971 memset(&act, 0, sizeof(act));
1972 act.sa_handler = gdb_sigterm_handler;
1973 sigaction(SIGINT, &act, NULL);
1974 }
1975#endif
b4948be9 1976 chr = qemu_chr_new_noreplay("gdb", device);
36556b20
AL
1977 if (!chr)
1978 return -1;
cfc3475a
PB
1979 }
1980
36556b20
AL
1981 s = gdbserver_state;
1982 if (!s) {
7267c094 1983 s = g_malloc0(sizeof(GDBState));
36556b20 1984 gdbserver_state = s;
4046d913 1985
36556b20
AL
1986 qemu_add_vm_change_state_handler(gdb_vm_state_change, NULL);
1987
1988 /* Initialize a monitor terminal for gdb */
777357d7
MAL
1989 mon_chr = qemu_chardev_new(NULL, TYPE_CHARDEV_GDB,
1990 NULL, &error_abort);
36556b20
AL
1991 monitor_init(mon_chr, 0);
1992 } else {
1ce2610c 1993 qemu_chr_fe_deinit(&s->chr, true);
36556b20
AL
1994 mon_chr = s->mon_chr;
1995 memset(s, 0, sizeof(GDBState));
32a6ebec 1996 s->mon_chr = mon_chr;
36556b20 1997 }
2e0f2cfb
AF
1998 s->c_cpu = first_cpu;
1999 s->g_cpu = first_cpu;
32a6ebec
MAL
2000 if (chr) {
2001 qemu_chr_fe_init(&s->chr, chr, &error_abort);
5345fdb4 2002 qemu_chr_fe_set_handlers(&s->chr, gdb_chr_can_receive, gdb_chr_receive,
81517ba3 2003 gdb_chr_event, NULL, NULL, NULL, true);
32a6ebec 2004 }
36556b20
AL
2005 s->state = chr ? RS_IDLE : RS_INACTIVE;
2006 s->mon_chr = mon_chr;
cdb432b2 2007 s->current_syscall_cb = NULL;
8a34a0fb 2008
b4608c04
FB
2009 return 0;
2010}
777357d7
MAL
2011
2012static void register_types(void)
2013{
2014 type_register_static(&char_gdb_type_info);
2015}
2016
2017type_init(register_types);
4046d913 2018#endif