]> git.proxmox.com Git - mirror_qemu.git/blob - gdbstub/gdbstub.c
tests/qtest: libqtest: Correct the timeout unit of blocking receive calls for win32
[mirror_qemu.git] / gdbstub / gdbstub.c
1 /*
2 * gdb server stub
3 *
4 * This implements a subset of the remote protocol as described in:
5 *
6 * https://sourceware.org/gdb/onlinedocs/gdb/Remote-Protocol.html
7 *
8 * Copyright (c) 2003-2005 Fabrice Bellard
9 *
10 * This library is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
13 * version 2 of the License, or (at your option) any later version.
14 *
15 * This library is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
22 *
23 * SPDX-License-Identifier: LGPL-2.0+
24 */
25
26 #include "qemu/osdep.h"
27 #include "qapi/error.h"
28 #include "qemu/error-report.h"
29 #include "qemu/ctype.h"
30 #include "qemu/cutils.h"
31 #include "qemu/module.h"
32 #include "trace.h"
33 #include "exec/gdbstub.h"
34 #ifdef CONFIG_USER_ONLY
35 #include "qemu.h"
36 #else
37 #include "monitor/monitor.h"
38 #include "chardev/char.h"
39 #include "chardev/char-fe.h"
40 #include "hw/cpu/cluster.h"
41 #include "hw/boards.h"
42 #endif
43
44 #define MAX_PACKET_LENGTH 4096
45
46 #include "qemu/sockets.h"
47 #include "sysemu/hw_accel.h"
48 #include "sysemu/runstate.h"
49 #include "semihosting/semihost.h"
50 #include "exec/exec-all.h"
51 #include "exec/hwaddr.h"
52 #include "sysemu/replay.h"
53
54 #include "internals.h"
55
56 #ifdef CONFIG_USER_ONLY
57 #define GDB_ATTACHED "0"
58 #else
59 #define GDB_ATTACHED "1"
60 #endif
61
62 #ifndef CONFIG_USER_ONLY
63 static int phy_memory_mode;
64 #endif
65
66 static inline int target_memory_rw_debug(CPUState *cpu, target_ulong addr,
67 uint8_t *buf, int len, bool is_write)
68 {
69 CPUClass *cc;
70
71 #ifndef CONFIG_USER_ONLY
72 if (phy_memory_mode) {
73 if (is_write) {
74 cpu_physical_memory_write(addr, buf, len);
75 } else {
76 cpu_physical_memory_read(addr, buf, len);
77 }
78 return 0;
79 }
80 #endif
81
82 cc = CPU_GET_CLASS(cpu);
83 if (cc->memory_rw_debug) {
84 return cc->memory_rw_debug(cpu, addr, buf, len, is_write);
85 }
86 return cpu_memory_rw_debug(cpu, addr, buf, len, is_write);
87 }
88
89 /* Return the GDB index for a given vCPU state.
90 *
91 * For user mode this is simply the thread id. In system mode GDB
92 * numbers CPUs from 1 as 0 is reserved as an "any cpu" index.
93 */
94 static inline int cpu_gdb_index(CPUState *cpu)
95 {
96 #if defined(CONFIG_USER_ONLY)
97 TaskState *ts = (TaskState *) cpu->opaque;
98 return ts ? ts->ts_tid : -1;
99 #else
100 return cpu->cpu_index + 1;
101 #endif
102 }
103
104 enum {
105 GDB_SIGNAL_0 = 0,
106 GDB_SIGNAL_INT = 2,
107 GDB_SIGNAL_QUIT = 3,
108 GDB_SIGNAL_TRAP = 5,
109 GDB_SIGNAL_ABRT = 6,
110 GDB_SIGNAL_ALRM = 14,
111 GDB_SIGNAL_IO = 23,
112 GDB_SIGNAL_XCPU = 24,
113 GDB_SIGNAL_UNKNOWN = 143
114 };
115
116 #ifdef CONFIG_USER_ONLY
117
118 /* Map target signal numbers to GDB protocol signal numbers and vice
119 * versa. For user emulation's currently supported systems, we can
120 * assume most signals are defined.
121 */
122
123 static int gdb_signal_table[] = {
124 0,
125 TARGET_SIGHUP,
126 TARGET_SIGINT,
127 TARGET_SIGQUIT,
128 TARGET_SIGILL,
129 TARGET_SIGTRAP,
130 TARGET_SIGABRT,
131 -1, /* SIGEMT */
132 TARGET_SIGFPE,
133 TARGET_SIGKILL,
134 TARGET_SIGBUS,
135 TARGET_SIGSEGV,
136 TARGET_SIGSYS,
137 TARGET_SIGPIPE,
138 TARGET_SIGALRM,
139 TARGET_SIGTERM,
140 TARGET_SIGURG,
141 TARGET_SIGSTOP,
142 TARGET_SIGTSTP,
143 TARGET_SIGCONT,
144 TARGET_SIGCHLD,
145 TARGET_SIGTTIN,
146 TARGET_SIGTTOU,
147 TARGET_SIGIO,
148 TARGET_SIGXCPU,
149 TARGET_SIGXFSZ,
150 TARGET_SIGVTALRM,
151 TARGET_SIGPROF,
152 TARGET_SIGWINCH,
153 -1, /* SIGLOST */
154 TARGET_SIGUSR1,
155 TARGET_SIGUSR2,
156 #ifdef TARGET_SIGPWR
157 TARGET_SIGPWR,
158 #else
159 -1,
160 #endif
161 -1, /* SIGPOLL */
162 -1,
163 -1,
164 -1,
165 -1,
166 -1,
167 -1,
168 -1,
169 -1,
170 -1,
171 -1,
172 -1,
173 #ifdef __SIGRTMIN
174 __SIGRTMIN + 1,
175 __SIGRTMIN + 2,
176 __SIGRTMIN + 3,
177 __SIGRTMIN + 4,
178 __SIGRTMIN + 5,
179 __SIGRTMIN + 6,
180 __SIGRTMIN + 7,
181 __SIGRTMIN + 8,
182 __SIGRTMIN + 9,
183 __SIGRTMIN + 10,
184 __SIGRTMIN + 11,
185 __SIGRTMIN + 12,
186 __SIGRTMIN + 13,
187 __SIGRTMIN + 14,
188 __SIGRTMIN + 15,
189 __SIGRTMIN + 16,
190 __SIGRTMIN + 17,
191 __SIGRTMIN + 18,
192 __SIGRTMIN + 19,
193 __SIGRTMIN + 20,
194 __SIGRTMIN + 21,
195 __SIGRTMIN + 22,
196 __SIGRTMIN + 23,
197 __SIGRTMIN + 24,
198 __SIGRTMIN + 25,
199 __SIGRTMIN + 26,
200 __SIGRTMIN + 27,
201 __SIGRTMIN + 28,
202 __SIGRTMIN + 29,
203 __SIGRTMIN + 30,
204 __SIGRTMIN + 31,
205 -1, /* SIGCANCEL */
206 __SIGRTMIN,
207 __SIGRTMIN + 32,
208 __SIGRTMIN + 33,
209 __SIGRTMIN + 34,
210 __SIGRTMIN + 35,
211 __SIGRTMIN + 36,
212 __SIGRTMIN + 37,
213 __SIGRTMIN + 38,
214 __SIGRTMIN + 39,
215 __SIGRTMIN + 40,
216 __SIGRTMIN + 41,
217 __SIGRTMIN + 42,
218 __SIGRTMIN + 43,
219 __SIGRTMIN + 44,
220 __SIGRTMIN + 45,
221 __SIGRTMIN + 46,
222 __SIGRTMIN + 47,
223 __SIGRTMIN + 48,
224 __SIGRTMIN + 49,
225 __SIGRTMIN + 50,
226 __SIGRTMIN + 51,
227 __SIGRTMIN + 52,
228 __SIGRTMIN + 53,
229 __SIGRTMIN + 54,
230 __SIGRTMIN + 55,
231 __SIGRTMIN + 56,
232 __SIGRTMIN + 57,
233 __SIGRTMIN + 58,
234 __SIGRTMIN + 59,
235 __SIGRTMIN + 60,
236 __SIGRTMIN + 61,
237 __SIGRTMIN + 62,
238 __SIGRTMIN + 63,
239 __SIGRTMIN + 64,
240 __SIGRTMIN + 65,
241 __SIGRTMIN + 66,
242 __SIGRTMIN + 67,
243 __SIGRTMIN + 68,
244 __SIGRTMIN + 69,
245 __SIGRTMIN + 70,
246 __SIGRTMIN + 71,
247 __SIGRTMIN + 72,
248 __SIGRTMIN + 73,
249 __SIGRTMIN + 74,
250 __SIGRTMIN + 75,
251 __SIGRTMIN + 76,
252 __SIGRTMIN + 77,
253 __SIGRTMIN + 78,
254 __SIGRTMIN + 79,
255 __SIGRTMIN + 80,
256 __SIGRTMIN + 81,
257 __SIGRTMIN + 82,
258 __SIGRTMIN + 83,
259 __SIGRTMIN + 84,
260 __SIGRTMIN + 85,
261 __SIGRTMIN + 86,
262 __SIGRTMIN + 87,
263 __SIGRTMIN + 88,
264 __SIGRTMIN + 89,
265 __SIGRTMIN + 90,
266 __SIGRTMIN + 91,
267 __SIGRTMIN + 92,
268 __SIGRTMIN + 93,
269 __SIGRTMIN + 94,
270 __SIGRTMIN + 95,
271 -1, /* SIGINFO */
272 -1, /* UNKNOWN */
273 -1, /* DEFAULT */
274 -1,
275 -1,
276 -1,
277 -1,
278 -1,
279 -1
280 #endif
281 };
282 #else
283 /* In system mode we only need SIGINT and SIGTRAP; other signals
284 are not yet supported. */
285
286 enum {
287 TARGET_SIGINT = 2,
288 TARGET_SIGTRAP = 5
289 };
290
291 static int gdb_signal_table[] = {
292 -1,
293 -1,
294 TARGET_SIGINT,
295 -1,
296 -1,
297 TARGET_SIGTRAP
298 };
299 #endif
300
301 #ifdef CONFIG_USER_ONLY
302 static int target_signal_to_gdb (int sig)
303 {
304 int i;
305 for (i = 0; i < ARRAY_SIZE (gdb_signal_table); i++)
306 if (gdb_signal_table[i] == sig)
307 return i;
308 return GDB_SIGNAL_UNKNOWN;
309 }
310 #endif
311
312 static int gdb_signal_to_target (int sig)
313 {
314 if (sig < ARRAY_SIZE (gdb_signal_table))
315 return gdb_signal_table[sig];
316 else
317 return -1;
318 }
319
320 typedef struct GDBRegisterState {
321 int base_reg;
322 int num_regs;
323 gdb_get_reg_cb get_reg;
324 gdb_set_reg_cb set_reg;
325 const char *xml;
326 struct GDBRegisterState *next;
327 } GDBRegisterState;
328
329 typedef struct GDBProcess {
330 uint32_t pid;
331 bool attached;
332
333 char target_xml[1024];
334 } GDBProcess;
335
336 enum RSState {
337 RS_INACTIVE,
338 RS_IDLE,
339 RS_GETLINE,
340 RS_GETLINE_ESC,
341 RS_GETLINE_RLE,
342 RS_CHKSUM1,
343 RS_CHKSUM2,
344 };
345 typedef struct GDBState {
346 bool init; /* have we been initialised? */
347 CPUState *c_cpu; /* current CPU for step/continue ops */
348 CPUState *g_cpu; /* current CPU for other ops */
349 CPUState *query_cpu; /* for q{f|s}ThreadInfo */
350 enum RSState state; /* parsing state */
351 char line_buf[MAX_PACKET_LENGTH];
352 int line_buf_index;
353 int line_sum; /* running checksum */
354 int line_csum; /* checksum at the end of the packet */
355 GByteArray *last_packet;
356 int signal;
357 #ifdef CONFIG_USER_ONLY
358 int fd;
359 char *socket_path;
360 int running_state;
361 #else
362 CharBackend chr;
363 Chardev *mon_chr;
364 #endif
365 bool multiprocess;
366 GDBProcess *processes;
367 int process_num;
368 char syscall_buf[256];
369 gdb_syscall_complete_cb current_syscall_cb;
370 GString *str_buf;
371 GByteArray *mem_buf;
372 int sstep_flags;
373 int supported_sstep_flags;
374 } GDBState;
375
376 static GDBState gdbserver_state;
377
378 static void init_gdbserver_state(void)
379 {
380 g_assert(!gdbserver_state.init);
381 memset(&gdbserver_state, 0, sizeof(GDBState));
382 gdbserver_state.init = true;
383 gdbserver_state.str_buf = g_string_new(NULL);
384 gdbserver_state.mem_buf = g_byte_array_sized_new(MAX_PACKET_LENGTH);
385 gdbserver_state.last_packet = g_byte_array_sized_new(MAX_PACKET_LENGTH + 4);
386
387 /*
388 * What single-step modes are supported is accelerator dependent.
389 * By default try to use no IRQs and no timers while single
390 * stepping so as to make single stepping like a typical ICE HW step.
391 */
392 gdbserver_state.supported_sstep_flags = accel_supported_gdbstub_sstep_flags();
393 gdbserver_state.sstep_flags = SSTEP_ENABLE | SSTEP_NOIRQ | SSTEP_NOTIMER;
394 gdbserver_state.sstep_flags &= gdbserver_state.supported_sstep_flags;
395 }
396
397 #ifndef CONFIG_USER_ONLY
398 static void reset_gdbserver_state(void)
399 {
400 g_free(gdbserver_state.processes);
401 gdbserver_state.processes = NULL;
402 gdbserver_state.process_num = 0;
403 }
404 #endif
405
406 bool gdb_has_xml;
407
408 #ifdef CONFIG_USER_ONLY
409
410 static int get_char(void)
411 {
412 uint8_t ch;
413 int ret;
414
415 for(;;) {
416 ret = recv(gdbserver_state.fd, &ch, 1, 0);
417 if (ret < 0) {
418 if (errno == ECONNRESET)
419 gdbserver_state.fd = -1;
420 if (errno != EINTR)
421 return -1;
422 } else if (ret == 0) {
423 close(gdbserver_state.fd);
424 gdbserver_state.fd = -1;
425 return -1;
426 } else {
427 break;
428 }
429 }
430 return ch;
431 }
432 #endif
433
434 /*
435 * Return true if there is a GDB currently connected to the stub
436 * and attached to a CPU
437 */
438 static bool gdb_attached(void)
439 {
440 return gdbserver_state.init && gdbserver_state.c_cpu;
441 }
442
443 static enum {
444 GDB_SYS_UNKNOWN,
445 GDB_SYS_ENABLED,
446 GDB_SYS_DISABLED,
447 } gdb_syscall_mode;
448
449 /* Decide if either remote gdb syscalls or native file IO should be used. */
450 int use_gdb_syscalls(void)
451 {
452 SemihostingTarget target = semihosting_get_target();
453 if (target == SEMIHOSTING_TARGET_NATIVE) {
454 /* -semihosting-config target=native */
455 return false;
456 } else if (target == SEMIHOSTING_TARGET_GDB) {
457 /* -semihosting-config target=gdb */
458 return true;
459 }
460
461 /* -semihosting-config target=auto */
462 /* On the first call check if gdb is connected and remember. */
463 if (gdb_syscall_mode == GDB_SYS_UNKNOWN) {
464 gdb_syscall_mode = gdb_attached() ? GDB_SYS_ENABLED : GDB_SYS_DISABLED;
465 }
466 return gdb_syscall_mode == GDB_SYS_ENABLED;
467 }
468
469 static bool stub_can_reverse(void)
470 {
471 #ifdef CONFIG_USER_ONLY
472 return false;
473 #else
474 return replay_mode == REPLAY_MODE_PLAY;
475 #endif
476 }
477
478 /* Resume execution. */
479 static inline void gdb_continue(void)
480 {
481
482 #ifdef CONFIG_USER_ONLY
483 gdbserver_state.running_state = 1;
484 trace_gdbstub_op_continue();
485 #else
486 if (!runstate_needs_reset()) {
487 trace_gdbstub_op_continue();
488 vm_start();
489 }
490 #endif
491 }
492
493 /*
494 * Resume execution, per CPU actions. For user-mode emulation it's
495 * equivalent to gdb_continue.
496 */
497 static int gdb_continue_partial(char *newstates)
498 {
499 CPUState *cpu;
500 int res = 0;
501 #ifdef CONFIG_USER_ONLY
502 /*
503 * This is not exactly accurate, but it's an improvement compared to the
504 * previous situation, where only one CPU would be single-stepped.
505 */
506 CPU_FOREACH(cpu) {
507 if (newstates[cpu->cpu_index] == 's') {
508 trace_gdbstub_op_stepping(cpu->cpu_index);
509 cpu_single_step(cpu, gdbserver_state.sstep_flags);
510 }
511 }
512 gdbserver_state.running_state = 1;
513 #else
514 int flag = 0;
515
516 if (!runstate_needs_reset()) {
517 bool step_requested = false;
518 CPU_FOREACH(cpu) {
519 if (newstates[cpu->cpu_index] == 's') {
520 step_requested = true;
521 break;
522 }
523 }
524
525 if (vm_prepare_start(step_requested)) {
526 return 0;
527 }
528
529 CPU_FOREACH(cpu) {
530 switch (newstates[cpu->cpu_index]) {
531 case 0:
532 case 1:
533 break; /* nothing to do here */
534 case 's':
535 trace_gdbstub_op_stepping(cpu->cpu_index);
536 cpu_single_step(cpu, gdbserver_state.sstep_flags);
537 cpu_resume(cpu);
538 flag = 1;
539 break;
540 case 'c':
541 trace_gdbstub_op_continue_cpu(cpu->cpu_index);
542 cpu_resume(cpu);
543 flag = 1;
544 break;
545 default:
546 res = -1;
547 break;
548 }
549 }
550 }
551 if (flag) {
552 qemu_clock_enable(QEMU_CLOCK_VIRTUAL, true);
553 }
554 #endif
555 return res;
556 }
557
558 static void put_buffer(const uint8_t *buf, int len)
559 {
560 #ifdef CONFIG_USER_ONLY
561 int ret;
562
563 while (len > 0) {
564 ret = send(gdbserver_state.fd, buf, len, 0);
565 if (ret < 0) {
566 if (errno != EINTR)
567 return;
568 } else {
569 buf += ret;
570 len -= ret;
571 }
572 }
573 #else
574 /* XXX this blocks entire thread. Rewrite to use
575 * qemu_chr_fe_write and background I/O callbacks */
576 qemu_chr_fe_write_all(&gdbserver_state.chr, buf, len);
577 #endif
578 }
579
580 static inline int fromhex(int v)
581 {
582 if (v >= '0' && v <= '9')
583 return v - '0';
584 else if (v >= 'A' && v <= 'F')
585 return v - 'A' + 10;
586 else if (v >= 'a' && v <= 'f')
587 return v - 'a' + 10;
588 else
589 return 0;
590 }
591
592 static inline int tohex(int v)
593 {
594 if (v < 10)
595 return v + '0';
596 else
597 return v - 10 + 'a';
598 }
599
600 /* writes 2*len+1 bytes in buf */
601 static void memtohex(GString *buf, const uint8_t *mem, int len)
602 {
603 int i, c;
604 for(i = 0; i < len; i++) {
605 c = mem[i];
606 g_string_append_c(buf, tohex(c >> 4));
607 g_string_append_c(buf, tohex(c & 0xf));
608 }
609 g_string_append_c(buf, '\0');
610 }
611
612 static void hextomem(GByteArray *mem, const char *buf, int len)
613 {
614 int i;
615
616 for(i = 0; i < len; i++) {
617 guint8 byte = fromhex(buf[0]) << 4 | fromhex(buf[1]);
618 g_byte_array_append(mem, &byte, 1);
619 buf += 2;
620 }
621 }
622
623 static void hexdump(const char *buf, int len,
624 void (*trace_fn)(size_t ofs, char const *text))
625 {
626 char line_buffer[3 * 16 + 4 + 16 + 1];
627
628 size_t i;
629 for (i = 0; i < len || (i & 0xF); ++i) {
630 size_t byte_ofs = i & 15;
631
632 if (byte_ofs == 0) {
633 memset(line_buffer, ' ', 3 * 16 + 4 + 16);
634 line_buffer[3 * 16 + 4 + 16] = 0;
635 }
636
637 size_t col_group = (i >> 2) & 3;
638 size_t hex_col = byte_ofs * 3 + col_group;
639 size_t txt_col = 3 * 16 + 4 + byte_ofs;
640
641 if (i < len) {
642 char value = buf[i];
643
644 line_buffer[hex_col + 0] = tohex((value >> 4) & 0xF);
645 line_buffer[hex_col + 1] = tohex((value >> 0) & 0xF);
646 line_buffer[txt_col + 0] = (value >= ' ' && value < 127)
647 ? value
648 : '.';
649 }
650
651 if (byte_ofs == 0xF)
652 trace_fn(i & -16, line_buffer);
653 }
654 }
655
656 /* return -1 if error, 0 if OK */
657 static int put_packet_binary(const char *buf, int len, bool dump)
658 {
659 int csum, i;
660 uint8_t footer[3];
661
662 if (dump && trace_event_get_state_backends(TRACE_GDBSTUB_IO_BINARYREPLY)) {
663 hexdump(buf, len, trace_gdbstub_io_binaryreply);
664 }
665
666 for(;;) {
667 g_byte_array_set_size(gdbserver_state.last_packet, 0);
668 g_byte_array_append(gdbserver_state.last_packet,
669 (const uint8_t *) "$", 1);
670 g_byte_array_append(gdbserver_state.last_packet,
671 (const uint8_t *) buf, len);
672 csum = 0;
673 for(i = 0; i < len; i++) {
674 csum += buf[i];
675 }
676 footer[0] = '#';
677 footer[1] = tohex((csum >> 4) & 0xf);
678 footer[2] = tohex((csum) & 0xf);
679 g_byte_array_append(gdbserver_state.last_packet, footer, 3);
680
681 put_buffer(gdbserver_state.last_packet->data,
682 gdbserver_state.last_packet->len);
683
684 #ifdef CONFIG_USER_ONLY
685 i = get_char();
686 if (i < 0)
687 return -1;
688 if (i == '+')
689 break;
690 #else
691 break;
692 #endif
693 }
694 return 0;
695 }
696
697 /* return -1 if error, 0 if OK */
698 static int put_packet(const char *buf)
699 {
700 trace_gdbstub_io_reply(buf);
701
702 return put_packet_binary(buf, strlen(buf), false);
703 }
704
705 static void put_strbuf(void)
706 {
707 put_packet(gdbserver_state.str_buf->str);
708 }
709
710 /* Encode data using the encoding for 'x' packets. */
711 static void memtox(GString *buf, const char *mem, int len)
712 {
713 char c;
714
715 while (len--) {
716 c = *(mem++);
717 switch (c) {
718 case '#': case '$': case '*': case '}':
719 g_string_append_c(buf, '}');
720 g_string_append_c(buf, c ^ 0x20);
721 break;
722 default:
723 g_string_append_c(buf, c);
724 break;
725 }
726 }
727 }
728
729 static uint32_t gdb_get_cpu_pid(CPUState *cpu)
730 {
731 /* TODO: In user mode, we should use the task state PID */
732 if (cpu->cluster_index == UNASSIGNED_CLUSTER_INDEX) {
733 /* Return the default process' PID */
734 int index = gdbserver_state.process_num - 1;
735 return gdbserver_state.processes[index].pid;
736 }
737 return cpu->cluster_index + 1;
738 }
739
740 static GDBProcess *gdb_get_process(uint32_t pid)
741 {
742 int i;
743
744 if (!pid) {
745 /* 0 means any process, we take the first one */
746 return &gdbserver_state.processes[0];
747 }
748
749 for (i = 0; i < gdbserver_state.process_num; i++) {
750 if (gdbserver_state.processes[i].pid == pid) {
751 return &gdbserver_state.processes[i];
752 }
753 }
754
755 return NULL;
756 }
757
758 static GDBProcess *gdb_get_cpu_process(CPUState *cpu)
759 {
760 return gdb_get_process(gdb_get_cpu_pid(cpu));
761 }
762
763 static CPUState *find_cpu(uint32_t thread_id)
764 {
765 CPUState *cpu;
766
767 CPU_FOREACH(cpu) {
768 if (cpu_gdb_index(cpu) == thread_id) {
769 return cpu;
770 }
771 }
772
773 return NULL;
774 }
775
776 static CPUState *get_first_cpu_in_process(GDBProcess *process)
777 {
778 CPUState *cpu;
779
780 CPU_FOREACH(cpu) {
781 if (gdb_get_cpu_pid(cpu) == process->pid) {
782 return cpu;
783 }
784 }
785
786 return NULL;
787 }
788
789 static CPUState *gdb_next_cpu_in_process(CPUState *cpu)
790 {
791 uint32_t pid = gdb_get_cpu_pid(cpu);
792 cpu = CPU_NEXT(cpu);
793
794 while (cpu) {
795 if (gdb_get_cpu_pid(cpu) == pid) {
796 break;
797 }
798
799 cpu = CPU_NEXT(cpu);
800 }
801
802 return cpu;
803 }
804
805 /* Return the cpu following @cpu, while ignoring unattached processes. */
806 static CPUState *gdb_next_attached_cpu(CPUState *cpu)
807 {
808 cpu = CPU_NEXT(cpu);
809
810 while (cpu) {
811 if (gdb_get_cpu_process(cpu)->attached) {
812 break;
813 }
814
815 cpu = CPU_NEXT(cpu);
816 }
817
818 return cpu;
819 }
820
821 /* Return the first attached cpu */
822 static CPUState *gdb_first_attached_cpu(void)
823 {
824 CPUState *cpu = first_cpu;
825 GDBProcess *process = gdb_get_cpu_process(cpu);
826
827 if (!process->attached) {
828 return gdb_next_attached_cpu(cpu);
829 }
830
831 return cpu;
832 }
833
834 static CPUState *gdb_get_cpu(uint32_t pid, uint32_t tid)
835 {
836 GDBProcess *process;
837 CPUState *cpu;
838
839 if (!pid && !tid) {
840 /* 0 means any process/thread, we take the first attached one */
841 return gdb_first_attached_cpu();
842 } else if (pid && !tid) {
843 /* any thread in a specific process */
844 process = gdb_get_process(pid);
845
846 if (process == NULL) {
847 return NULL;
848 }
849
850 if (!process->attached) {
851 return NULL;
852 }
853
854 return get_first_cpu_in_process(process);
855 } else {
856 /* a specific thread */
857 cpu = find_cpu(tid);
858
859 if (cpu == NULL) {
860 return NULL;
861 }
862
863 process = gdb_get_cpu_process(cpu);
864
865 if (pid && process->pid != pid) {
866 return NULL;
867 }
868
869 if (!process->attached) {
870 return NULL;
871 }
872
873 return cpu;
874 }
875 }
876
877 static const char *get_feature_xml(const char *p, const char **newp,
878 GDBProcess *process)
879 {
880 size_t len;
881 int i;
882 const char *name;
883 CPUState *cpu = get_first_cpu_in_process(process);
884 CPUClass *cc = CPU_GET_CLASS(cpu);
885
886 len = 0;
887 while (p[len] && p[len] != ':')
888 len++;
889 *newp = p + len;
890
891 name = NULL;
892 if (strncmp(p, "target.xml", len) == 0) {
893 char *buf = process->target_xml;
894 const size_t buf_sz = sizeof(process->target_xml);
895
896 /* Generate the XML description for this CPU. */
897 if (!buf[0]) {
898 GDBRegisterState *r;
899
900 pstrcat(buf, buf_sz,
901 "<?xml version=\"1.0\"?>"
902 "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">"
903 "<target>");
904 if (cc->gdb_arch_name) {
905 gchar *arch = cc->gdb_arch_name(cpu);
906 pstrcat(buf, buf_sz, "<architecture>");
907 pstrcat(buf, buf_sz, arch);
908 pstrcat(buf, buf_sz, "</architecture>");
909 g_free(arch);
910 }
911 pstrcat(buf, buf_sz, "<xi:include href=\"");
912 pstrcat(buf, buf_sz, cc->gdb_core_xml_file);
913 pstrcat(buf, buf_sz, "\"/>");
914 for (r = cpu->gdb_regs; r; r = r->next) {
915 pstrcat(buf, buf_sz, "<xi:include href=\"");
916 pstrcat(buf, buf_sz, r->xml);
917 pstrcat(buf, buf_sz, "\"/>");
918 }
919 pstrcat(buf, buf_sz, "</target>");
920 }
921 return buf;
922 }
923 if (cc->gdb_get_dynamic_xml) {
924 char *xmlname = g_strndup(p, len);
925 const char *xml = cc->gdb_get_dynamic_xml(cpu, xmlname);
926
927 g_free(xmlname);
928 if (xml) {
929 return xml;
930 }
931 }
932 for (i = 0; ; i++) {
933 name = xml_builtin[i][0];
934 if (!name || (strncmp(name, p, len) == 0 && strlen(name) == len))
935 break;
936 }
937 return name ? xml_builtin[i][1] : NULL;
938 }
939
940 static int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg)
941 {
942 CPUClass *cc = CPU_GET_CLASS(cpu);
943 CPUArchState *env = cpu->env_ptr;
944 GDBRegisterState *r;
945
946 if (reg < cc->gdb_num_core_regs) {
947 return cc->gdb_read_register(cpu, buf, reg);
948 }
949
950 for (r = cpu->gdb_regs; r; r = r->next) {
951 if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
952 return r->get_reg(env, buf, reg - r->base_reg);
953 }
954 }
955 return 0;
956 }
957
958 static int gdb_write_register(CPUState *cpu, uint8_t *mem_buf, int reg)
959 {
960 CPUClass *cc = CPU_GET_CLASS(cpu);
961 CPUArchState *env = cpu->env_ptr;
962 GDBRegisterState *r;
963
964 if (reg < cc->gdb_num_core_regs) {
965 return cc->gdb_write_register(cpu, mem_buf, reg);
966 }
967
968 for (r = cpu->gdb_regs; r; r = r->next) {
969 if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
970 return r->set_reg(env, mem_buf, reg - r->base_reg);
971 }
972 }
973 return 0;
974 }
975
976 /* Register a supplemental set of CPU registers. If g_pos is nonzero it
977 specifies the first register number and these registers are included in
978 a standard "g" packet. Direction is relative to gdb, i.e. get_reg is
979 gdb reading a CPU register, and set_reg is gdb modifying a CPU register.
980 */
981
982 void gdb_register_coprocessor(CPUState *cpu,
983 gdb_get_reg_cb get_reg, gdb_set_reg_cb set_reg,
984 int num_regs, const char *xml, int g_pos)
985 {
986 GDBRegisterState *s;
987 GDBRegisterState **p;
988
989 p = &cpu->gdb_regs;
990 while (*p) {
991 /* Check for duplicates. */
992 if (strcmp((*p)->xml, xml) == 0)
993 return;
994 p = &(*p)->next;
995 }
996
997 s = g_new0(GDBRegisterState, 1);
998 s->base_reg = cpu->gdb_num_regs;
999 s->num_regs = num_regs;
1000 s->get_reg = get_reg;
1001 s->set_reg = set_reg;
1002 s->xml = xml;
1003
1004 /* Add to end of list. */
1005 cpu->gdb_num_regs += num_regs;
1006 *p = s;
1007 if (g_pos) {
1008 if (g_pos != s->base_reg) {
1009 error_report("Error: Bad gdb register numbering for '%s', "
1010 "expected %d got %d", xml, g_pos, s->base_reg);
1011 } else {
1012 cpu->gdb_num_g_regs = cpu->gdb_num_regs;
1013 }
1014 }
1015 }
1016
1017 static void gdb_process_breakpoint_remove_all(GDBProcess *p)
1018 {
1019 CPUState *cpu = get_first_cpu_in_process(p);
1020
1021 while (cpu) {
1022 gdb_breakpoint_remove_all(cpu);
1023 cpu = gdb_next_cpu_in_process(cpu);
1024 }
1025 }
1026
1027
1028 static void gdb_set_cpu_pc(target_ulong pc)
1029 {
1030 CPUState *cpu = gdbserver_state.c_cpu;
1031
1032 cpu_synchronize_state(cpu);
1033 cpu_set_pc(cpu, pc);
1034 }
1035
1036 static void gdb_append_thread_id(CPUState *cpu, GString *buf)
1037 {
1038 if (gdbserver_state.multiprocess) {
1039 g_string_append_printf(buf, "p%02x.%02x",
1040 gdb_get_cpu_pid(cpu), cpu_gdb_index(cpu));
1041 } else {
1042 g_string_append_printf(buf, "%02x", cpu_gdb_index(cpu));
1043 }
1044 }
1045
1046 typedef enum GDBThreadIdKind {
1047 GDB_ONE_THREAD = 0,
1048 GDB_ALL_THREADS, /* One process, all threads */
1049 GDB_ALL_PROCESSES,
1050 GDB_READ_THREAD_ERR
1051 } GDBThreadIdKind;
1052
1053 static GDBThreadIdKind read_thread_id(const char *buf, const char **end_buf,
1054 uint32_t *pid, uint32_t *tid)
1055 {
1056 unsigned long p, t;
1057 int ret;
1058
1059 if (*buf == 'p') {
1060 buf++;
1061 ret = qemu_strtoul(buf, &buf, 16, &p);
1062
1063 if (ret) {
1064 return GDB_READ_THREAD_ERR;
1065 }
1066
1067 /* Skip '.' */
1068 buf++;
1069 } else {
1070 p = 1;
1071 }
1072
1073 ret = qemu_strtoul(buf, &buf, 16, &t);
1074
1075 if (ret) {
1076 return GDB_READ_THREAD_ERR;
1077 }
1078
1079 *end_buf = buf;
1080
1081 if (p == -1) {
1082 return GDB_ALL_PROCESSES;
1083 }
1084
1085 if (pid) {
1086 *pid = p;
1087 }
1088
1089 if (t == -1) {
1090 return GDB_ALL_THREADS;
1091 }
1092
1093 if (tid) {
1094 *tid = t;
1095 }
1096
1097 return GDB_ONE_THREAD;
1098 }
1099
1100 /**
1101 * gdb_handle_vcont - Parses and handles a vCont packet.
1102 * returns -ENOTSUP if a command is unsupported, -EINVAL or -ERANGE if there is
1103 * a format error, 0 on success.
1104 */
1105 static int gdb_handle_vcont(const char *p)
1106 {
1107 int res, signal = 0;
1108 char cur_action;
1109 char *newstates;
1110 unsigned long tmp;
1111 uint32_t pid, tid;
1112 GDBProcess *process;
1113 CPUState *cpu;
1114 GDBThreadIdKind kind;
1115 #ifdef CONFIG_USER_ONLY
1116 int max_cpus = 1; /* global variable max_cpus exists only in system mode */
1117
1118 CPU_FOREACH(cpu) {
1119 max_cpus = max_cpus <= cpu->cpu_index ? cpu->cpu_index + 1 : max_cpus;
1120 }
1121 #else
1122 MachineState *ms = MACHINE(qdev_get_machine());
1123 unsigned int max_cpus = ms->smp.max_cpus;
1124 #endif
1125 /* uninitialised CPUs stay 0 */
1126 newstates = g_new0(char, max_cpus);
1127
1128 /* mark valid CPUs with 1 */
1129 CPU_FOREACH(cpu) {
1130 newstates[cpu->cpu_index] = 1;
1131 }
1132
1133 /*
1134 * res keeps track of what error we are returning, with -ENOTSUP meaning
1135 * that the command is unknown or unsupported, thus returning an empty
1136 * packet, while -EINVAL and -ERANGE cause an E22 packet, due to invalid,
1137 * or incorrect parameters passed.
1138 */
1139 res = 0;
1140 while (*p) {
1141 if (*p++ != ';') {
1142 res = -ENOTSUP;
1143 goto out;
1144 }
1145
1146 cur_action = *p++;
1147 if (cur_action == 'C' || cur_action == 'S') {
1148 cur_action = qemu_tolower(cur_action);
1149 res = qemu_strtoul(p, &p, 16, &tmp);
1150 if (res) {
1151 goto out;
1152 }
1153 signal = gdb_signal_to_target(tmp);
1154 } else if (cur_action != 'c' && cur_action != 's') {
1155 /* unknown/invalid/unsupported command */
1156 res = -ENOTSUP;
1157 goto out;
1158 }
1159
1160 if (*p == '\0' || *p == ';') {
1161 /*
1162 * No thread specifier, action is on "all threads". The
1163 * specification is unclear regarding the process to act on. We
1164 * choose all processes.
1165 */
1166 kind = GDB_ALL_PROCESSES;
1167 } else if (*p++ == ':') {
1168 kind = read_thread_id(p, &p, &pid, &tid);
1169 } else {
1170 res = -ENOTSUP;
1171 goto out;
1172 }
1173
1174 switch (kind) {
1175 case GDB_READ_THREAD_ERR:
1176 res = -EINVAL;
1177 goto out;
1178
1179 case GDB_ALL_PROCESSES:
1180 cpu = gdb_first_attached_cpu();
1181 while (cpu) {
1182 if (newstates[cpu->cpu_index] == 1) {
1183 newstates[cpu->cpu_index] = cur_action;
1184 }
1185
1186 cpu = gdb_next_attached_cpu(cpu);
1187 }
1188 break;
1189
1190 case GDB_ALL_THREADS:
1191 process = gdb_get_process(pid);
1192
1193 if (!process->attached) {
1194 res = -EINVAL;
1195 goto out;
1196 }
1197
1198 cpu = get_first_cpu_in_process(process);
1199 while (cpu) {
1200 if (newstates[cpu->cpu_index] == 1) {
1201 newstates[cpu->cpu_index] = cur_action;
1202 }
1203
1204 cpu = gdb_next_cpu_in_process(cpu);
1205 }
1206 break;
1207
1208 case GDB_ONE_THREAD:
1209 cpu = gdb_get_cpu(pid, tid);
1210
1211 /* invalid CPU/thread specified */
1212 if (!cpu) {
1213 res = -EINVAL;
1214 goto out;
1215 }
1216
1217 /* only use if no previous match occourred */
1218 if (newstates[cpu->cpu_index] == 1) {
1219 newstates[cpu->cpu_index] = cur_action;
1220 }
1221 break;
1222 }
1223 }
1224 gdbserver_state.signal = signal;
1225 gdb_continue_partial(newstates);
1226
1227 out:
1228 g_free(newstates);
1229
1230 return res;
1231 }
1232
1233 typedef union GdbCmdVariant {
1234 const char *data;
1235 uint8_t opcode;
1236 unsigned long val_ul;
1237 unsigned long long val_ull;
1238 struct {
1239 GDBThreadIdKind kind;
1240 uint32_t pid;
1241 uint32_t tid;
1242 } thread_id;
1243 } GdbCmdVariant;
1244
1245 #define get_param(p, i) (&g_array_index(p, GdbCmdVariant, i))
1246
1247 static const char *cmd_next_param(const char *param, const char delimiter)
1248 {
1249 static const char all_delimiters[] = ",;:=";
1250 char curr_delimiters[2] = {0};
1251 const char *delimiters;
1252
1253 if (delimiter == '?') {
1254 delimiters = all_delimiters;
1255 } else if (delimiter == '0') {
1256 return strchr(param, '\0');
1257 } else if (delimiter == '.' && *param) {
1258 return param + 1;
1259 } else {
1260 curr_delimiters[0] = delimiter;
1261 delimiters = curr_delimiters;
1262 }
1263
1264 param += strcspn(param, delimiters);
1265 if (*param) {
1266 param++;
1267 }
1268 return param;
1269 }
1270
1271 static int cmd_parse_params(const char *data, const char *schema,
1272 GArray *params)
1273 {
1274 const char *curr_schema, *curr_data;
1275
1276 g_assert(schema);
1277 g_assert(params->len == 0);
1278
1279 curr_schema = schema;
1280 curr_data = data;
1281 while (curr_schema[0] && curr_schema[1] && *curr_data) {
1282 GdbCmdVariant this_param;
1283
1284 switch (curr_schema[0]) {
1285 case 'l':
1286 if (qemu_strtoul(curr_data, &curr_data, 16,
1287 &this_param.val_ul)) {
1288 return -EINVAL;
1289 }
1290 curr_data = cmd_next_param(curr_data, curr_schema[1]);
1291 g_array_append_val(params, this_param);
1292 break;
1293 case 'L':
1294 if (qemu_strtou64(curr_data, &curr_data, 16,
1295 (uint64_t *)&this_param.val_ull)) {
1296 return -EINVAL;
1297 }
1298 curr_data = cmd_next_param(curr_data, curr_schema[1]);
1299 g_array_append_val(params, this_param);
1300 break;
1301 case 's':
1302 this_param.data = curr_data;
1303 curr_data = cmd_next_param(curr_data, curr_schema[1]);
1304 g_array_append_val(params, this_param);
1305 break;
1306 case 'o':
1307 this_param.opcode = *(uint8_t *)curr_data;
1308 curr_data = cmd_next_param(curr_data, curr_schema[1]);
1309 g_array_append_val(params, this_param);
1310 break;
1311 case 't':
1312 this_param.thread_id.kind =
1313 read_thread_id(curr_data, &curr_data,
1314 &this_param.thread_id.pid,
1315 &this_param.thread_id.tid);
1316 curr_data = cmd_next_param(curr_data, curr_schema[1]);
1317 g_array_append_val(params, this_param);
1318 break;
1319 case '?':
1320 curr_data = cmd_next_param(curr_data, curr_schema[1]);
1321 break;
1322 default:
1323 return -EINVAL;
1324 }
1325 curr_schema += 2;
1326 }
1327
1328 return 0;
1329 }
1330
1331 typedef void (*GdbCmdHandler)(GArray *params, void *user_ctx);
1332
1333 /*
1334 * cmd_startswith -> cmd is compared using startswith
1335 *
1336 *
1337 * schema definitions:
1338 * Each schema parameter entry consists of 2 chars,
1339 * the first char represents the parameter type handling
1340 * the second char represents the delimiter for the next parameter
1341 *
1342 * Currently supported schema types:
1343 * 'l' -> unsigned long (stored in .val_ul)
1344 * 'L' -> unsigned long long (stored in .val_ull)
1345 * 's' -> string (stored in .data)
1346 * 'o' -> single char (stored in .opcode)
1347 * 't' -> thread id (stored in .thread_id)
1348 * '?' -> skip according to delimiter
1349 *
1350 * Currently supported delimiters:
1351 * '?' -> Stop at any delimiter (",;:=\0")
1352 * '0' -> Stop at "\0"
1353 * '.' -> Skip 1 char unless reached "\0"
1354 * Any other value is treated as the delimiter value itself
1355 */
1356 typedef struct GdbCmdParseEntry {
1357 GdbCmdHandler handler;
1358 const char *cmd;
1359 bool cmd_startswith;
1360 const char *schema;
1361 } GdbCmdParseEntry;
1362
1363 static inline int startswith(const char *string, const char *pattern)
1364 {
1365 return !strncmp(string, pattern, strlen(pattern));
1366 }
1367
1368 static int process_string_cmd(void *user_ctx, const char *data,
1369 const GdbCmdParseEntry *cmds, int num_cmds)
1370 {
1371 int i;
1372 g_autoptr(GArray) params = g_array_new(false, true, sizeof(GdbCmdVariant));
1373
1374 if (!cmds) {
1375 return -1;
1376 }
1377
1378 for (i = 0; i < num_cmds; i++) {
1379 const GdbCmdParseEntry *cmd = &cmds[i];
1380 g_assert(cmd->handler && cmd->cmd);
1381
1382 if ((cmd->cmd_startswith && !startswith(data, cmd->cmd)) ||
1383 (!cmd->cmd_startswith && strcmp(cmd->cmd, data))) {
1384 continue;
1385 }
1386
1387 if (cmd->schema) {
1388 if (cmd_parse_params(&data[strlen(cmd->cmd)],
1389 cmd->schema, params)) {
1390 return -1;
1391 }
1392 }
1393
1394 cmd->handler(params, user_ctx);
1395 return 0;
1396 }
1397
1398 return -1;
1399 }
1400
1401 static void run_cmd_parser(const char *data, const GdbCmdParseEntry *cmd)
1402 {
1403 if (!data) {
1404 return;
1405 }
1406
1407 g_string_set_size(gdbserver_state.str_buf, 0);
1408 g_byte_array_set_size(gdbserver_state.mem_buf, 0);
1409
1410 /* In case there was an error during the command parsing we must
1411 * send a NULL packet to indicate the command is not supported */
1412 if (process_string_cmd(NULL, data, cmd, 1)) {
1413 put_packet("");
1414 }
1415 }
1416
1417 static void handle_detach(GArray *params, void *user_ctx)
1418 {
1419 GDBProcess *process;
1420 uint32_t pid = 1;
1421
1422 if (gdbserver_state.multiprocess) {
1423 if (!params->len) {
1424 put_packet("E22");
1425 return;
1426 }
1427
1428 pid = get_param(params, 0)->val_ul;
1429 }
1430
1431 process = gdb_get_process(pid);
1432 gdb_process_breakpoint_remove_all(process);
1433 process->attached = false;
1434
1435 if (pid == gdb_get_cpu_pid(gdbserver_state.c_cpu)) {
1436 gdbserver_state.c_cpu = gdb_first_attached_cpu();
1437 }
1438
1439 if (pid == gdb_get_cpu_pid(gdbserver_state.g_cpu)) {
1440 gdbserver_state.g_cpu = gdb_first_attached_cpu();
1441 }
1442
1443 if (!gdbserver_state.c_cpu) {
1444 /* No more process attached */
1445 gdb_syscall_mode = GDB_SYS_DISABLED;
1446 gdb_continue();
1447 }
1448 put_packet("OK");
1449 }
1450
1451 static void handle_thread_alive(GArray *params, void *user_ctx)
1452 {
1453 CPUState *cpu;
1454
1455 if (!params->len) {
1456 put_packet("E22");
1457 return;
1458 }
1459
1460 if (get_param(params, 0)->thread_id.kind == GDB_READ_THREAD_ERR) {
1461 put_packet("E22");
1462 return;
1463 }
1464
1465 cpu = gdb_get_cpu(get_param(params, 0)->thread_id.pid,
1466 get_param(params, 0)->thread_id.tid);
1467 if (!cpu) {
1468 put_packet("E22");
1469 return;
1470 }
1471
1472 put_packet("OK");
1473 }
1474
1475 static void handle_continue(GArray *params, void *user_ctx)
1476 {
1477 if (params->len) {
1478 gdb_set_cpu_pc(get_param(params, 0)->val_ull);
1479 }
1480
1481 gdbserver_state.signal = 0;
1482 gdb_continue();
1483 }
1484
1485 static void handle_cont_with_sig(GArray *params, void *user_ctx)
1486 {
1487 unsigned long signal = 0;
1488
1489 /*
1490 * Note: C sig;[addr] is currently unsupported and we simply
1491 * omit the addr parameter
1492 */
1493 if (params->len) {
1494 signal = get_param(params, 0)->val_ul;
1495 }
1496
1497 gdbserver_state.signal = gdb_signal_to_target(signal);
1498 if (gdbserver_state.signal == -1) {
1499 gdbserver_state.signal = 0;
1500 }
1501 gdb_continue();
1502 }
1503
1504 static void handle_set_thread(GArray *params, void *user_ctx)
1505 {
1506 CPUState *cpu;
1507
1508 if (params->len != 2) {
1509 put_packet("E22");
1510 return;
1511 }
1512
1513 if (get_param(params, 1)->thread_id.kind == GDB_READ_THREAD_ERR) {
1514 put_packet("E22");
1515 return;
1516 }
1517
1518 if (get_param(params, 1)->thread_id.kind != GDB_ONE_THREAD) {
1519 put_packet("OK");
1520 return;
1521 }
1522
1523 cpu = gdb_get_cpu(get_param(params, 1)->thread_id.pid,
1524 get_param(params, 1)->thread_id.tid);
1525 if (!cpu) {
1526 put_packet("E22");
1527 return;
1528 }
1529
1530 /*
1531 * Note: This command is deprecated and modern gdb's will be using the
1532 * vCont command instead.
1533 */
1534 switch (get_param(params, 0)->opcode) {
1535 case 'c':
1536 gdbserver_state.c_cpu = cpu;
1537 put_packet("OK");
1538 break;
1539 case 'g':
1540 gdbserver_state.g_cpu = cpu;
1541 put_packet("OK");
1542 break;
1543 default:
1544 put_packet("E22");
1545 break;
1546 }
1547 }
1548
1549 static void handle_insert_bp(GArray *params, void *user_ctx)
1550 {
1551 int res;
1552
1553 if (params->len != 3) {
1554 put_packet("E22");
1555 return;
1556 }
1557
1558 res = gdb_breakpoint_insert(gdbserver_state.c_cpu,
1559 get_param(params, 0)->val_ul,
1560 get_param(params, 1)->val_ull,
1561 get_param(params, 2)->val_ull);
1562 if (res >= 0) {
1563 put_packet("OK");
1564 return;
1565 } else if (res == -ENOSYS) {
1566 put_packet("");
1567 return;
1568 }
1569
1570 put_packet("E22");
1571 }
1572
1573 static void handle_remove_bp(GArray *params, void *user_ctx)
1574 {
1575 int res;
1576
1577 if (params->len != 3) {
1578 put_packet("E22");
1579 return;
1580 }
1581
1582 res = gdb_breakpoint_remove(gdbserver_state.c_cpu,
1583 get_param(params, 0)->val_ul,
1584 get_param(params, 1)->val_ull,
1585 get_param(params, 2)->val_ull);
1586 if (res >= 0) {
1587 put_packet("OK");
1588 return;
1589 } else if (res == -ENOSYS) {
1590 put_packet("");
1591 return;
1592 }
1593
1594 put_packet("E22");
1595 }
1596
1597 /*
1598 * handle_set/get_reg
1599 *
1600 * Older gdb are really dumb, and don't use 'G/g' if 'P/p' is available.
1601 * This works, but can be very slow. Anything new enough to understand
1602 * XML also knows how to use this properly. However to use this we
1603 * need to define a local XML file as well as be talking to a
1604 * reasonably modern gdb. Responding with an empty packet will cause
1605 * the remote gdb to fallback to older methods.
1606 */
1607
1608 static void handle_set_reg(GArray *params, void *user_ctx)
1609 {
1610 int reg_size;
1611
1612 if (!gdb_has_xml) {
1613 put_packet("");
1614 return;
1615 }
1616
1617 if (params->len != 2) {
1618 put_packet("E22");
1619 return;
1620 }
1621
1622 reg_size = strlen(get_param(params, 1)->data) / 2;
1623 hextomem(gdbserver_state.mem_buf, get_param(params, 1)->data, reg_size);
1624 gdb_write_register(gdbserver_state.g_cpu, gdbserver_state.mem_buf->data,
1625 get_param(params, 0)->val_ull);
1626 put_packet("OK");
1627 }
1628
1629 static void handle_get_reg(GArray *params, void *user_ctx)
1630 {
1631 int reg_size;
1632
1633 if (!gdb_has_xml) {
1634 put_packet("");
1635 return;
1636 }
1637
1638 if (!params->len) {
1639 put_packet("E14");
1640 return;
1641 }
1642
1643 reg_size = gdb_read_register(gdbserver_state.g_cpu,
1644 gdbserver_state.mem_buf,
1645 get_param(params, 0)->val_ull);
1646 if (!reg_size) {
1647 put_packet("E14");
1648 return;
1649 } else {
1650 g_byte_array_set_size(gdbserver_state.mem_buf, reg_size);
1651 }
1652
1653 memtohex(gdbserver_state.str_buf, gdbserver_state.mem_buf->data, reg_size);
1654 put_strbuf();
1655 }
1656
1657 static void handle_write_mem(GArray *params, void *user_ctx)
1658 {
1659 if (params->len != 3) {
1660 put_packet("E22");
1661 return;
1662 }
1663
1664 /* hextomem() reads 2*len bytes */
1665 if (get_param(params, 1)->val_ull >
1666 strlen(get_param(params, 2)->data) / 2) {
1667 put_packet("E22");
1668 return;
1669 }
1670
1671 hextomem(gdbserver_state.mem_buf, get_param(params, 2)->data,
1672 get_param(params, 1)->val_ull);
1673 if (target_memory_rw_debug(gdbserver_state.g_cpu,
1674 get_param(params, 0)->val_ull,
1675 gdbserver_state.mem_buf->data,
1676 gdbserver_state.mem_buf->len, true)) {
1677 put_packet("E14");
1678 return;
1679 }
1680
1681 put_packet("OK");
1682 }
1683
1684 static void handle_read_mem(GArray *params, void *user_ctx)
1685 {
1686 if (params->len != 2) {
1687 put_packet("E22");
1688 return;
1689 }
1690
1691 /* memtohex() doubles the required space */
1692 if (get_param(params, 1)->val_ull > MAX_PACKET_LENGTH / 2) {
1693 put_packet("E22");
1694 return;
1695 }
1696
1697 g_byte_array_set_size(gdbserver_state.mem_buf,
1698 get_param(params, 1)->val_ull);
1699
1700 if (target_memory_rw_debug(gdbserver_state.g_cpu,
1701 get_param(params, 0)->val_ull,
1702 gdbserver_state.mem_buf->data,
1703 gdbserver_state.mem_buf->len, false)) {
1704 put_packet("E14");
1705 return;
1706 }
1707
1708 memtohex(gdbserver_state.str_buf, gdbserver_state.mem_buf->data,
1709 gdbserver_state.mem_buf->len);
1710 put_strbuf();
1711 }
1712
1713 static void handle_write_all_regs(GArray *params, void *user_ctx)
1714 {
1715 target_ulong addr, len;
1716 uint8_t *registers;
1717 int reg_size;
1718
1719 if (!params->len) {
1720 return;
1721 }
1722
1723 cpu_synchronize_state(gdbserver_state.g_cpu);
1724 len = strlen(get_param(params, 0)->data) / 2;
1725 hextomem(gdbserver_state.mem_buf, get_param(params, 0)->data, len);
1726 registers = gdbserver_state.mem_buf->data;
1727 for (addr = 0; addr < gdbserver_state.g_cpu->gdb_num_g_regs && len > 0;
1728 addr++) {
1729 reg_size = gdb_write_register(gdbserver_state.g_cpu, registers, addr);
1730 len -= reg_size;
1731 registers += reg_size;
1732 }
1733 put_packet("OK");
1734 }
1735
1736 static void handle_read_all_regs(GArray *params, void *user_ctx)
1737 {
1738 target_ulong addr, len;
1739
1740 cpu_synchronize_state(gdbserver_state.g_cpu);
1741 g_byte_array_set_size(gdbserver_state.mem_buf, 0);
1742 len = 0;
1743 for (addr = 0; addr < gdbserver_state.g_cpu->gdb_num_g_regs; addr++) {
1744 len += gdb_read_register(gdbserver_state.g_cpu,
1745 gdbserver_state.mem_buf,
1746 addr);
1747 }
1748 g_assert(len == gdbserver_state.mem_buf->len);
1749
1750 memtohex(gdbserver_state.str_buf, gdbserver_state.mem_buf->data, len);
1751 put_strbuf();
1752 }
1753
1754 static void handle_file_io(GArray *params, void *user_ctx)
1755 {
1756 if (params->len >= 1 && gdbserver_state.current_syscall_cb) {
1757 uint64_t ret;
1758 int err;
1759
1760 ret = get_param(params, 0)->val_ull;
1761 if (params->len >= 2) {
1762 err = get_param(params, 1)->val_ull;
1763 } else {
1764 err = 0;
1765 }
1766
1767 /* Convert GDB error numbers back to host error numbers. */
1768 #define E(X) case GDB_E##X: err = E##X; break
1769 switch (err) {
1770 case 0:
1771 break;
1772 E(PERM);
1773 E(NOENT);
1774 E(INTR);
1775 E(BADF);
1776 E(ACCES);
1777 E(FAULT);
1778 E(BUSY);
1779 E(EXIST);
1780 E(NODEV);
1781 E(NOTDIR);
1782 E(ISDIR);
1783 E(INVAL);
1784 E(NFILE);
1785 E(MFILE);
1786 E(FBIG);
1787 E(NOSPC);
1788 E(SPIPE);
1789 E(ROFS);
1790 E(NAMETOOLONG);
1791 default:
1792 err = EINVAL;
1793 break;
1794 }
1795 #undef E
1796
1797 gdbserver_state.current_syscall_cb(gdbserver_state.c_cpu, ret, err);
1798 gdbserver_state.current_syscall_cb = NULL;
1799 }
1800
1801 if (params->len >= 3 && get_param(params, 2)->opcode == (uint8_t)'C') {
1802 put_packet("T02");
1803 return;
1804 }
1805
1806 gdb_continue();
1807 }
1808
1809 static void handle_step(GArray *params, void *user_ctx)
1810 {
1811 if (params->len) {
1812 gdb_set_cpu_pc((target_ulong)get_param(params, 0)->val_ull);
1813 }
1814
1815 cpu_single_step(gdbserver_state.c_cpu, gdbserver_state.sstep_flags);
1816 gdb_continue();
1817 }
1818
1819 static void handle_backward(GArray *params, void *user_ctx)
1820 {
1821 if (!stub_can_reverse()) {
1822 put_packet("E22");
1823 }
1824 if (params->len == 1) {
1825 switch (get_param(params, 0)->opcode) {
1826 case 's':
1827 if (replay_reverse_step()) {
1828 gdb_continue();
1829 } else {
1830 put_packet("E14");
1831 }
1832 return;
1833 case 'c':
1834 if (replay_reverse_continue()) {
1835 gdb_continue();
1836 } else {
1837 put_packet("E14");
1838 }
1839 return;
1840 }
1841 }
1842
1843 /* Default invalid command */
1844 put_packet("");
1845 }
1846
1847 static void handle_v_cont_query(GArray *params, void *user_ctx)
1848 {
1849 put_packet("vCont;c;C;s;S");
1850 }
1851
1852 static void handle_v_cont(GArray *params, void *user_ctx)
1853 {
1854 int res;
1855
1856 if (!params->len) {
1857 return;
1858 }
1859
1860 res = gdb_handle_vcont(get_param(params, 0)->data);
1861 if ((res == -EINVAL) || (res == -ERANGE)) {
1862 put_packet("E22");
1863 } else if (res) {
1864 put_packet("");
1865 }
1866 }
1867
1868 static void handle_v_attach(GArray *params, void *user_ctx)
1869 {
1870 GDBProcess *process;
1871 CPUState *cpu;
1872
1873 g_string_assign(gdbserver_state.str_buf, "E22");
1874 if (!params->len) {
1875 goto cleanup;
1876 }
1877
1878 process = gdb_get_process(get_param(params, 0)->val_ul);
1879 if (!process) {
1880 goto cleanup;
1881 }
1882
1883 cpu = get_first_cpu_in_process(process);
1884 if (!cpu) {
1885 goto cleanup;
1886 }
1887
1888 process->attached = true;
1889 gdbserver_state.g_cpu = cpu;
1890 gdbserver_state.c_cpu = cpu;
1891
1892 g_string_printf(gdbserver_state.str_buf, "T%02xthread:", GDB_SIGNAL_TRAP);
1893 gdb_append_thread_id(cpu, gdbserver_state.str_buf);
1894 g_string_append_c(gdbserver_state.str_buf, ';');
1895 cleanup:
1896 put_strbuf();
1897 }
1898
1899 static void handle_v_kill(GArray *params, void *user_ctx)
1900 {
1901 /* Kill the target */
1902 put_packet("OK");
1903 error_report("QEMU: Terminated via GDBstub");
1904 gdb_exit(0);
1905 exit(0);
1906 }
1907
1908 static const GdbCmdParseEntry gdb_v_commands_table[] = {
1909 /* Order is important if has same prefix */
1910 {
1911 .handler = handle_v_cont_query,
1912 .cmd = "Cont?",
1913 .cmd_startswith = 1
1914 },
1915 {
1916 .handler = handle_v_cont,
1917 .cmd = "Cont",
1918 .cmd_startswith = 1,
1919 .schema = "s0"
1920 },
1921 {
1922 .handler = handle_v_attach,
1923 .cmd = "Attach;",
1924 .cmd_startswith = 1,
1925 .schema = "l0"
1926 },
1927 {
1928 .handler = handle_v_kill,
1929 .cmd = "Kill;",
1930 .cmd_startswith = 1
1931 },
1932 };
1933
1934 static void handle_v_commands(GArray *params, void *user_ctx)
1935 {
1936 if (!params->len) {
1937 return;
1938 }
1939
1940 if (process_string_cmd(NULL, get_param(params, 0)->data,
1941 gdb_v_commands_table,
1942 ARRAY_SIZE(gdb_v_commands_table))) {
1943 put_packet("");
1944 }
1945 }
1946
1947 static void handle_query_qemu_sstepbits(GArray *params, void *user_ctx)
1948 {
1949 g_string_printf(gdbserver_state.str_buf, "ENABLE=%x", SSTEP_ENABLE);
1950
1951 if (gdbserver_state.supported_sstep_flags & SSTEP_NOIRQ) {
1952 g_string_append_printf(gdbserver_state.str_buf, ",NOIRQ=%x",
1953 SSTEP_NOIRQ);
1954 }
1955
1956 if (gdbserver_state.supported_sstep_flags & SSTEP_NOTIMER) {
1957 g_string_append_printf(gdbserver_state.str_buf, ",NOTIMER=%x",
1958 SSTEP_NOTIMER);
1959 }
1960
1961 put_strbuf();
1962 }
1963
1964 static void handle_set_qemu_sstep(GArray *params, void *user_ctx)
1965 {
1966 int new_sstep_flags;
1967
1968 if (!params->len) {
1969 return;
1970 }
1971
1972 new_sstep_flags = get_param(params, 0)->val_ul;
1973
1974 if (new_sstep_flags & ~gdbserver_state.supported_sstep_flags) {
1975 put_packet("E22");
1976 return;
1977 }
1978
1979 gdbserver_state.sstep_flags = new_sstep_flags;
1980 put_packet("OK");
1981 }
1982
1983 static void handle_query_qemu_sstep(GArray *params, void *user_ctx)
1984 {
1985 g_string_printf(gdbserver_state.str_buf, "0x%x",
1986 gdbserver_state.sstep_flags);
1987 put_strbuf();
1988 }
1989
1990 static void handle_query_curr_tid(GArray *params, void *user_ctx)
1991 {
1992 CPUState *cpu;
1993 GDBProcess *process;
1994
1995 /*
1996 * "Current thread" remains vague in the spec, so always return
1997 * the first thread of the current process (gdb returns the
1998 * first thread).
1999 */
2000 process = gdb_get_cpu_process(gdbserver_state.g_cpu);
2001 cpu = get_first_cpu_in_process(process);
2002 g_string_assign(gdbserver_state.str_buf, "QC");
2003 gdb_append_thread_id(cpu, gdbserver_state.str_buf);
2004 put_strbuf();
2005 }
2006
2007 static void handle_query_threads(GArray *params, void *user_ctx)
2008 {
2009 if (!gdbserver_state.query_cpu) {
2010 put_packet("l");
2011 return;
2012 }
2013
2014 g_string_assign(gdbserver_state.str_buf, "m");
2015 gdb_append_thread_id(gdbserver_state.query_cpu, gdbserver_state.str_buf);
2016 put_strbuf();
2017 gdbserver_state.query_cpu = gdb_next_attached_cpu(gdbserver_state.query_cpu);
2018 }
2019
2020 static void handle_query_first_threads(GArray *params, void *user_ctx)
2021 {
2022 gdbserver_state.query_cpu = gdb_first_attached_cpu();
2023 handle_query_threads(params, user_ctx);
2024 }
2025
2026 static void handle_query_thread_extra(GArray *params, void *user_ctx)
2027 {
2028 g_autoptr(GString) rs = g_string_new(NULL);
2029 CPUState *cpu;
2030
2031 if (!params->len ||
2032 get_param(params, 0)->thread_id.kind == GDB_READ_THREAD_ERR) {
2033 put_packet("E22");
2034 return;
2035 }
2036
2037 cpu = gdb_get_cpu(get_param(params, 0)->thread_id.pid,
2038 get_param(params, 0)->thread_id.tid);
2039 if (!cpu) {
2040 return;
2041 }
2042
2043 cpu_synchronize_state(cpu);
2044
2045 if (gdbserver_state.multiprocess && (gdbserver_state.process_num > 1)) {
2046 /* Print the CPU model and name in multiprocess mode */
2047 ObjectClass *oc = object_get_class(OBJECT(cpu));
2048 const char *cpu_model = object_class_get_name(oc);
2049 const char *cpu_name =
2050 object_get_canonical_path_component(OBJECT(cpu));
2051 g_string_printf(rs, "%s %s [%s]", cpu_model, cpu_name,
2052 cpu->halted ? "halted " : "running");
2053 } else {
2054 g_string_printf(rs, "CPU#%d [%s]", cpu->cpu_index,
2055 cpu->halted ? "halted " : "running");
2056 }
2057 trace_gdbstub_op_extra_info(rs->str);
2058 memtohex(gdbserver_state.str_buf, (uint8_t *)rs->str, rs->len);
2059 put_strbuf();
2060 }
2061
2062 #ifdef CONFIG_USER_ONLY
2063 static void handle_query_offsets(GArray *params, void *user_ctx)
2064 {
2065 TaskState *ts;
2066
2067 ts = gdbserver_state.c_cpu->opaque;
2068 g_string_printf(gdbserver_state.str_buf,
2069 "Text=" TARGET_ABI_FMT_lx
2070 ";Data=" TARGET_ABI_FMT_lx
2071 ";Bss=" TARGET_ABI_FMT_lx,
2072 ts->info->code_offset,
2073 ts->info->data_offset,
2074 ts->info->data_offset);
2075 put_strbuf();
2076 }
2077 #else
2078 static void handle_query_rcmd(GArray *params, void *user_ctx)
2079 {
2080 const guint8 zero = 0;
2081 int len;
2082
2083 if (!params->len) {
2084 put_packet("E22");
2085 return;
2086 }
2087
2088 len = strlen(get_param(params, 0)->data);
2089 if (len % 2) {
2090 put_packet("E01");
2091 return;
2092 }
2093
2094 g_assert(gdbserver_state.mem_buf->len == 0);
2095 len = len / 2;
2096 hextomem(gdbserver_state.mem_buf, get_param(params, 0)->data, len);
2097 g_byte_array_append(gdbserver_state.mem_buf, &zero, 1);
2098 qemu_chr_be_write(gdbserver_state.mon_chr, gdbserver_state.mem_buf->data,
2099 gdbserver_state.mem_buf->len);
2100 put_packet("OK");
2101 }
2102 #endif
2103
2104 static void handle_query_supported(GArray *params, void *user_ctx)
2105 {
2106 CPUClass *cc;
2107
2108 g_string_printf(gdbserver_state.str_buf, "PacketSize=%x", MAX_PACKET_LENGTH);
2109 cc = CPU_GET_CLASS(first_cpu);
2110 if (cc->gdb_core_xml_file) {
2111 g_string_append(gdbserver_state.str_buf, ";qXfer:features:read+");
2112 }
2113
2114 if (stub_can_reverse()) {
2115 g_string_append(gdbserver_state.str_buf,
2116 ";ReverseStep+;ReverseContinue+");
2117 }
2118
2119 #ifdef CONFIG_USER_ONLY
2120 if (gdbserver_state.c_cpu->opaque) {
2121 g_string_append(gdbserver_state.str_buf, ";qXfer:auxv:read+");
2122 }
2123 #endif
2124
2125 if (params->len &&
2126 strstr(get_param(params, 0)->data, "multiprocess+")) {
2127 gdbserver_state.multiprocess = true;
2128 }
2129
2130 g_string_append(gdbserver_state.str_buf, ";vContSupported+;multiprocess+");
2131 put_strbuf();
2132 }
2133
2134 static void handle_query_xfer_features(GArray *params, void *user_ctx)
2135 {
2136 GDBProcess *process;
2137 CPUClass *cc;
2138 unsigned long len, total_len, addr;
2139 const char *xml;
2140 const char *p;
2141
2142 if (params->len < 3) {
2143 put_packet("E22");
2144 return;
2145 }
2146
2147 process = gdb_get_cpu_process(gdbserver_state.g_cpu);
2148 cc = CPU_GET_CLASS(gdbserver_state.g_cpu);
2149 if (!cc->gdb_core_xml_file) {
2150 put_packet("");
2151 return;
2152 }
2153
2154 gdb_has_xml = true;
2155 p = get_param(params, 0)->data;
2156 xml = get_feature_xml(p, &p, process);
2157 if (!xml) {
2158 put_packet("E00");
2159 return;
2160 }
2161
2162 addr = get_param(params, 1)->val_ul;
2163 len = get_param(params, 2)->val_ul;
2164 total_len = strlen(xml);
2165 if (addr > total_len) {
2166 put_packet("E00");
2167 return;
2168 }
2169
2170 if (len > (MAX_PACKET_LENGTH - 5) / 2) {
2171 len = (MAX_PACKET_LENGTH - 5) / 2;
2172 }
2173
2174 if (len < total_len - addr) {
2175 g_string_assign(gdbserver_state.str_buf, "m");
2176 memtox(gdbserver_state.str_buf, xml + addr, len);
2177 } else {
2178 g_string_assign(gdbserver_state.str_buf, "l");
2179 memtox(gdbserver_state.str_buf, xml + addr, total_len - addr);
2180 }
2181
2182 put_packet_binary(gdbserver_state.str_buf->str,
2183 gdbserver_state.str_buf->len, true);
2184 }
2185
2186 #if defined(CONFIG_USER_ONLY) && defined(CONFIG_LINUX_USER)
2187 static void handle_query_xfer_auxv(GArray *params, void *user_ctx)
2188 {
2189 TaskState *ts;
2190 unsigned long offset, len, saved_auxv, auxv_len;
2191
2192 if (params->len < 2) {
2193 put_packet("E22");
2194 return;
2195 }
2196
2197 offset = get_param(params, 0)->val_ul;
2198 len = get_param(params, 1)->val_ul;
2199 ts = gdbserver_state.c_cpu->opaque;
2200 saved_auxv = ts->info->saved_auxv;
2201 auxv_len = ts->info->auxv_len;
2202
2203 if (offset >= auxv_len) {
2204 put_packet("E00");
2205 return;
2206 }
2207
2208 if (len > (MAX_PACKET_LENGTH - 5) / 2) {
2209 len = (MAX_PACKET_LENGTH - 5) / 2;
2210 }
2211
2212 if (len < auxv_len - offset) {
2213 g_string_assign(gdbserver_state.str_buf, "m");
2214 } else {
2215 g_string_assign(gdbserver_state.str_buf, "l");
2216 len = auxv_len - offset;
2217 }
2218
2219 g_byte_array_set_size(gdbserver_state.mem_buf, len);
2220 if (target_memory_rw_debug(gdbserver_state.g_cpu, saved_auxv + offset,
2221 gdbserver_state.mem_buf->data, len, false)) {
2222 put_packet("E14");
2223 return;
2224 }
2225
2226 memtox(gdbserver_state.str_buf,
2227 (const char *)gdbserver_state.mem_buf->data, len);
2228 put_packet_binary(gdbserver_state.str_buf->str,
2229 gdbserver_state.str_buf->len, true);
2230 }
2231 #endif
2232
2233 static void handle_query_attached(GArray *params, void *user_ctx)
2234 {
2235 put_packet(GDB_ATTACHED);
2236 }
2237
2238 static void handle_query_qemu_supported(GArray *params, void *user_ctx)
2239 {
2240 g_string_printf(gdbserver_state.str_buf, "sstepbits;sstep");
2241 #ifndef CONFIG_USER_ONLY
2242 g_string_append(gdbserver_state.str_buf, ";PhyMemMode");
2243 #endif
2244 put_strbuf();
2245 }
2246
2247 #ifndef CONFIG_USER_ONLY
2248 static void handle_query_qemu_phy_mem_mode(GArray *params,
2249 void *user_ctx)
2250 {
2251 g_string_printf(gdbserver_state.str_buf, "%d", phy_memory_mode);
2252 put_strbuf();
2253 }
2254
2255 static void handle_set_qemu_phy_mem_mode(GArray *params, void *user_ctx)
2256 {
2257 if (!params->len) {
2258 put_packet("E22");
2259 return;
2260 }
2261
2262 if (!get_param(params, 0)->val_ul) {
2263 phy_memory_mode = 0;
2264 } else {
2265 phy_memory_mode = 1;
2266 }
2267 put_packet("OK");
2268 }
2269 #endif
2270
2271 static const GdbCmdParseEntry gdb_gen_query_set_common_table[] = {
2272 /* Order is important if has same prefix */
2273 {
2274 .handler = handle_query_qemu_sstepbits,
2275 .cmd = "qemu.sstepbits",
2276 },
2277 {
2278 .handler = handle_query_qemu_sstep,
2279 .cmd = "qemu.sstep",
2280 },
2281 {
2282 .handler = handle_set_qemu_sstep,
2283 .cmd = "qemu.sstep=",
2284 .cmd_startswith = 1,
2285 .schema = "l0"
2286 },
2287 };
2288
2289 static const GdbCmdParseEntry gdb_gen_query_table[] = {
2290 {
2291 .handler = handle_query_curr_tid,
2292 .cmd = "C",
2293 },
2294 {
2295 .handler = handle_query_threads,
2296 .cmd = "sThreadInfo",
2297 },
2298 {
2299 .handler = handle_query_first_threads,
2300 .cmd = "fThreadInfo",
2301 },
2302 {
2303 .handler = handle_query_thread_extra,
2304 .cmd = "ThreadExtraInfo,",
2305 .cmd_startswith = 1,
2306 .schema = "t0"
2307 },
2308 #ifdef CONFIG_USER_ONLY
2309 {
2310 .handler = handle_query_offsets,
2311 .cmd = "Offsets",
2312 },
2313 #else
2314 {
2315 .handler = handle_query_rcmd,
2316 .cmd = "Rcmd,",
2317 .cmd_startswith = 1,
2318 .schema = "s0"
2319 },
2320 #endif
2321 {
2322 .handler = handle_query_supported,
2323 .cmd = "Supported:",
2324 .cmd_startswith = 1,
2325 .schema = "s0"
2326 },
2327 {
2328 .handler = handle_query_supported,
2329 .cmd = "Supported",
2330 .schema = "s0"
2331 },
2332 {
2333 .handler = handle_query_xfer_features,
2334 .cmd = "Xfer:features:read:",
2335 .cmd_startswith = 1,
2336 .schema = "s:l,l0"
2337 },
2338 #if defined(CONFIG_USER_ONLY) && defined(CONFIG_LINUX_USER)
2339 {
2340 .handler = handle_query_xfer_auxv,
2341 .cmd = "Xfer:auxv:read::",
2342 .cmd_startswith = 1,
2343 .schema = "l,l0"
2344 },
2345 #endif
2346 {
2347 .handler = handle_query_attached,
2348 .cmd = "Attached:",
2349 .cmd_startswith = 1
2350 },
2351 {
2352 .handler = handle_query_attached,
2353 .cmd = "Attached",
2354 },
2355 {
2356 .handler = handle_query_qemu_supported,
2357 .cmd = "qemu.Supported",
2358 },
2359 #ifndef CONFIG_USER_ONLY
2360 {
2361 .handler = handle_query_qemu_phy_mem_mode,
2362 .cmd = "qemu.PhyMemMode",
2363 },
2364 #endif
2365 };
2366
2367 static const GdbCmdParseEntry gdb_gen_set_table[] = {
2368 /* Order is important if has same prefix */
2369 {
2370 .handler = handle_set_qemu_sstep,
2371 .cmd = "qemu.sstep:",
2372 .cmd_startswith = 1,
2373 .schema = "l0"
2374 },
2375 #ifndef CONFIG_USER_ONLY
2376 {
2377 .handler = handle_set_qemu_phy_mem_mode,
2378 .cmd = "qemu.PhyMemMode:",
2379 .cmd_startswith = 1,
2380 .schema = "l0"
2381 },
2382 #endif
2383 };
2384
2385 static void handle_gen_query(GArray *params, void *user_ctx)
2386 {
2387 if (!params->len) {
2388 return;
2389 }
2390
2391 if (!process_string_cmd(NULL, get_param(params, 0)->data,
2392 gdb_gen_query_set_common_table,
2393 ARRAY_SIZE(gdb_gen_query_set_common_table))) {
2394 return;
2395 }
2396
2397 if (process_string_cmd(NULL, get_param(params, 0)->data,
2398 gdb_gen_query_table,
2399 ARRAY_SIZE(gdb_gen_query_table))) {
2400 put_packet("");
2401 }
2402 }
2403
2404 static void handle_gen_set(GArray *params, void *user_ctx)
2405 {
2406 if (!params->len) {
2407 return;
2408 }
2409
2410 if (!process_string_cmd(NULL, get_param(params, 0)->data,
2411 gdb_gen_query_set_common_table,
2412 ARRAY_SIZE(gdb_gen_query_set_common_table))) {
2413 return;
2414 }
2415
2416 if (process_string_cmd(NULL, get_param(params, 0)->data,
2417 gdb_gen_set_table,
2418 ARRAY_SIZE(gdb_gen_set_table))) {
2419 put_packet("");
2420 }
2421 }
2422
2423 static void handle_target_halt(GArray *params, void *user_ctx)
2424 {
2425 g_string_printf(gdbserver_state.str_buf, "T%02xthread:", GDB_SIGNAL_TRAP);
2426 gdb_append_thread_id(gdbserver_state.c_cpu, gdbserver_state.str_buf);
2427 g_string_append_c(gdbserver_state.str_buf, ';');
2428 put_strbuf();
2429 /*
2430 * Remove all the breakpoints when this query is issued,
2431 * because gdb is doing an initial connect and the state
2432 * should be cleaned up.
2433 */
2434 gdb_breakpoint_remove_all(gdbserver_state.c_cpu);
2435 }
2436
2437 static int gdb_handle_packet(const char *line_buf)
2438 {
2439 const GdbCmdParseEntry *cmd_parser = NULL;
2440
2441 trace_gdbstub_io_command(line_buf);
2442
2443 switch (line_buf[0]) {
2444 case '!':
2445 put_packet("OK");
2446 break;
2447 case '?':
2448 {
2449 static const GdbCmdParseEntry target_halted_cmd_desc = {
2450 .handler = handle_target_halt,
2451 .cmd = "?",
2452 .cmd_startswith = 1
2453 };
2454 cmd_parser = &target_halted_cmd_desc;
2455 }
2456 break;
2457 case 'c':
2458 {
2459 static const GdbCmdParseEntry continue_cmd_desc = {
2460 .handler = handle_continue,
2461 .cmd = "c",
2462 .cmd_startswith = 1,
2463 .schema = "L0"
2464 };
2465 cmd_parser = &continue_cmd_desc;
2466 }
2467 break;
2468 case 'C':
2469 {
2470 static const GdbCmdParseEntry cont_with_sig_cmd_desc = {
2471 .handler = handle_cont_with_sig,
2472 .cmd = "C",
2473 .cmd_startswith = 1,
2474 .schema = "l0"
2475 };
2476 cmd_parser = &cont_with_sig_cmd_desc;
2477 }
2478 break;
2479 case 'v':
2480 {
2481 static const GdbCmdParseEntry v_cmd_desc = {
2482 .handler = handle_v_commands,
2483 .cmd = "v",
2484 .cmd_startswith = 1,
2485 .schema = "s0"
2486 };
2487 cmd_parser = &v_cmd_desc;
2488 }
2489 break;
2490 case 'k':
2491 /* Kill the target */
2492 error_report("QEMU: Terminated via GDBstub");
2493 gdb_exit(0);
2494 exit(0);
2495 case 'D':
2496 {
2497 static const GdbCmdParseEntry detach_cmd_desc = {
2498 .handler = handle_detach,
2499 .cmd = "D",
2500 .cmd_startswith = 1,
2501 .schema = "?.l0"
2502 };
2503 cmd_parser = &detach_cmd_desc;
2504 }
2505 break;
2506 case 's':
2507 {
2508 static const GdbCmdParseEntry step_cmd_desc = {
2509 .handler = handle_step,
2510 .cmd = "s",
2511 .cmd_startswith = 1,
2512 .schema = "L0"
2513 };
2514 cmd_parser = &step_cmd_desc;
2515 }
2516 break;
2517 case 'b':
2518 {
2519 static const GdbCmdParseEntry backward_cmd_desc = {
2520 .handler = handle_backward,
2521 .cmd = "b",
2522 .cmd_startswith = 1,
2523 .schema = "o0"
2524 };
2525 cmd_parser = &backward_cmd_desc;
2526 }
2527 break;
2528 case 'F':
2529 {
2530 static const GdbCmdParseEntry file_io_cmd_desc = {
2531 .handler = handle_file_io,
2532 .cmd = "F",
2533 .cmd_startswith = 1,
2534 .schema = "L,L,o0"
2535 };
2536 cmd_parser = &file_io_cmd_desc;
2537 }
2538 break;
2539 case 'g':
2540 {
2541 static const GdbCmdParseEntry read_all_regs_cmd_desc = {
2542 .handler = handle_read_all_regs,
2543 .cmd = "g",
2544 .cmd_startswith = 1
2545 };
2546 cmd_parser = &read_all_regs_cmd_desc;
2547 }
2548 break;
2549 case 'G':
2550 {
2551 static const GdbCmdParseEntry write_all_regs_cmd_desc = {
2552 .handler = handle_write_all_regs,
2553 .cmd = "G",
2554 .cmd_startswith = 1,
2555 .schema = "s0"
2556 };
2557 cmd_parser = &write_all_regs_cmd_desc;
2558 }
2559 break;
2560 case 'm':
2561 {
2562 static const GdbCmdParseEntry read_mem_cmd_desc = {
2563 .handler = handle_read_mem,
2564 .cmd = "m",
2565 .cmd_startswith = 1,
2566 .schema = "L,L0"
2567 };
2568 cmd_parser = &read_mem_cmd_desc;
2569 }
2570 break;
2571 case 'M':
2572 {
2573 static const GdbCmdParseEntry write_mem_cmd_desc = {
2574 .handler = handle_write_mem,
2575 .cmd = "M",
2576 .cmd_startswith = 1,
2577 .schema = "L,L:s0"
2578 };
2579 cmd_parser = &write_mem_cmd_desc;
2580 }
2581 break;
2582 case 'p':
2583 {
2584 static const GdbCmdParseEntry get_reg_cmd_desc = {
2585 .handler = handle_get_reg,
2586 .cmd = "p",
2587 .cmd_startswith = 1,
2588 .schema = "L0"
2589 };
2590 cmd_parser = &get_reg_cmd_desc;
2591 }
2592 break;
2593 case 'P':
2594 {
2595 static const GdbCmdParseEntry set_reg_cmd_desc = {
2596 .handler = handle_set_reg,
2597 .cmd = "P",
2598 .cmd_startswith = 1,
2599 .schema = "L?s0"
2600 };
2601 cmd_parser = &set_reg_cmd_desc;
2602 }
2603 break;
2604 case 'Z':
2605 {
2606 static const GdbCmdParseEntry insert_bp_cmd_desc = {
2607 .handler = handle_insert_bp,
2608 .cmd = "Z",
2609 .cmd_startswith = 1,
2610 .schema = "l?L?L0"
2611 };
2612 cmd_parser = &insert_bp_cmd_desc;
2613 }
2614 break;
2615 case 'z':
2616 {
2617 static const GdbCmdParseEntry remove_bp_cmd_desc = {
2618 .handler = handle_remove_bp,
2619 .cmd = "z",
2620 .cmd_startswith = 1,
2621 .schema = "l?L?L0"
2622 };
2623 cmd_parser = &remove_bp_cmd_desc;
2624 }
2625 break;
2626 case 'H':
2627 {
2628 static const GdbCmdParseEntry set_thread_cmd_desc = {
2629 .handler = handle_set_thread,
2630 .cmd = "H",
2631 .cmd_startswith = 1,
2632 .schema = "o.t0"
2633 };
2634 cmd_parser = &set_thread_cmd_desc;
2635 }
2636 break;
2637 case 'T':
2638 {
2639 static const GdbCmdParseEntry thread_alive_cmd_desc = {
2640 .handler = handle_thread_alive,
2641 .cmd = "T",
2642 .cmd_startswith = 1,
2643 .schema = "t0"
2644 };
2645 cmd_parser = &thread_alive_cmd_desc;
2646 }
2647 break;
2648 case 'q':
2649 {
2650 static const GdbCmdParseEntry gen_query_cmd_desc = {
2651 .handler = handle_gen_query,
2652 .cmd = "q",
2653 .cmd_startswith = 1,
2654 .schema = "s0"
2655 };
2656 cmd_parser = &gen_query_cmd_desc;
2657 }
2658 break;
2659 case 'Q':
2660 {
2661 static const GdbCmdParseEntry gen_set_cmd_desc = {
2662 .handler = handle_gen_set,
2663 .cmd = "Q",
2664 .cmd_startswith = 1,
2665 .schema = "s0"
2666 };
2667 cmd_parser = &gen_set_cmd_desc;
2668 }
2669 break;
2670 default:
2671 /* put empty packet */
2672 put_packet("");
2673 break;
2674 }
2675
2676 if (cmd_parser) {
2677 run_cmd_parser(line_buf, cmd_parser);
2678 }
2679
2680 return RS_IDLE;
2681 }
2682
2683 void gdb_set_stop_cpu(CPUState *cpu)
2684 {
2685 GDBProcess *p = gdb_get_cpu_process(cpu);
2686
2687 if (!p->attached) {
2688 /*
2689 * Having a stop CPU corresponding to a process that is not attached
2690 * confuses GDB. So we ignore the request.
2691 */
2692 return;
2693 }
2694
2695 gdbserver_state.c_cpu = cpu;
2696 gdbserver_state.g_cpu = cpu;
2697 }
2698
2699 #ifndef CONFIG_USER_ONLY
2700 static void gdb_vm_state_change(void *opaque, bool running, RunState state)
2701 {
2702 CPUState *cpu = gdbserver_state.c_cpu;
2703 g_autoptr(GString) buf = g_string_new(NULL);
2704 g_autoptr(GString) tid = g_string_new(NULL);
2705 const char *type;
2706 int ret;
2707
2708 if (running || gdbserver_state.state == RS_INACTIVE) {
2709 return;
2710 }
2711 /* Is there a GDB syscall waiting to be sent? */
2712 if (gdbserver_state.current_syscall_cb) {
2713 put_packet(gdbserver_state.syscall_buf);
2714 return;
2715 }
2716
2717 if (cpu == NULL) {
2718 /* No process attached */
2719 return;
2720 }
2721
2722 gdb_append_thread_id(cpu, tid);
2723
2724 switch (state) {
2725 case RUN_STATE_DEBUG:
2726 if (cpu->watchpoint_hit) {
2727 switch (cpu->watchpoint_hit->flags & BP_MEM_ACCESS) {
2728 case BP_MEM_READ:
2729 type = "r";
2730 break;
2731 case BP_MEM_ACCESS:
2732 type = "a";
2733 break;
2734 default:
2735 type = "";
2736 break;
2737 }
2738 trace_gdbstub_hit_watchpoint(type, cpu_gdb_index(cpu),
2739 (target_ulong)cpu->watchpoint_hit->vaddr);
2740 g_string_printf(buf, "T%02xthread:%s;%swatch:" TARGET_FMT_lx ";",
2741 GDB_SIGNAL_TRAP, tid->str, type,
2742 (target_ulong)cpu->watchpoint_hit->vaddr);
2743 cpu->watchpoint_hit = NULL;
2744 goto send_packet;
2745 } else {
2746 trace_gdbstub_hit_break();
2747 }
2748 tb_flush(cpu);
2749 ret = GDB_SIGNAL_TRAP;
2750 break;
2751 case RUN_STATE_PAUSED:
2752 trace_gdbstub_hit_paused();
2753 ret = GDB_SIGNAL_INT;
2754 break;
2755 case RUN_STATE_SHUTDOWN:
2756 trace_gdbstub_hit_shutdown();
2757 ret = GDB_SIGNAL_QUIT;
2758 break;
2759 case RUN_STATE_IO_ERROR:
2760 trace_gdbstub_hit_io_error();
2761 ret = GDB_SIGNAL_IO;
2762 break;
2763 case RUN_STATE_WATCHDOG:
2764 trace_gdbstub_hit_watchdog();
2765 ret = GDB_SIGNAL_ALRM;
2766 break;
2767 case RUN_STATE_INTERNAL_ERROR:
2768 trace_gdbstub_hit_internal_error();
2769 ret = GDB_SIGNAL_ABRT;
2770 break;
2771 case RUN_STATE_SAVE_VM:
2772 case RUN_STATE_RESTORE_VM:
2773 return;
2774 case RUN_STATE_FINISH_MIGRATE:
2775 ret = GDB_SIGNAL_XCPU;
2776 break;
2777 default:
2778 trace_gdbstub_hit_unknown(state);
2779 ret = GDB_SIGNAL_UNKNOWN;
2780 break;
2781 }
2782 gdb_set_stop_cpu(cpu);
2783 g_string_printf(buf, "T%02xthread:%s;", ret, tid->str);
2784
2785 send_packet:
2786 put_packet(buf->str);
2787
2788 /* disable single step if it was enabled */
2789 cpu_single_step(cpu, 0);
2790 }
2791 #endif
2792
2793 /* Send a gdb syscall request.
2794 This accepts limited printf-style format specifiers, specifically:
2795 %x - target_ulong argument printed in hex.
2796 %lx - 64-bit argument printed in hex.
2797 %s - string pointer (target_ulong) and length (int) pair. */
2798 void gdb_do_syscallv(gdb_syscall_complete_cb cb, const char *fmt, va_list va)
2799 {
2800 char *p;
2801 char *p_end;
2802 target_ulong addr;
2803 uint64_t i64;
2804
2805 if (!gdb_attached()) {
2806 return;
2807 }
2808
2809 gdbserver_state.current_syscall_cb = cb;
2810 #ifndef CONFIG_USER_ONLY
2811 vm_stop(RUN_STATE_DEBUG);
2812 #endif
2813 p = &gdbserver_state.syscall_buf[0];
2814 p_end = &gdbserver_state.syscall_buf[sizeof(gdbserver_state.syscall_buf)];
2815 *(p++) = 'F';
2816 while (*fmt) {
2817 if (*fmt == '%') {
2818 fmt++;
2819 switch (*fmt++) {
2820 case 'x':
2821 addr = va_arg(va, target_ulong);
2822 p += snprintf(p, p_end - p, TARGET_FMT_lx, addr);
2823 break;
2824 case 'l':
2825 if (*(fmt++) != 'x')
2826 goto bad_format;
2827 i64 = va_arg(va, uint64_t);
2828 p += snprintf(p, p_end - p, "%" PRIx64, i64);
2829 break;
2830 case 's':
2831 addr = va_arg(va, target_ulong);
2832 p += snprintf(p, p_end - p, TARGET_FMT_lx "/%x",
2833 addr, va_arg(va, int));
2834 break;
2835 default:
2836 bad_format:
2837 error_report("gdbstub: Bad syscall format string '%s'",
2838 fmt - 1);
2839 break;
2840 }
2841 } else {
2842 *(p++) = *(fmt++);
2843 }
2844 }
2845 *p = 0;
2846 #ifdef CONFIG_USER_ONLY
2847 put_packet(gdbserver_state.syscall_buf);
2848 /* Return control to gdb for it to process the syscall request.
2849 * Since the protocol requires that gdb hands control back to us
2850 * using a "here are the results" F packet, we don't need to check
2851 * gdb_handlesig's return value (which is the signal to deliver if
2852 * execution was resumed via a continue packet).
2853 */
2854 gdb_handlesig(gdbserver_state.c_cpu, 0);
2855 #else
2856 /* In this case wait to send the syscall packet until notification that
2857 the CPU has stopped. This must be done because if the packet is sent
2858 now the reply from the syscall request could be received while the CPU
2859 is still in the running state, which can cause packets to be dropped
2860 and state transition 'T' packets to be sent while the syscall is still
2861 being processed. */
2862 qemu_cpu_kick(gdbserver_state.c_cpu);
2863 #endif
2864 }
2865
2866 void gdb_do_syscall(gdb_syscall_complete_cb cb, const char *fmt, ...)
2867 {
2868 va_list va;
2869
2870 va_start(va, fmt);
2871 gdb_do_syscallv(cb, fmt, va);
2872 va_end(va);
2873 }
2874
2875 static void gdb_read_byte(uint8_t ch)
2876 {
2877 uint8_t reply;
2878
2879 #ifndef CONFIG_USER_ONLY
2880 if (gdbserver_state.last_packet->len) {
2881 /* Waiting for a response to the last packet. If we see the start
2882 of a new command then abandon the previous response. */
2883 if (ch == '-') {
2884 trace_gdbstub_err_got_nack();
2885 put_buffer(gdbserver_state.last_packet->data,
2886 gdbserver_state.last_packet->len);
2887 } else if (ch == '+') {
2888 trace_gdbstub_io_got_ack();
2889 } else {
2890 trace_gdbstub_io_got_unexpected(ch);
2891 }
2892
2893 if (ch == '+' || ch == '$') {
2894 g_byte_array_set_size(gdbserver_state.last_packet, 0);
2895 }
2896 if (ch != '$')
2897 return;
2898 }
2899 if (runstate_is_running()) {
2900 /* when the CPU is running, we cannot do anything except stop
2901 it when receiving a char */
2902 vm_stop(RUN_STATE_PAUSED);
2903 } else
2904 #endif
2905 {
2906 switch(gdbserver_state.state) {
2907 case RS_IDLE:
2908 if (ch == '$') {
2909 /* start of command packet */
2910 gdbserver_state.line_buf_index = 0;
2911 gdbserver_state.line_sum = 0;
2912 gdbserver_state.state = RS_GETLINE;
2913 } else {
2914 trace_gdbstub_err_garbage(ch);
2915 }
2916 break;
2917 case RS_GETLINE:
2918 if (ch == '}') {
2919 /* start escape sequence */
2920 gdbserver_state.state = RS_GETLINE_ESC;
2921 gdbserver_state.line_sum += ch;
2922 } else if (ch == '*') {
2923 /* start run length encoding sequence */
2924 gdbserver_state.state = RS_GETLINE_RLE;
2925 gdbserver_state.line_sum += ch;
2926 } else if (ch == '#') {
2927 /* end of command, start of checksum*/
2928 gdbserver_state.state = RS_CHKSUM1;
2929 } else if (gdbserver_state.line_buf_index >= sizeof(gdbserver_state.line_buf) - 1) {
2930 trace_gdbstub_err_overrun();
2931 gdbserver_state.state = RS_IDLE;
2932 } else {
2933 /* unescaped command character */
2934 gdbserver_state.line_buf[gdbserver_state.line_buf_index++] = ch;
2935 gdbserver_state.line_sum += ch;
2936 }
2937 break;
2938 case RS_GETLINE_ESC:
2939 if (ch == '#') {
2940 /* unexpected end of command in escape sequence */
2941 gdbserver_state.state = RS_CHKSUM1;
2942 } else if (gdbserver_state.line_buf_index >= sizeof(gdbserver_state.line_buf) - 1) {
2943 /* command buffer overrun */
2944 trace_gdbstub_err_overrun();
2945 gdbserver_state.state = RS_IDLE;
2946 } else {
2947 /* parse escaped character and leave escape state */
2948 gdbserver_state.line_buf[gdbserver_state.line_buf_index++] = ch ^ 0x20;
2949 gdbserver_state.line_sum += ch;
2950 gdbserver_state.state = RS_GETLINE;
2951 }
2952 break;
2953 case RS_GETLINE_RLE:
2954 /*
2955 * Run-length encoding is explained in "Debugging with GDB /
2956 * Appendix E GDB Remote Serial Protocol / Overview".
2957 */
2958 if (ch < ' ' || ch == '#' || ch == '$' || ch > 126) {
2959 /* invalid RLE count encoding */
2960 trace_gdbstub_err_invalid_repeat(ch);
2961 gdbserver_state.state = RS_GETLINE;
2962 } else {
2963 /* decode repeat length */
2964 int repeat = ch - ' ' + 3;
2965 if (gdbserver_state.line_buf_index + repeat >= sizeof(gdbserver_state.line_buf) - 1) {
2966 /* that many repeats would overrun the command buffer */
2967 trace_gdbstub_err_overrun();
2968 gdbserver_state.state = RS_IDLE;
2969 } else if (gdbserver_state.line_buf_index < 1) {
2970 /* got a repeat but we have nothing to repeat */
2971 trace_gdbstub_err_invalid_rle();
2972 gdbserver_state.state = RS_GETLINE;
2973 } else {
2974 /* repeat the last character */
2975 memset(gdbserver_state.line_buf + gdbserver_state.line_buf_index,
2976 gdbserver_state.line_buf[gdbserver_state.line_buf_index - 1], repeat);
2977 gdbserver_state.line_buf_index += repeat;
2978 gdbserver_state.line_sum += ch;
2979 gdbserver_state.state = RS_GETLINE;
2980 }
2981 }
2982 break;
2983 case RS_CHKSUM1:
2984 /* get high hex digit of checksum */
2985 if (!isxdigit(ch)) {
2986 trace_gdbstub_err_checksum_invalid(ch);
2987 gdbserver_state.state = RS_GETLINE;
2988 break;
2989 }
2990 gdbserver_state.line_buf[gdbserver_state.line_buf_index] = '\0';
2991 gdbserver_state.line_csum = fromhex(ch) << 4;
2992 gdbserver_state.state = RS_CHKSUM2;
2993 break;
2994 case RS_CHKSUM2:
2995 /* get low hex digit of checksum */
2996 if (!isxdigit(ch)) {
2997 trace_gdbstub_err_checksum_invalid(ch);
2998 gdbserver_state.state = RS_GETLINE;
2999 break;
3000 }
3001 gdbserver_state.line_csum |= fromhex(ch);
3002
3003 if (gdbserver_state.line_csum != (gdbserver_state.line_sum & 0xff)) {
3004 trace_gdbstub_err_checksum_incorrect(gdbserver_state.line_sum, gdbserver_state.line_csum);
3005 /* send NAK reply */
3006 reply = '-';
3007 put_buffer(&reply, 1);
3008 gdbserver_state.state = RS_IDLE;
3009 } else {
3010 /* send ACK reply */
3011 reply = '+';
3012 put_buffer(&reply, 1);
3013 gdbserver_state.state = gdb_handle_packet(gdbserver_state.line_buf);
3014 }
3015 break;
3016 default:
3017 abort();
3018 }
3019 }
3020 }
3021
3022 /* Tell the remote gdb that the process has exited. */
3023 void gdb_exit(int code)
3024 {
3025 char buf[4];
3026
3027 if (!gdbserver_state.init) {
3028 return;
3029 }
3030 #ifdef CONFIG_USER_ONLY
3031 if (gdbserver_state.socket_path) {
3032 unlink(gdbserver_state.socket_path);
3033 }
3034 if (gdbserver_state.fd < 0) {
3035 return;
3036 }
3037 #endif
3038
3039 trace_gdbstub_op_exiting((uint8_t)code);
3040
3041 snprintf(buf, sizeof(buf), "W%02x", (uint8_t)code);
3042 put_packet(buf);
3043
3044 #ifndef CONFIG_USER_ONLY
3045 qemu_chr_fe_deinit(&gdbserver_state.chr, true);
3046 #endif
3047 }
3048
3049 /*
3050 * Create the process that will contain all the "orphan" CPUs (that are not
3051 * part of a CPU cluster). Note that if this process contains no CPUs, it won't
3052 * be attachable and thus will be invisible to the user.
3053 */
3054 static void create_default_process(GDBState *s)
3055 {
3056 GDBProcess *process;
3057 int max_pid = 0;
3058
3059 if (gdbserver_state.process_num) {
3060 max_pid = s->processes[s->process_num - 1].pid;
3061 }
3062
3063 s->processes = g_renew(GDBProcess, s->processes, ++s->process_num);
3064 process = &s->processes[s->process_num - 1];
3065
3066 /* We need an available PID slot for this process */
3067 assert(max_pid < UINT32_MAX);
3068
3069 process->pid = max_pid + 1;
3070 process->attached = false;
3071 process->target_xml[0] = '\0';
3072 }
3073
3074 #ifdef CONFIG_USER_ONLY
3075 int
3076 gdb_handlesig(CPUState *cpu, int sig)
3077 {
3078 char buf[256];
3079 int n;
3080
3081 if (!gdbserver_state.init || gdbserver_state.fd < 0) {
3082 return sig;
3083 }
3084
3085 /* disable single step if it was enabled */
3086 cpu_single_step(cpu, 0);
3087 tb_flush(cpu);
3088
3089 if (sig != 0) {
3090 gdb_set_stop_cpu(cpu);
3091 g_string_printf(gdbserver_state.str_buf,
3092 "T%02xthread:", target_signal_to_gdb(sig));
3093 gdb_append_thread_id(cpu, gdbserver_state.str_buf);
3094 g_string_append_c(gdbserver_state.str_buf, ';');
3095 put_strbuf();
3096 }
3097 /* put_packet() might have detected that the peer terminated the
3098 connection. */
3099 if (gdbserver_state.fd < 0) {
3100 return sig;
3101 }
3102
3103 sig = 0;
3104 gdbserver_state.state = RS_IDLE;
3105 gdbserver_state.running_state = 0;
3106 while (gdbserver_state.running_state == 0) {
3107 n = read(gdbserver_state.fd, buf, 256);
3108 if (n > 0) {
3109 int i;
3110
3111 for (i = 0; i < n; i++) {
3112 gdb_read_byte(buf[i]);
3113 }
3114 } else {
3115 /* XXX: Connection closed. Should probably wait for another
3116 connection before continuing. */
3117 if (n == 0) {
3118 close(gdbserver_state.fd);
3119 }
3120 gdbserver_state.fd = -1;
3121 return sig;
3122 }
3123 }
3124 sig = gdbserver_state.signal;
3125 gdbserver_state.signal = 0;
3126 return sig;
3127 }
3128
3129 /* Tell the remote gdb that the process has exited due to SIG. */
3130 void gdb_signalled(CPUArchState *env, int sig)
3131 {
3132 char buf[4];
3133
3134 if (!gdbserver_state.init || gdbserver_state.fd < 0) {
3135 return;
3136 }
3137
3138 snprintf(buf, sizeof(buf), "X%02x", target_signal_to_gdb(sig));
3139 put_packet(buf);
3140 }
3141
3142 static void gdb_accept_init(int fd)
3143 {
3144 init_gdbserver_state();
3145 create_default_process(&gdbserver_state);
3146 gdbserver_state.processes[0].attached = true;
3147 gdbserver_state.c_cpu = gdb_first_attached_cpu();
3148 gdbserver_state.g_cpu = gdbserver_state.c_cpu;
3149 gdbserver_state.fd = fd;
3150 gdb_has_xml = false;
3151 }
3152
3153 static bool gdb_accept_socket(int gdb_fd)
3154 {
3155 int fd;
3156
3157 for(;;) {
3158 fd = accept(gdb_fd, NULL, NULL);
3159 if (fd < 0 && errno != EINTR) {
3160 perror("accept socket");
3161 return false;
3162 } else if (fd >= 0) {
3163 qemu_set_cloexec(fd);
3164 break;
3165 }
3166 }
3167
3168 gdb_accept_init(fd);
3169 return true;
3170 }
3171
3172 static int gdbserver_open_socket(const char *path)
3173 {
3174 struct sockaddr_un sockaddr = {};
3175 int fd, ret;
3176
3177 fd = socket(AF_UNIX, SOCK_STREAM, 0);
3178 if (fd < 0) {
3179 perror("create socket");
3180 return -1;
3181 }
3182
3183 sockaddr.sun_family = AF_UNIX;
3184 pstrcpy(sockaddr.sun_path, sizeof(sockaddr.sun_path) - 1, path);
3185 ret = bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr));
3186 if (ret < 0) {
3187 perror("bind socket");
3188 close(fd);
3189 return -1;
3190 }
3191 ret = listen(fd, 1);
3192 if (ret < 0) {
3193 perror("listen socket");
3194 close(fd);
3195 return -1;
3196 }
3197
3198 return fd;
3199 }
3200
3201 static bool gdb_accept_tcp(int gdb_fd)
3202 {
3203 struct sockaddr_in sockaddr = {};
3204 socklen_t len;
3205 int fd;
3206
3207 for(;;) {
3208 len = sizeof(sockaddr);
3209 fd = accept(gdb_fd, (struct sockaddr *)&sockaddr, &len);
3210 if (fd < 0 && errno != EINTR) {
3211 perror("accept");
3212 return false;
3213 } else if (fd >= 0) {
3214 qemu_set_cloexec(fd);
3215 break;
3216 }
3217 }
3218
3219 /* set short latency */
3220 if (socket_set_nodelay(fd)) {
3221 perror("setsockopt");
3222 close(fd);
3223 return false;
3224 }
3225
3226 gdb_accept_init(fd);
3227 return true;
3228 }
3229
3230 static int gdbserver_open_port(int port)
3231 {
3232 struct sockaddr_in sockaddr;
3233 int fd, ret;
3234
3235 fd = socket(PF_INET, SOCK_STREAM, 0);
3236 if (fd < 0) {
3237 perror("socket");
3238 return -1;
3239 }
3240 qemu_set_cloexec(fd);
3241
3242 socket_set_fast_reuse(fd);
3243
3244 sockaddr.sin_family = AF_INET;
3245 sockaddr.sin_port = htons(port);
3246 sockaddr.sin_addr.s_addr = 0;
3247 ret = bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr));
3248 if (ret < 0) {
3249 perror("bind");
3250 close(fd);
3251 return -1;
3252 }
3253 ret = listen(fd, 1);
3254 if (ret < 0) {
3255 perror("listen");
3256 close(fd);
3257 return -1;
3258 }
3259
3260 return fd;
3261 }
3262
3263 int gdbserver_start(const char *port_or_path)
3264 {
3265 int port = g_ascii_strtoull(port_or_path, NULL, 10);
3266 int gdb_fd;
3267
3268 if (port > 0) {
3269 gdb_fd = gdbserver_open_port(port);
3270 } else {
3271 gdb_fd = gdbserver_open_socket(port_or_path);
3272 }
3273
3274 if (gdb_fd < 0) {
3275 return -1;
3276 }
3277
3278 if (port > 0 && gdb_accept_tcp(gdb_fd)) {
3279 return 0;
3280 } else if (gdb_accept_socket(gdb_fd)) {
3281 gdbserver_state.socket_path = g_strdup(port_or_path);
3282 return 0;
3283 }
3284
3285 /* gone wrong */
3286 close(gdb_fd);
3287 return -1;
3288 }
3289
3290 /* Disable gdb stub for child processes. */
3291 void gdbserver_fork(CPUState *cpu)
3292 {
3293 if (!gdbserver_state.init || gdbserver_state.fd < 0) {
3294 return;
3295 }
3296 close(gdbserver_state.fd);
3297 gdbserver_state.fd = -1;
3298 cpu_breakpoint_remove_all(cpu, BP_GDB);
3299 cpu_watchpoint_remove_all(cpu, BP_GDB);
3300 }
3301 #else
3302 static int gdb_chr_can_receive(void *opaque)
3303 {
3304 /* We can handle an arbitrarily large amount of data.
3305 Pick the maximum packet size, which is as good as anything. */
3306 return MAX_PACKET_LENGTH;
3307 }
3308
3309 static void gdb_chr_receive(void *opaque, const uint8_t *buf, int size)
3310 {
3311 int i;
3312
3313 for (i = 0; i < size; i++) {
3314 gdb_read_byte(buf[i]);
3315 }
3316 }
3317
3318 static void gdb_chr_event(void *opaque, QEMUChrEvent event)
3319 {
3320 int i;
3321 GDBState *s = (GDBState *) opaque;
3322
3323 switch (event) {
3324 case CHR_EVENT_OPENED:
3325 /* Start with first process attached, others detached */
3326 for (i = 0; i < s->process_num; i++) {
3327 s->processes[i].attached = !i;
3328 }
3329
3330 s->c_cpu = gdb_first_attached_cpu();
3331 s->g_cpu = s->c_cpu;
3332
3333 vm_stop(RUN_STATE_PAUSED);
3334 replay_gdb_attached();
3335 gdb_has_xml = false;
3336 break;
3337 default:
3338 break;
3339 }
3340 }
3341
3342 static int gdb_monitor_write(Chardev *chr, const uint8_t *buf, int len)
3343 {
3344 g_autoptr(GString) hex_buf = g_string_new("O");
3345 memtohex(hex_buf, buf, len);
3346 put_packet(hex_buf->str);
3347 return len;
3348 }
3349
3350 #ifndef _WIN32
3351 static void gdb_sigterm_handler(int signal)
3352 {
3353 if (runstate_is_running()) {
3354 vm_stop(RUN_STATE_PAUSED);
3355 }
3356 }
3357 #endif
3358
3359 static void gdb_monitor_open(Chardev *chr, ChardevBackend *backend,
3360 bool *be_opened, Error **errp)
3361 {
3362 *be_opened = false;
3363 }
3364
3365 static void char_gdb_class_init(ObjectClass *oc, void *data)
3366 {
3367 ChardevClass *cc = CHARDEV_CLASS(oc);
3368
3369 cc->internal = true;
3370 cc->open = gdb_monitor_open;
3371 cc->chr_write = gdb_monitor_write;
3372 }
3373
3374 #define TYPE_CHARDEV_GDB "chardev-gdb"
3375
3376 static const TypeInfo char_gdb_type_info = {
3377 .name = TYPE_CHARDEV_GDB,
3378 .parent = TYPE_CHARDEV,
3379 .class_init = char_gdb_class_init,
3380 };
3381
3382 static int find_cpu_clusters(Object *child, void *opaque)
3383 {
3384 if (object_dynamic_cast(child, TYPE_CPU_CLUSTER)) {
3385 GDBState *s = (GDBState *) opaque;
3386 CPUClusterState *cluster = CPU_CLUSTER(child);
3387 GDBProcess *process;
3388
3389 s->processes = g_renew(GDBProcess, s->processes, ++s->process_num);
3390
3391 process = &s->processes[s->process_num - 1];
3392
3393 /*
3394 * GDB process IDs -1 and 0 are reserved. To avoid subtle errors at
3395 * runtime, we enforce here that the machine does not use a cluster ID
3396 * that would lead to PID 0.
3397 */
3398 assert(cluster->cluster_id != UINT32_MAX);
3399 process->pid = cluster->cluster_id + 1;
3400 process->attached = false;
3401 process->target_xml[0] = '\0';
3402
3403 return 0;
3404 }
3405
3406 return object_child_foreach(child, find_cpu_clusters, opaque);
3407 }
3408
3409 static int pid_order(const void *a, const void *b)
3410 {
3411 GDBProcess *pa = (GDBProcess *) a;
3412 GDBProcess *pb = (GDBProcess *) b;
3413
3414 if (pa->pid < pb->pid) {
3415 return -1;
3416 } else if (pa->pid > pb->pid) {
3417 return 1;
3418 } else {
3419 return 0;
3420 }
3421 }
3422
3423 static void create_processes(GDBState *s)
3424 {
3425 object_child_foreach(object_get_root(), find_cpu_clusters, s);
3426
3427 if (gdbserver_state.processes) {
3428 /* Sort by PID */
3429 qsort(gdbserver_state.processes, gdbserver_state.process_num, sizeof(gdbserver_state.processes[0]), pid_order);
3430 }
3431
3432 create_default_process(s);
3433 }
3434
3435 int gdbserver_start(const char *device)
3436 {
3437 trace_gdbstub_op_start(device);
3438
3439 char gdbstub_device_name[128];
3440 Chardev *chr = NULL;
3441 Chardev *mon_chr;
3442
3443 if (!first_cpu) {
3444 error_report("gdbstub: meaningless to attach gdb to a "
3445 "machine without any CPU.");
3446 return -1;
3447 }
3448
3449 if (!gdb_supports_guest_debug()) {
3450 error_report("gdbstub: current accelerator doesn't support guest debugging");
3451 return -1;
3452 }
3453
3454 if (!device)
3455 return -1;
3456 if (strcmp(device, "none") != 0) {
3457 if (strstart(device, "tcp:", NULL)) {
3458 /* enforce required TCP attributes */
3459 snprintf(gdbstub_device_name, sizeof(gdbstub_device_name),
3460 "%s,wait=off,nodelay=on,server=on", device);
3461 device = gdbstub_device_name;
3462 }
3463 #ifndef _WIN32
3464 else if (strcmp(device, "stdio") == 0) {
3465 struct sigaction act;
3466
3467 memset(&act, 0, sizeof(act));
3468 act.sa_handler = gdb_sigterm_handler;
3469 sigaction(SIGINT, &act, NULL);
3470 }
3471 #endif
3472 /*
3473 * FIXME: it's a bit weird to allow using a mux chardev here
3474 * and implicitly setup a monitor. We may want to break this.
3475 */
3476 chr = qemu_chr_new_noreplay("gdb", device, true, NULL);
3477 if (!chr)
3478 return -1;
3479 }
3480
3481 if (!gdbserver_state.init) {
3482 init_gdbserver_state();
3483
3484 qemu_add_vm_change_state_handler(gdb_vm_state_change, NULL);
3485
3486 /* Initialize a monitor terminal for gdb */
3487 mon_chr = qemu_chardev_new(NULL, TYPE_CHARDEV_GDB,
3488 NULL, NULL, &error_abort);
3489 monitor_init_hmp(mon_chr, false, &error_abort);
3490 } else {
3491 qemu_chr_fe_deinit(&gdbserver_state.chr, true);
3492 mon_chr = gdbserver_state.mon_chr;
3493 reset_gdbserver_state();
3494 }
3495
3496 create_processes(&gdbserver_state);
3497
3498 if (chr) {
3499 qemu_chr_fe_init(&gdbserver_state.chr, chr, &error_abort);
3500 qemu_chr_fe_set_handlers(&gdbserver_state.chr, gdb_chr_can_receive,
3501 gdb_chr_receive, gdb_chr_event,
3502 NULL, &gdbserver_state, NULL, true);
3503 }
3504 gdbserver_state.state = chr ? RS_IDLE : RS_INACTIVE;
3505 gdbserver_state.mon_chr = mon_chr;
3506 gdbserver_state.current_syscall_cb = NULL;
3507
3508 return 0;
3509 }
3510
3511 static void register_types(void)
3512 {
3513 type_register_static(&char_gdb_type_info);
3514 }
3515
3516 type_init(register_types);
3517 #endif