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