qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

gdbstub.c (91821B)


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