From patchwork Wed Apr 24 18:45:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10915509 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7169713B5 for ; Wed, 24 Apr 2019 19:06:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5C87028B81 for ; Wed, 24 Apr 2019 19:06:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 50E7D28B86; Wed, 24 Apr 2019 19:06:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id BCD7D28B85 for ; Wed, 24 Apr 2019 19:06:57 +0000 (UTC) Received: from localhost ([127.0.0.1]:45876 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNEP-0001P2-1K for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 15:06:57 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45816) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN6F-0002DH-Fj for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:58:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJMuK-0005MI-O9 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:13 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:34676) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJMuK-0005Lk-Hc for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:12 -0400 Received: by mail-wr1-x443.google.com with SMTP id c6so20879665wrm.1 for ; Wed, 24 Apr 2019 11:46:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=OoefeN2QNtrGn/jEm91iE7+6LVC6PL2qw7F8wxXc95w=; b=ALb2hSTiHscUyp+V/5A4lwWFow1qBevJMug2ewtcoZsxevJbkjaoMkDjc5YjYnSXcu qsLjpJ8VxQH1jusLftkv97j3+UTVD5pXmsl6iyhfVEdcQ0o0WRjA85YXZgpij274TT2i kMonWjHHxkT8zzqsis+p/+rmorION4+4t3gUfrzIf9nG4CVFj82wi9QXLSrmOGWZwUUU vW7W+Ms3nSxhjEeRs1gr4WAFqfDxM4xfzDu3ladCH1RyNei5JF7is9oLnI/DvxaVlXjC pb/hz8vPlLkpOD7h/d5s9XkHtJWzouLxuecAlhG3szoIhlQal/ijj8wWaviO65TFNptt tkdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=OoefeN2QNtrGn/jEm91iE7+6LVC6PL2qw7F8wxXc95w=; b=qZwUjIUI2QWmgwmDDx3tLZP60VZ0DH2pixpeO0xrY/U3L7nhwKj8qtiUpjMunUduSG D5sI1DEezceaQWMeKlXVxMQtDW2aVbdHliqxlfUEboHCzlgJ/I6WV6BQ0C2/SUs0JB9B nnFFjfUPjRJG5DU6n2PiwvjSMG2gwRp+XBuqWKno9cnUyyeqPpspMhTGTLC8Xyv346uL 8H2mUVKDko7kTQzyqnqMzX8h//iNHPzmkBxwHOSUpYYOvfvZHbecA0HUpvDvF2EnJewB bDR760D3eeHYN0HiZ5hsjMow/e4wE+Bfh9PUmt1lcNf6C97BiFuiO80QeBW/CgbWeV7k F6uw== X-Gm-Message-State: APjAAAUKMEpKB2dIUx2AQk3J76mjdh2KTGoaBjZwTQjwQ8RWYbaeBVKA cIi3+2t1CdALw3FMYw0V4GQMMe/t X-Google-Smtp-Source: APXvYqwRNFANfGJWEAq/ls6bvaqbFH2inqg0hRy2MDfG3DZ8/juKfODnciaUberipGMev04+XIM2UA== X-Received: by 2002:adf:ea86:: with SMTP id s6mr6813810wrm.44.1556131570356; Wed, 24 Apr 2019 11:46:10 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id h9sm14720106wmb.5.2019.04.24.11.46.07 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 11:46:08 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 21:45:41 +0300 Message-Id: <20190424184600.8445-1-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::443 Subject: [Qemu-devel] [PATCH v4 01/20] gdbstub: Add infrastructure to parse cmd packets X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Jon Doron --- gdbstub.c | 209 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 209 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index d54abd17cc..64680722fc 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1268,6 +1268,215 @@ out: return res; } +typedef union GdbCmdVariant { + const char *data; + uint8_t opcode; + unsigned long val_ul; + unsigned long long val_ull; + struct { + GDBThreadIdKind kind; + uint32_t pid; + uint32_t tid; + } thread_id; +} GdbCmdVariant; + +static const char *cmd_next_param(const char *param, const char delimiter) +{ + const char *delim; + static char all_delimiters[] = ",;:="; + static char no_delimiter[] = "\0"; + char curr_delimiters[2] = {0}; + const char *delimiters; + + if (delimiter == '?') { + delimiters = all_delimiters; + } else if (delimiter == '0') { + delimiters = no_delimiter; + } else if (delimiter == '.' && *param) { + return param + 1; + } else { + curr_delimiters[0] = delimiter; + delimiters = curr_delimiters; + } + + while (*param) { + delim = delimiters; + while (*delim) { + if (*param == *delim) { + return param + 1; + } + delim++; + } + param++; + } + + return param; +} + +static int cmd_parse_params(const char *data, const char *schema, + GdbCmdVariant *params, int *num_params) +{ + int curr_param; + const char *curr_schema, *curr_data; + + *num_params = 0; + + if (!schema) { + return 0; + } + + curr_schema = schema; + curr_param = 0; + curr_data = data; + while (curr_schema[0] && curr_schema[1] && *curr_data) { + switch (curr_schema[0]) { + case 'l': + if (qemu_strtoul(curr_data, &curr_data, 16, + ¶ms[curr_param].val_ul)) { + return -EINVAL; + } + curr_param++; + curr_data = cmd_next_param(curr_data, curr_schema[1]); + break; + case 'L': + if (qemu_strtou64(curr_data, &curr_data, 16, + (uint64_t *)¶ms[curr_param].val_ull)) { + return -EINVAL; + } + curr_param++; + curr_data = cmd_next_param(curr_data, curr_schema[1]); + break; + case 's': + params[curr_param].data = curr_data; + curr_param++; + curr_data = cmd_next_param(curr_data, curr_schema[1]); + break; + case 'o': + params[curr_param].opcode = *(uint8_t *)curr_data; + curr_param++; + curr_data = cmd_next_param(curr_data, curr_schema[1]); + break; + case 't': + params[curr_param].thread_id.kind = + read_thread_id(curr_data, &curr_data, + ¶ms[curr_param].thread_id.pid, + ¶ms[curr_param].thread_id.tid); + curr_param++; + curr_data = cmd_next_param(curr_data, curr_schema[1]); + break; + case '?': + curr_data = cmd_next_param(curr_data, curr_schema[1]); + break; + default: + return -EINVAL; + } + curr_schema += 2; + } + + *num_params = curr_param; + return 0; +} + +typedef struct GdbCmdContext { + GDBState *s; + GdbCmdVariant *params; + int num_params; + uint8_t mem_buf[MAX_PACKET_LENGTH]; + char str_buf[MAX_PACKET_LENGTH + 1]; +} GdbCmdContext; + +typedef void (*GdbCmdHandler)(GdbCmdContext *gdb_ctx, void *user_ctx); + +/* + * cmd_startswith -> cmd is compared using startswith + * cmd_full_match -> cmd is compared using strcmp + * + * + * schema definitions: + * Each schema parameter entry consists of 2 chars, + * the first char represents the parameter type handling + * the second char represents the delimiter for the next parameter + * + * Currently supported schema types: + * 'l' -> unsigned long (stored in .val_ul) + * 'L' -> unsigned long long (stored in .val_ull) + * 's' -> string (stored in .data) + * 'o' -> single char (stored in .opcode) + * 't' -> thread id (stored in .thread_id) + * '?' -> skip according to delimiter + * + * Currently supported delimiters: + * '?' -> Stop at any delimiter (",;:=\0") + * '0' -> Stop at "\0" + * '.' -> Skip 1 char unless reached "\0" + * Any other value is treated as the delimiter value itself + */ +typedef struct GdbCmdParseEntry { + GdbCmdHandler handler; + const char *cmd; + union { + int flags; + struct { + int cmd_startswith:1; + int cmd_full_match:1; + }; + }; + const char *schema; +} GdbCmdParseEntry; + +static inline int startswith(const char *string, const char *pattern) +{ + return !strncmp(string, pattern, strlen(pattern)); +} + +__attribute__((unused)) static int process_string_cmd( + GDBState *s, void *user_ctx, const char *data, + GdbCmdParseEntry *cmds, int num_cmds); + +static int process_string_cmd(GDBState *s, void *user_ctx, const char *data, + GdbCmdParseEntry *cmds, int num_cmds) +{ + int i, schema_len, max_num_params; + GdbCmdContext gdb_ctx; + + if (!cmds) { + return -1; + } + + for (i = 0; i < num_cmds; i++) { + if (!cmds[i].handler || !cmds[i].cmd || + (cmds[i].cmd_startswith && !startswith(data, cmds[i].cmd)) || + (cmds[i].cmd_full_match && strcmp(data, cmds[i].cmd))) { + continue; + } + + max_num_params = 0; + if (cmds[i].schema) { + schema_len = strlen(cmds[i].schema); + if (schema_len % 2) { + return -2; + } + + max_num_params = schema_len / 2; + } + + gdb_ctx.params = + (GdbCmdVariant *)alloca(sizeof(*gdb_ctx.params) * max_num_params); + memset(gdb_ctx.params, 0, sizeof(*gdb_ctx.params) * max_num_params); + + if (cmd_parse_params(&data[strlen(cmds[i].cmd)], cmds[i].schema, + gdb_ctx.params, &gdb_ctx.num_params)) { + return -1; + } + + gdb_ctx.s = s; + cmds[i].handler(&gdb_ctx, user_ctx); + return 0; + } + + return -1; +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; From patchwork Wed Apr 24 18:45:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10915515 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 70B2D1575 for ; Wed, 24 Apr 2019 19:09:11 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5F3DC28B81 for ; Wed, 24 Apr 2019 19:09:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4DE4E28B86; Wed, 24 Apr 2019 19:09:11 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id E1CF328B81 for ; Wed, 24 Apr 2019 19:09:10 +0000 (UTC) Received: from localhost ([127.0.0.1]:45899 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNGY-0003NR-6T for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 15:09:10 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45829) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN6K-0002Db-Ic for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:58:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJMuM-0005Q2-M6 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:15 -0400 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]:40809) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJMuM-0005O9-Fd for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:14 -0400 Received: by mail-wr1-x42c.google.com with SMTP id h4so26567572wre.7 for ; Wed, 24 Apr 2019 11:46:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=UknJZKnJVERT3JA2rb2yBuVPhKJqbGKHtbXr3Dgn3pU=; b=ERL1fQ/NKJ+o+BYRChZgQbgez7ZNuBV7gOV+HbvM9CcUpCAgtlu/OT+T4C749zuW9v k59K+xveHzjolGFBJauYA7XwTjNpR7heUypzkWQr4CfmfUKHDeLVSKhOr47fg6Y/pkUu wi4UDVM2gIY7W2B9rAYs1TaVm/sYua8huwt73a4LuWD2aFKYuvXP0YuB3Fy+us6aEGfS AVOCx/dSTMQ1DlZgqtTZzzB9k1/GABga0MkgjjWsl/tRGTBXigKOFEh2hA4DDNPepKpU XG1BtYysdb6s/lG3s4bQr0sGllKDwFyAs24Wa+ozB5Q9nRehte7NN4d77j8gkuo/lgll BZdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UknJZKnJVERT3JA2rb2yBuVPhKJqbGKHtbXr3Dgn3pU=; b=CSGyR9LsoIxZSPglfi+lPUMti765hYsb+yd3WzNsibUfyRWJMOcJJR90a1vbdm/QuN ZpLyAEXoh91K+6xNKAfFY10EvlM1+37AlAO2SDXzLaGskVWqTXjmAfHJsF1xEybv4ucN nb8eJikLnSO1643eC9dCLvrmCHFjbuanEuqmo1SRF6x614SL3NUNnXH66cOwKa95bNok GNgWXlL2RuJhyprVPY1oPYttQxf7GkFyqreyCUNnBHU7oPRf6EFcQwobD7NR1GZOZi8S /mYA02eDXEOmkSuvNKFPBrzj0clnK7jaGz4NTJcsVIwyCebfab66xaG15vuHz61LpgXx 9oxQ== X-Gm-Message-State: APjAAAWgrXm2t1eGTYz+WDp04mq/H0T6np4QQEqLlwAD5iEf3fcLSNoC jTyiUTt+MChlL0elPwquDQzHhwk2 X-Google-Smtp-Source: APXvYqyPy6aMxqbpPzuicEhNKouTs/u+LTds1anWuLMd5b4EFFBhRp7A98DPUpO21kcF1g+KXp758w== X-Received: by 2002:adf:e703:: with SMTP id c3mr21179511wrm.98.1556131572844; Wed, 24 Apr 2019 11:46:12 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id h9sm14720106wmb.5.2019.04.24.11.46.10 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 11:46:10 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 21:45:42 +0300 Message-Id: <20190424184600.8445-2-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424184600.8445-1-arilou@gmail.com> References: <20190424184600.8445-1-arilou@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::42c Subject: [Qemu-devel] [PATCH v4 02/20] gdbstub: Implement deatch (D pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-otff-by: Jon Doron --- gdbstub.c | 82 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 43 insertions(+), 39 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 64680722fc..952a6d92ef 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1429,10 +1429,6 @@ static inline int startswith(const char *string, const char *pattern) return !strncmp(string, pattern, strlen(pattern)); } -__attribute__((unused)) static int process_string_cmd( - GDBState *s, void *user_ctx, const char *data, - GdbCmdParseEntry *cmds, int num_cmds); - static int process_string_cmd(GDBState *s, void *user_ctx, const char *data, GdbCmdParseEntry *cmds, int num_cmds) { @@ -1477,6 +1473,41 @@ static int process_string_cmd(GDBState *s, void *user_ctx, const char *data, return -1; } +static void handle_detach(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + GDBProcess *process; + GDBState *s = gdb_ctx->s; + uint32_t pid = 1; + + if (s->multiprocess) { + if (!gdb_ctx->num_params) { + put_packet(s, "E22"); + return; + } + + pid = gdb_ctx->params[0].val_ul; + } + + process = gdb_get_process(s, pid); + gdb_process_breakpoint_remove_all(s, process); + process->attached = false; + + if (pid == gdb_get_cpu_pid(s, s->c_cpu)) { + s->c_cpu = gdb_first_attached_cpu(s); + } + + if (pid == gdb_get_cpu_pid(s, s->g_cpu)) { + s->g_cpu = gdb_first_attached_cpu(s); + } + + if (!s->c_cpu) { + /* No more process attached */ + gdb_syscall_mode = GDB_SYS_DISABLED; + gdb_continue(s); + } + put_packet(s, "OK"); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1591,42 +1622,15 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) error_report("QEMU: Terminated via GDBstub"); exit(0); case 'D': - /* Detach packet */ - pid = 1; - - if (s->multiprocess) { - unsigned long lpid; - if (*p != ';') { - put_packet(s, "E22"); - break; - } - - if (qemu_strtoul(p + 1, &p, 16, &lpid)) { - put_packet(s, "E22"); - break; - } - - pid = lpid; - } - - process = gdb_get_process(s, pid); - gdb_process_breakpoint_remove_all(s, process); - process->attached = false; - - if (pid == gdb_get_cpu_pid(s, s->c_cpu)) { - s->c_cpu = gdb_first_attached_cpu(s); - } - - if (pid == gdb_get_cpu_pid(s, s->g_cpu)) { - s->g_cpu = gdb_first_attached_cpu(s); - } - - if (s->c_cpu == NULL) { - /* No more process attached */ - gdb_syscall_mode = GDB_SYS_DISABLED; - gdb_continue(s); + { + static GdbCmdParseEntry deatch_cmd_desc = { + .handler = handle_detach, + .cmd = "D", + .cmd_startswith = 1, + .schema = "?.l0" + }; + process_string_cmd(s, NULL, line_buf, &deatch_cmd_desc, 1); } - put_packet(s, "OK"); break; case 's': if (*p != '\0') { From patchwork Wed Apr 24 18:45:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10915533 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9B4781575 for ; Wed, 24 Apr 2019 19:13:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8BABE28AB3 for ; Wed, 24 Apr 2019 19:13:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7FBB728ABB; Wed, 24 Apr 2019 19:13:40 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 315D928AB3 for ; Wed, 24 Apr 2019 19:13:40 +0000 (UTC) Received: from localhost ([127.0.0.1]:45975 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNKs-0007VG-SV for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 15:13:38 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45538) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN6K-0001z4-CY for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:58:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJMuO-0005Tl-EM for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:17 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:44052) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJMuO-0005Sf-8d for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:16 -0400 Received: by mail-wr1-x444.google.com with SMTP id c5so17693653wrs.11 for ; Wed, 24 Apr 2019 11:46:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=MK04Gqk/QxrnoBt94M+4u4mfOZrim+/hfyCGy3IWRYE=; b=kh9RHnyfQtjbhdjwbsjvGI8F+3+tJsox2IsRO9ExW2zyRnEfTGzXmSaWyti6JvErIr aiqV99G1fRiWYadiLGDJI5iztVEuUd4i+RLyx5FA2b8K9kNcPAgu/Nnk4h0ZiudCiFx3 hRbYp2ILR2R5ka4vO9BvOFQNZ2SsophylyFAJM2t5C04gTvAcAfkL2/A8lGTX5f4tiTe jE7CX6GEkqipKXM4BB79Bc08UP8AqRNIerXeCWxak1J/hNonKC6u56mMW9d/IqqQxMl2 zz0j5tG1+ZZ4sBplq9B/hqelXzV1zYHr25O81DJ7AiAjC5glFBXpWUbcgVw1qHIDGUMD O6MA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=MK04Gqk/QxrnoBt94M+4u4mfOZrim+/hfyCGy3IWRYE=; b=K7i5JRPapDlIQ1mvY0NQGgqhar0Nh8yAen2yuKy71RnbVj/oHjulF4hjKGE0Z/I4aA p2LHCM2ZxB6mX95A0G7t78Xj7Rf238ORSNq6tk52SH43UcsQl5iM/macx415VExPHuM3 alB0NMyC+yTynoYGgMyrwnBDQb9FUVjyBgOpqkTJu65v7co3Zm9RMtU4sfQxN2V/Esrx +vZlTK965xmoZtLA0QTCO/FhY1641OSaWKC7MUbuMKC/rPUZbB25TsniShB8LAwfit5H u3ox+vd3CugAOoRp0QqDxar4ZJ0iNbNcYsGbVtzb8il3za6Hl/soEerwDMD1RZiokruq 46Tw== X-Gm-Message-State: APjAAAVL0le491AWEO+L3H5Xn1yLOlLMQGE0kIJKaBES133id9i6iNiL BV+uGxCMbU68u9X8RT/RTxKYFAn6 X-Google-Smtp-Source: APXvYqw5Qkv1dPNHxNa2C5bUbeuB4zPN92KSBwwImMwg4zkw8Gfv0Cc6htw3NdnTakq/nCoh8jVp+w== X-Received: by 2002:adf:de8d:: with SMTP id w13mr8709779wrl.26.1556131574782; Wed, 24 Apr 2019 11:46:14 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id h9sm14720106wmb.5.2019.04.24.11.46.12 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 11:46:13 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 21:45:43 +0300 Message-Id: <20190424184600.8445-3-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424184600.8445-1-arilou@gmail.com> References: <20190424184600.8445-1-arilou@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::444 Subject: [Qemu-devel] [PATCH v4 03/20] gdbstub: Implement thread_alive (T pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Jon Doron --- gdbstub.c | 43 ++++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 952a6d92ef..7704edd69c 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1508,6 +1508,30 @@ static void handle_detach(GdbCmdContext *gdb_ctx, void *user_ctx) put_packet(s, "OK"); } +static void handle_thread_alive(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + CPUState *cpu; + + if (!gdb_ctx->num_params) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + if (gdb_ctx->params[0].thread_id.kind == GDB_READ_THREAD_ERR) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + cpu = gdb_get_cpu(gdb_ctx->s, gdb_ctx->params[0].thread_id.pid, + gdb_ctx->params[0].thread_id.tid); + if (!cpu) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + put_packet(gdb_ctx->s, "OK"); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1807,17 +1831,14 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) } break; case 'T': - thread_kind = read_thread_id(p, &p, &pid, &tid); - if (thread_kind == GDB_READ_THREAD_ERR) { - put_packet(s, "E22"); - break; - } - cpu = gdb_get_cpu(s, pid, tid); - - if (cpu != NULL) { - put_packet(s, "OK"); - } else { - put_packet(s, "E22"); + { + static GdbCmdParseEntry thread_alive_cmd_desc = { + .handler = handle_thread_alive, + .cmd = "T", + .cmd_startswith = 1, + .schema = "t0" + }; + process_string_cmd(s, NULL, line_buf, &thread_alive_cmd_desc, 1); } break; case 'q': From patchwork Wed Apr 24 18:45:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10915527 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 246D413B5 for ; Wed, 24 Apr 2019 19:10:52 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 16E9C28BAF for ; Wed, 24 Apr 2019 19:10:52 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1534E28BCD; Wed, 24 Apr 2019 19:10:52 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 9C61E28BB7 for ; Wed, 24 Apr 2019 19:10:51 +0000 (UTC) Received: from localhost ([127.0.0.1]:45952 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNIA-0004qa-RV for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 15:10:50 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45829) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN6J-0002Db-A6 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:58:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJMuQ-0005Vl-Ox for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:19 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:46966) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJMuQ-0005Uw-JI for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:18 -0400 Received: by mail-wr1-x441.google.com with SMTP id t17so26522679wrw.13 for ; Wed, 24 Apr 2019 11:46:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=v2Jk8AZf6CSgcMOABMStz0N0NK0P/gFBS8PVkAB1BsY=; b=bjPbgX/Z3AfsN1esR43cy+zEoxoKYG4EtxjDHGqVN6Qyq89D0sKRiSbKCPxl+mPRA2 Fhyghx0EnBydyXW+rTe8nd+BIjEbHxJ8QwNqn7pg0x2b3xh3DV7Rv64lZY5I0ZVID70X cmW/n4aqslQA13s7PiOOo0FdPlO8zUjpwoxXVLKGNgkpiwdau7GJJEFjLXtH/m8lITX/ yfsEO/9zBexVbtQn/62KnV5LtNRse2zVqdlqNsJm7/idaHjzGY+ddyQX6rtu4tzKTYWo Wzprd0w4YYG+4XPlz+7GeZlgKpaugCtFiWZkuCv92DN1ioAFryxOwBg0VRrT2iLm9dxh EAbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=v2Jk8AZf6CSgcMOABMStz0N0NK0P/gFBS8PVkAB1BsY=; b=fmvXfj0uNHbp0wly/axBCf8X0hE1Al0ezKhWNd0JvAJyaR5TRaCR7r3svaC8fKFZ19 C7zrw2XR2BrIrAnAHDWxebANYmgLKtHgQbCgrDUKyjZcm4JLn2aWNzKbwv4pLLJw8R72 R/JSER84VMj4pepcEJyAMKdfQyFxiK2UUPACz4LH081J180XPx5nkDmWgc/Oq+TNjr76 lZuq0UrgzBiN/ml0SMl/BaodSkeTyTaJQ1jb72abbuQ7SbaEhXC24lE7zQgw3LPui4l6 5N9DFEVxk25PPIyCE4PI8xFpPOOLg9VIdukzUKkRAhteRqjHYI5oRn3VwA/LXq8TFoB2 xJGg== X-Gm-Message-State: APjAAAU6oUM7hNP7pT82TGb/ADlrcl8YM+qxTdkzSeZCkQSrcj8YwHn5 q9xt9cSDE0MsDyvfx5R20V3UB2u/ X-Google-Smtp-Source: APXvYqz52nEBbEopz1Yxij4SWzRyynFwQMDi4pGZ8Pp2XN93oeuH+WtoE4BmckRq72jBVTiGc2sbPQ== X-Received: by 2002:adf:9f54:: with SMTP id f20mr14072992wrg.215.1556131576928; Wed, 24 Apr 2019 11:46:16 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id h9sm14720106wmb.5.2019.04.24.11.46.14 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 11:46:15 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 21:45:44 +0300 Message-Id: <20190424184600.8445-4-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424184600.8445-1-arilou@gmail.com> References: <20190424184600.8445-1-arilou@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::441 Subject: [Qemu-devel] [PATCH v4 04/20] gdbstub: Implement continue (c pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Jon Doron --- gdbstub.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 7704edd69c..47b1e7e7a4 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1532,6 +1532,16 @@ static void handle_thread_alive(GdbCmdContext *gdb_ctx, void *user_ctx) put_packet(gdb_ctx->s, "OK"); } +static void handle_continue(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + if (gdb_ctx->num_params) { + gdb_set_cpu_pc(gdb_ctx->s, gdb_ctx->params[0].val_ull); + } + + gdb_ctx->s->signal = 0; + gdb_continue(gdb_ctx->s); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1567,13 +1577,16 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) gdb_breakpoint_remove_all(); break; case 'c': - if (*p != '\0') { - addr = strtoull(p, (char **)&p, 16); - gdb_set_cpu_pc(s, addr); + { + static GdbCmdParseEntry continue_cmd_desc = { + .handler = handle_continue, + .cmd = "c", + .cmd_startswith = 1, + .schema = "L0" + }; + process_string_cmd(s, NULL, line_buf, &continue_cmd_desc, 1); } - s->signal = 0; - gdb_continue(s); - return RS_IDLE; + break; case 'C': s->signal = gdb_signal_to_target (strtoul(p, (char **)&p, 16)); if (s->signal == -1) From patchwork Wed Apr 24 18:45:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10915537 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 22CE21575 for ; Wed, 24 Apr 2019 19:14:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0EA3E28AB3 for ; Wed, 24 Apr 2019 19:14:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 01BEB28ABB; Wed, 24 Apr 2019 19:14:35 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id A86E428AB3 for ; Wed, 24 Apr 2019 19:14:35 +0000 (UTC) Received: from localhost ([127.0.0.1]:45986 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNLm-0008G0-UX for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 15:14:34 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45538) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN6I-0001z4-Up for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:58:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJMuS-0005XY-Dd for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:21 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:40593) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJMuS-0005Wv-6o for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:20 -0400 Received: by mail-wr1-x444.google.com with SMTP id h4so26567905wre.7 for ; Wed, 24 Apr 2019 11:46:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=neNtOgJjSERZhKri3cFMATtFZ1OMKf5FbCq0FcQMwkI=; b=TAOnH07Z+cvsTorTNSBoMjKMKHuBqad3OJP2NetmFpD0ayCIFvNP7cs9lrXGSteqxs s3kEBmxrjn8/uIEY992oZfNWiyZ/8e1++6Te5gM3fbX9Vi3nlTIL3alQRudtga9Lf+Co 3Ad0ASgLL72m8JDX9ZrBVIk00GOgvxVeKMwy7YLKSNqiNFdP8ASH38dPjRZgolhPRFkf idv0HSmShCnlD1H+1PbC87vxE3gGXFi09iW2HKOCVvD4zSRDHG2YVrpWXkOzcn28JJWE p/du2UPhdJ+Pf9i0vtSimckfkraFl1kRbpU3vYviBLE5Iq22eUVadm3emt9HmUlnBEUK Jjgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=neNtOgJjSERZhKri3cFMATtFZ1OMKf5FbCq0FcQMwkI=; b=tUHieMe0SxN3iUsN1wkcqSOG3onHU2h1r4hGd6keYuE8AZhjqgh+l8y+UnMOXRaZOX yJUiPYcSv4CltBXkvsEmSVqRLhpHW7ZR4nJugFO18+snVMYv2rtiX4MXvvYfgdltPUqA T3VxdNo/Su/fQltWxkAyw0Vkas4IlQk9kVECRfAWADFLE5rUehcLsXCPndFsiLF84Mrq XRtHmzLnJAj155/ZNpuAgFUyQx3S7Iakv5IpUfNErqpYb8Z01+seAOFGzPfLMcUmj3FU 8Ye6VB56YKj94Q86OuBCYbroabFOJpnLUR8/DTmDdUEbc9eJccbirPBO7m1k/NcRBkXu B8oA== X-Gm-Message-State: APjAAAWPFMo19pXW1Lub4C8pXP7iz6ZcKUZpAwcLkILSCNcX5qMugnNz kb9aboOrQL/Cqvt/aNaX1S0+mLBt X-Google-Smtp-Source: APXvYqz6L0ouZLaQzt4/TZpujOvuJs8Z63hDyw46NLFhZoH3xPhzHlMTi+9oN+ZhyWYqXQBVy6Vh3A== X-Received: by 2002:adf:eb84:: with SMTP id t4mr22294109wrn.43.1556131578858; Wed, 24 Apr 2019 11:46:18 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id h9sm14720106wmb.5.2019.04.24.11.46.17 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 11:46:17 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 21:45:45 +0300 Message-Id: <20190424184600.8445-5-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424184600.8445-1-arilou@gmail.com> References: <20190424184600.8445-1-arilou@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::444 Subject: [Qemu-devel] [PATCH v4 05/20] gdbstub: Implement continue with signal (C pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Jon Doron --- gdbstub.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 47b1e7e7a4..edcb7bfd17 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1542,6 +1542,21 @@ static void handle_continue(GdbCmdContext *gdb_ctx, void *user_ctx) gdb_continue(gdb_ctx->s); } +static void handle_cont_with_sig(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + unsigned long signal = 0; + + if (gdb_ctx->num_params) { + signal = gdb_ctx->params[0].val_ul; + } + + gdb_ctx->s->signal = gdb_signal_to_target(signal); + if (gdb_ctx->s->signal == -1) { + gdb_ctx->s->signal = 0; + } + gdb_continue(gdb_ctx->s); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1588,11 +1603,16 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) } break; case 'C': - s->signal = gdb_signal_to_target (strtoul(p, (char **)&p, 16)); - if (s->signal == -1) - s->signal = 0; - gdb_continue(s); - return RS_IDLE; + { + static GdbCmdParseEntry cont_with_sig_cmd_desc = { + .handler = handle_cont_with_sig, + .cmd = "C", + .cmd_startswith = 1, + .schema = "l0" + }; + process_string_cmd(s, NULL, line_buf, &cont_with_sig_cmd_desc, 1); + } + break; case 'v': if (strncmp(p, "Cont", 4) == 0) { p += 4; From patchwork Wed Apr 24 18:45:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10915507 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5589F13B5 for ; Wed, 24 Apr 2019 19:06:24 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 44D3628B81 for ; Wed, 24 Apr 2019 19:06:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3950A28B86; Wed, 24 Apr 2019 19:06:24 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id D6BDB28B81 for ; Wed, 24 Apr 2019 19:06:23 +0000 (UTC) Received: from localhost ([127.0.0.1]:45874 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNDr-0000lJ-4C for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 15:06:23 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45538) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN6H-0001z4-GH for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:58:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJMuU-0005Yv-Cf for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:23 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:41206) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJMuU-0005YE-6b for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:22 -0400 Received: by mail-wr1-x442.google.com with SMTP id c12so20396483wrt.8 for ; Wed, 24 Apr 2019 11:46:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+b03fXO6Y0tzO3kbLlDT+FXOGaqTSJg2jxTDufy5egA=; b=FPzdbWp+0FZYR161DDTtUSAAzpabJoRyLJZHhjKAouBN+gSuIW1DfZDm5ZzkLEtMF6 hhoPXd9VO1SaAj0+XVU2cUK5jcAP6yhqtYnoOajn1ArCRhPjK0lL6xu3PfCFmcr2+I/o PDZpwK6WDBjC2H1ZsvWG0ct7nQClYkqBkobOJ0PtFVEH6orZhyb3akXJCrZo1wVXfMVE yAFJh5bpJlAOvfq6eqW8EthrhMRUSguOgxWL6q5KnDgVJlb7wzrtDWbSuech/KCfYlzM z3VEfeU0CLy1durjhsiMh0Nxa3jwhAOWbP7DCE+1KY5h8KudYhnL1y1vTVEjevQNIzdp 1ecA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+b03fXO6Y0tzO3kbLlDT+FXOGaqTSJg2jxTDufy5egA=; b=U2YDhRs/hAkMzd0F1HB+0KlU98XzJAXqOzD2N3KU44D091aOXnQs3+NYe9G23NZu5s /H/G4LAzdXaoLObM0KPzHlHa61pVlWDuCA+oBjDoVjDiYD+9Cr0cyh0acWOVfnjvPei2 bkoSiM5BoeXVpc5hEcp6DLx/IYV8fuzYKle39DzQdgADnVmUf3hG7Swu5lAewX8OhzB5 IHr63f+jMhTkQCECxoxBKn+o7iwTYKhpxzj9VRE7FUhMRb+6D+udH7DrX1oVCm9CrEC9 g3BOwq2nc8VnwUSSr1TbV3x2ndmKhqTQxhMErCglYmS43D7lkEFIvvAk3t5bQsUVTjL0 kMyA== X-Gm-Message-State: APjAAAVROVqxt1q8/vE11R6/gD+VOkz0ooQ7bF/TaD+iZcb31wZ/rDTm ukjFEWicWYV6tj5qN77yCrep1S2T X-Google-Smtp-Source: APXvYqyeqQJHO/hfZJsARaz7gQT2qnemeaJaePEWhzwKXK75i+qzJTlfH2dqB5b9ZN3YLK/MQKrquw== X-Received: by 2002:a5d:52cc:: with SMTP id r12mr22651003wrv.163.1556131580603; Wed, 24 Apr 2019 11:46:20 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id h9sm14720106wmb.5.2019.04.24.11.46.18 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 11:46:19 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 21:45:46 +0300 Message-Id: <20190424184600.8445-6-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424184600.8445-1-arilou@gmail.com> References: <20190424184600.8445-1-arilou@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::442 Subject: [Qemu-devel] [PATCH v4 06/20] gdbstub: Implement set_thread (H pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Jon Doron --- gdbstub.c | 79 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 30 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index edcb7bfd17..c1ec36a062 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1557,6 +1557,47 @@ static void handle_cont_with_sig(GdbCmdContext *gdb_ctx, void *user_ctx) gdb_continue(gdb_ctx->s); } +static void handle_set_thread(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + CPUState *cpu; + + if (gdb_ctx->num_params < 2) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + if (gdb_ctx->params[1].thread_id.kind == GDB_READ_THREAD_ERR) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + if (gdb_ctx->params[1].thread_id.kind != GDB_ONE_THREAD) { + put_packet(gdb_ctx->s, "OK"); + return; + } + + cpu = gdb_get_cpu(gdb_ctx->s, gdb_ctx->params[1].thread_id.pid, + gdb_ctx->params[1].thread_id.tid); + if (!cpu) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + switch (gdb_ctx->params[0].opcode) { + case 'c': + gdb_ctx->s->c_cpu = cpu; + put_packet(gdb_ctx->s, "OK"); + break; + case 'g': + gdb_ctx->s->g_cpu = cpu; + put_packet(gdb_ctx->s, "OK"); + break; + default: + put_packet(gdb_ctx->s, "E22"); + break; + } +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1570,7 +1611,6 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) char thread_id[16]; uint8_t *registers; target_ulong addr, len; - GDBThreadIdKind thread_kind; trace_gdbstub_io_command(line_buf); @@ -1832,35 +1872,14 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) put_packet(s, "E22"); break; case 'H': - type = *p++; - - thread_kind = read_thread_id(p, &p, &pid, &tid); - if (thread_kind == GDB_READ_THREAD_ERR) { - put_packet(s, "E22"); - break; - } - - if (thread_kind != GDB_ONE_THREAD) { - put_packet(s, "OK"); - break; - } - cpu = gdb_get_cpu(s, pid, tid); - if (cpu == NULL) { - put_packet(s, "E22"); - break; - } - switch (type) { - case 'c': - s->c_cpu = cpu; - put_packet(s, "OK"); - break; - case 'g': - s->g_cpu = cpu; - put_packet(s, "OK"); - break; - default: - put_packet(s, "E22"); - break; + { + static GdbCmdParseEntry set_thread_cmd_desc = { + .handler = handle_set_thread, + .cmd = "H", + .cmd_startswith = 1, + .schema = "o.t0" + }; + process_string_cmd(s, NULL, line_buf, &set_thread_cmd_desc, 1); } break; case 'T': From patchwork Wed Apr 24 18:45:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10915531 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E302E13B5 for ; Wed, 24 Apr 2019 19:12:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D33F228BD8 for ; Wed, 24 Apr 2019 19:12:01 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C6AA328C33; Wed, 24 Apr 2019 19:12:01 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 6B4E628C11 for ; Wed, 24 Apr 2019 19:12:01 +0000 (UTC) Received: from localhost ([127.0.0.1]:45956 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNJI-000658-GD for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 15:12:00 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45555) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN6H-0001zm-9k for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:58:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJMuW-0005bv-5z for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:25 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:40594) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJMuW-0005ad-09 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:24 -0400 Received: by mail-wr1-x444.google.com with SMTP id h4so26568126wre.7 for ; Wed, 24 Apr 2019 11:46:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CKLVwHkSrn/LsgdYFsOscfdE/zkLHy1COYaVSODY+HE=; b=roqfOAvX41neFud4UKHQ83uL08gFpGvs75Gw7bbT0T+pe9qPrB/qrwXK8UBwvgmU3K EZtHMv/fPgStGmCfnFg4805/gM8j85ytQDh8C+hceDbL546ev/jeuiRul8N/a80FreWf NmQQwXQ1mX5IsAJsKZODWIPC8qFsz2euw4Ljla2LLqOeunIEz2V5u+/dL6D9rNqbsnzA J+n6rM0WTei6lqsR/ycsV5CamiCHlKG+DClOFaS1sdCuf5fOOaY8fAcQN2mxHHH0Zl6G 8IR+e7KAjdDZ6FQA06McMf4JpGHinOaejh2uAvPTkLFZUturXeMz61jR8sOOW7/jIL2A s6PA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CKLVwHkSrn/LsgdYFsOscfdE/zkLHy1COYaVSODY+HE=; b=drsc2Bt+BI9GFnirM5Kl1D9ytdkV0+97UwetTNrm83zx92Mnwa7XOUf3d+htERqh/T eE4+SHqZ/mBvfqjTpRiku/kwdeVIYWFBFiolpGjEfv36sHwz2TnL1+XpwAqmF4NW9yx1 Bx1zoek29HIj/phVQLm6g6ynfQU4KDLWn5dc/mp7wnqWXpfD3DSEqdcBPBRXnsFeyMe/ 6rV6K171sO34uRg00epDftBq/YTYQYBMdv70S2mW+JfyJrHx+aOyTr3iFRtWInYr9YOC 3uoJ5OTeQyuIbGIN6Kq5yD0UOlIg5XHNC6w5JO+IVey2wsJkc5qzo/p8nOwpRwT3t8+S OIJQ== X-Gm-Message-State: APjAAAX4XDPKs4rVk+tkBkZu9295yjjq+uf815nDwf8+O+Awx97utBb8 O+FiKB4jXdoqcFs3H9JP7Cd78mtr X-Google-Smtp-Source: APXvYqzTTi9/VR+aT011L7J9ETDLk82WKbQd4mnDemYjiweEz96sEGWdiYX7bdQtULB7v5Jlr0cJDQ== X-Received: by 2002:adf:f58f:: with SMTP id f15mr4285875wro.183.1556131582531; Wed, 24 Apr 2019 11:46:22 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id h9sm14720106wmb.5.2019.04.24.11.46.20 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 11:46:21 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 21:45:47 +0300 Message-Id: <20190424184600.8445-7-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424184600.8445-1-arilou@gmail.com> References: <20190424184600.8445-1-arilou@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::444 Subject: [Qemu-devel] [PATCH v4 07/20] gdbstub: Implement insert breakpoint (Z pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Jon Doron --- gdbstub.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index c1ec36a062..03553a1a32 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1598,6 +1598,29 @@ static void handle_set_thread(GdbCmdContext *gdb_ctx, void *user_ctx) } } +static void handle_insert_bp(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + int res; + + if (gdb_ctx->num_params < 3) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + res = gdb_breakpoint_insert(gdb_ctx->params[1].val_ull, + gdb_ctx->params[2].val_ull, + gdb_ctx->params[0].val_ul); + if (res >= 0) { + put_packet(gdb_ctx->s, "OK"); + return; + } else if (res == -ENOSYS) { + put_packet(gdb_ctx->s, ""); + return; + } + + put_packet(gdb_ctx->s, "E22"); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1852,6 +1875,16 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) put_packet(s, "OK"); break; case 'Z': + { + static GdbCmdParseEntry insert_bp_cmd_desc = { + .handler = handle_insert_bp, + .cmd = "Z", + .cmd_startswith = 1, + .schema = "l?L?L0" + }; + process_string_cmd(s, NULL, line_buf, &insert_bp_cmd_desc, 1); + } + break; case 'z': type = strtoul(p, (char **)&p, 16); if (*p == ',') From patchwork Wed Apr 24 18:45:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10915499 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8310A1575 for ; Wed, 24 Apr 2019 19:03:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7476A28B7B for ; Wed, 24 Apr 2019 19:03:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 68A8728B7F; Wed, 24 Apr 2019 19:03:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 1715E28B7B for ; Wed, 24 Apr 2019 19:03:07 +0000 (UTC) Received: from localhost ([127.0.0.1]:45820 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNAg-0006OR-CO for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 15:03:06 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45538) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN6G-0001z4-CH for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:58:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJMuY-0005en-4M for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:26 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:43058) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJMuX-0005eN-Uf for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:26 -0400 Received: by mail-wr1-x443.google.com with SMTP id a12so3312528wrq.10 for ; Wed, 24 Apr 2019 11:46:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ElzHT48UxgaC/DzZnZdBwKI4HnEDP1VB6UBmf2Nb+nY=; b=eG981Ae9MjuyTR6czz4vCA9oempO/n0um5slZ06XnfMAB6ZpFgO1m3W1sgp1+jpcA5 FxEbSVXPd3dfcIqhm2UpoACyYCoz4gtE/skqagjNm9Taq2SJK+IYUAKvWcex5iqNY3NG U4HPdDabohX/rPLZ1VThUHgUbHZMGAn+0WJQJDYbHgkkbIBwl0RV0wePX+zjSExG3pAq Qh8LRJfVJDWNsSWn47fuTNEmdFPBMliVjvMWUFywMQJFgCnivszXfhRq2CgeoUDLqH2n WveAfC7vP3pPFj0ug38be8YOhRXV2RYc1N3XBwQS8u+Cz1jUpcmkUNlqtFBoautny6C0 8Wvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ElzHT48UxgaC/DzZnZdBwKI4HnEDP1VB6UBmf2Nb+nY=; b=iHgRyE48yk53/HLAfJYFN7jnNHikNFm/AdpMcjwbg8ghF/OWvT8CdqQr1kdf5skv5o 5s1DxWhpJLDpn3rS0EyxW7nZLANmVxD1HioWBVXgbj04GEviexqLEG7bDS+H9EqjgQyb UXomM25VPuG1OYd6tlWPWjnjMCyhIJG9P2KLaxc40oGKR6Y/qNKM4d8LZGp0INZ+RcY0 ImbEFM5f+GF3ZEUQQwqrnUvu2NkyP81LFqhX5Vi9lVH0/SRrzYWo3oOjVBG2jRRI1VMs irm0xeBBmY2XHdL5uRe0ZUbw9JYje/jIMaT0i7tM4Hc4xYBuvxiv4QMkZhqKoMXtzgOk m9CA== X-Gm-Message-State: APjAAAVHOtLX9xuEipsF5j07qhg92WCh5KXzAfbZSeY2RJXJN0wthFjH fKWAi4C4hVGbWcRCu7JIrjPHKozc X-Google-Smtp-Source: APXvYqxi3uE8C06oZJyLFgq0RVN4EOJk4AarXQjw6Lp6C9hSawHwC4XNRBcEu3RqEsgTlyInAjn95w== X-Received: by 2002:adf:eb03:: with SMTP id s3mr12520347wrn.170.1556131584628; Wed, 24 Apr 2019 11:46:24 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id h9sm14720106wmb.5.2019.04.24.11.46.22 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 11:46:23 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 21:45:48 +0300 Message-Id: <20190424184600.8445-8-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424184600.8445-1-arilou@gmail.com> References: <20190424184600.8445-1-arilou@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::443 Subject: [Qemu-devel] [PATCH v4 08/20] gdbstub: Implement remove breakpoint (z pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Jon Doron --- gdbstub.c | 49 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 03553a1a32..b5d568603c 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1621,6 +1621,29 @@ static void handle_insert_bp(GdbCmdContext *gdb_ctx, void *user_ctx) put_packet(gdb_ctx->s, "E22"); } +static void handle_remove_bp(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + int res; + + if (gdb_ctx->num_params < 3) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + res = gdb_breakpoint_remove(gdb_ctx->params[1].val_ull, + gdb_ctx->params[2].val_ull, + gdb_ctx->params[0].val_ul); + if (res >= 0) { + put_packet(gdb_ctx->s, "OK"); + return; + } else if (res == -ENOSYS) { + put_packet(gdb_ctx->s, ""); + return; + } + + put_packet(gdb_ctx->s, "E22"); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1886,23 +1909,15 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) } break; case 'z': - type = strtoul(p, (char **)&p, 16); - if (*p == ',') - p++; - addr = strtoull(p, (char **)&p, 16); - if (*p == ',') - p++; - len = strtoull(p, (char **)&p, 16); - if (ch == 'Z') - res = gdb_breakpoint_insert(addr, len, type); - else - res = gdb_breakpoint_remove(addr, len, type); - if (res >= 0) - put_packet(s, "OK"); - else if (res == -ENOSYS) - put_packet(s, ""); - else - put_packet(s, "E22"); + { + static GdbCmdParseEntry remove_bp_cmd_desc = { + .handler = handle_remove_bp, + .cmd = "z", + .cmd_startswith = 1, + .schema = "l?L?L0" + }; + process_string_cmd(s, NULL, line_buf, &remove_bp_cmd_desc, 1); + } break; case 'H': { From patchwork Wed Apr 24 18:45:49 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10915517 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B59E713B5 for ; Wed, 24 Apr 2019 19:09:11 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A67C628B81 for ; Wed, 24 Apr 2019 19:09:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9B25728B85; Wed, 24 Apr 2019 19:09:11 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 493A928B83 for ; Wed, 24 Apr 2019 19:09:11 +0000 (UTC) Received: from localhost ([127.0.0.1]:45897 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNGY-0003N7-GH for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 15:09:10 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45555) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN6G-0001zm-1H for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:58:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJMua-0005gy-14 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:28 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:38093) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJMuZ-0005gI-RC for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:27 -0400 Received: by mail-wr1-x442.google.com with SMTP id f14so25993142wrj.5 for ; Wed, 24 Apr 2019 11:46:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=oSXDiqUy2nUNipWzMgipRoZhdarhHffceRS3uDIOFXM=; b=Hnq2ysX9OkGIfPv5vdGzQFf+1vvj6ZfT7d4j+HkU+1KmPRzeCzlyVEpkvtwr4F6Llm 97VSVzen3dsEUjXtx/SlBCHtR7LgMKmJ+2uLLHOQv6c728D5nELKBp3dsYqdEwCcHX8/ UBrUuzpZ8gXSAcP3w6wLe/F21Tef3yr8AhRnyuPPgWeNUsjgSayFpreffCcJCzJzm8w1 RohE6y6I23+XzM9FSKwO31oxnUvBpsbCVUPquXqMmNr0dhpIcABajMrvzQWswyXS6LTK J3UlGC7TEJHmlFbkCm9TZoTsflP4a0yrprYAHFiUgQDk3eKxzQg4a1PzQekBOGzCpZZ5 9pmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=oSXDiqUy2nUNipWzMgipRoZhdarhHffceRS3uDIOFXM=; b=k/geDrALyfyOwzZoZKe9gDxZWbg9JmZQdDwJQXzm9avorxsCEZ2MzAhevwu2+M+haj cPnA0HfYjPLZ0Wzgx9Ld/QMksyacD8xn7dqMkWgqCLZRppfoEKdO/O27L1gj8apXNZIK Hnaoz/DAPLbQP6kNpuEpWHDPxh1NiGYUiRzJmvncyl8qjIn3ZXwPUz6v+qIl2gSMA7PQ ST27dOZHqDW4//JEkhXfE2XGF8+VCQjj8NJ/G8O1cr/5HA7KjtHTeGMKV/N/vu4pL+7X A6j6w2ElkKi2MFg6NA5Byt+ZrSaw4StJz1ubOmgH3ovhi+f+yOXm7SwPfYlllNkoFLsO fJDQ== X-Gm-Message-State: APjAAAU3yor+4/9XJzVqTpzYp3vrgrJac4ZuIv5+9gMGcq4gk0bSP90e k0ARPPctaUh2HmieUVrJLMW5ytkA X-Google-Smtp-Source: APXvYqwRr33y8jI/u5nV7Ist3MNCO7Fa8Kej7aVKZs+P+7J4R9jezyQPKT0wqm0ckj+E9veEUUhr1Q== X-Received: by 2002:a5d:5383:: with SMTP id d3mr5236445wrv.105.1556131586409; Wed, 24 Apr 2019 11:46:26 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id h9sm14720106wmb.5.2019.04.24.11.46.24 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 11:46:25 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 21:45:49 +0300 Message-Id: <20190424184600.8445-9-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424184600.8445-1-arilou@gmail.com> References: <20190424184600.8445-1-arilou@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::442 Subject: [Qemu-devel] [PATCH v4 09/20] gdbstub: Implement set register (P pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Jon Doron --- gdbstub.c | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index b5d568603c..d3d688a747 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1644,6 +1644,27 @@ static void handle_remove_bp(GdbCmdContext *gdb_ctx, void *user_ctx) put_packet(gdb_ctx->s, "E22"); } +static void handle_set_reg(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + int reg_size; + + if (!gdb_has_xml) { + put_packet(gdb_ctx->s, ""); + return; + } + + if (gdb_ctx->num_params < 2) { + put_packet(gdb_ctx->s, ""); + return; + } + + reg_size = strlen(gdb_ctx->params[1].data) / 2; + hextomem(gdb_ctx->mem_buf, gdb_ctx->params[1].data, reg_size); + gdb_write_register(gdb_ctx->s->g_cpu, gdb_ctx->mem_buf, + gdb_ctx->params[0].val_ull); + put_packet(gdb_ctx->s, "OK"); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1887,15 +1908,15 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) } break; case 'P': - if (!gdb_has_xml) - goto unknown_command; - addr = strtoull(p, (char **)&p, 16); - if (*p == '=') - p++; - reg_size = strlen(p) / 2; - hextomem(mem_buf, p, reg_size); - gdb_write_register(s->g_cpu, mem_buf, addr); - put_packet(s, "OK"); + { + static GdbCmdParseEntry set_reg_cmd_desc = { + .handler = handle_set_reg, + .cmd = "P", + .cmd_startswith = 1, + .schema = "L?s0" + }; + process_string_cmd(s, NULL, line_buf, &set_reg_cmd_desc, 1); + } break; case 'Z': { From patchwork Wed Apr 24 18:45:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10915501 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0E1B21575 for ; Wed, 24 Apr 2019 19:03:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EF16528B7B for ; Wed, 24 Apr 2019 19:03:45 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E1E4928B7F; Wed, 24 Apr 2019 19:03:45 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 8369128B7B for ; Wed, 24 Apr 2019 19:03:45 +0000 (UTC) Received: from localhost ([127.0.0.1]:45822 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNBI-0006qM-OG for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 15:03:44 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45538) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN6F-0001z4-BF for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:58:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJMub-0005jY-TY for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:31 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:37558) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJMub-0005il-NX for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:29 -0400 Received: by mail-wr1-x441.google.com with SMTP id t17so14849579wrr.4 for ; Wed, 24 Apr 2019 11:46:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=UEhluJFSFmCvgit2A05wUiVIx+WL2MDSmnEGCQHEBso=; b=blR5R7JH6z3h27e+FF3UcEALlW0XuqJmHRA6bkoarVmZ1FykPebjS8FO1uAIylUaLo ZSQSWBlTaswQ0oG7zwzkrbN8rcQ2Af/+eDS+HErwkD40QcKCWVJQp898+Qpl1n1VmyvS VU2Mrzce3N9ryMDKYqKDNznZPP0UyoupxkV+O5kRYPqqLMWTMTMWCodSupPtl1O/Q9ev mfq3RbqKxmnhdQU757/KMn9Fp5HDOn7/YMgznAy2tBh0tq1LJxDrlRT/6G2zHI7pRFkr 4gz2U06AYGDIN/MOEbAIL37QY47jUJZ7hkeOtSU2FtssjTx8UyvYAe0p0LQoXeOU+9eK kq8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UEhluJFSFmCvgit2A05wUiVIx+WL2MDSmnEGCQHEBso=; b=sBdQD9zhxJ7OzqUWv3wwAGzZFM1RT/hOIR2soyXWwVviRKeOIvRfiklWw/WqSwyxLq x2SfbqZQ9xUtlpfZrCp1pIVvEeQ7DSLZbBHCxd//NO3RZMmO7D2yNGhD74zTM8W/UYDM zyv3jScbv+B5HXrsIrnqHnrZUxhS6VyiUjY5kzkKCkRzXlKH+D7ckDTVES1X3NC/lgHz r/1BGjRx7JRYoLZtiBHkFEqCj4B2Gux7m+PQ7DgAwoTBJuzoxWprjFbKozvP4QPjr9pv cCTxmdyFCkgcN6YJaYgP3DXpwIRilLwZZSSkXzW04Izonrf5UbrFhxv8xmx1gwbobog4 F6oQ== X-Gm-Message-State: APjAAAWWunYAY6qJUNC+i28VlCa+370kK1ZjhCIOjLy6Gy/wKMW+k7Hs W4WGl52D3ngiZ7flE4AyWgH9ku6m X-Google-Smtp-Source: APXvYqzL02SdHz79fKae2yfhxd0b7bjP4Y0GKvWCEcqCdYffxjeXqPBxH4CIlUUofB0QpoUwlwr/9Q== X-Received: by 2002:adf:cf0c:: with SMTP id o12mr22772357wrj.16.1556131588334; Wed, 24 Apr 2019 11:46:28 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id h9sm14720106wmb.5.2019.04.24.11.46.26 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 11:46:27 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 21:45:50 +0300 Message-Id: <20190424184600.8445-10-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424184600.8445-1-arilou@gmail.com> References: <20190424184600.8445-1-arilou@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::441 Subject: [Qemu-devel] [PATCH v4 10/20] gdbstub: Implement get register (p pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Jon Doron --- gdbstub.c | 50 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index d3d688a747..58b665d303 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1665,6 +1665,36 @@ static void handle_set_reg(GdbCmdContext *gdb_ctx, void *user_ctx) put_packet(gdb_ctx->s, "OK"); } +static void handle_get_reg(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + int reg_size; + + /* + * Older gdb are really dumb, and don't use 'g' if 'p' is avaialable. + * This works, but can be very slow. Anything new enough to + * understand XML also knows how to use this properly. + */ + if (!gdb_has_xml) { + put_packet(gdb_ctx->s, ""); + return; + } + + if (!gdb_ctx->num_params) { + put_packet(gdb_ctx->s, "E14"); + return; + } + + reg_size = gdb_read_register(gdb_ctx->s->g_cpu, gdb_ctx->mem_buf, + gdb_ctx->params[0].val_ull); + if (!reg_size) { + put_packet(gdb_ctx->s, "E14"); + return; + } + + memtohex(gdb_ctx->str_buf, gdb_ctx->mem_buf, reg_size); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1893,18 +1923,14 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) } break; case 'p': - /* Older gdb are really dumb, and don't use 'g' if 'p' is avaialable. - This works, but can be very slow. Anything new enough to - understand XML also knows how to use this properly. */ - if (!gdb_has_xml) - goto unknown_command; - addr = strtoull(p, (char **)&p, 16); - reg_size = gdb_read_register(s->g_cpu, mem_buf, addr); - if (reg_size) { - memtohex(buf, mem_buf, reg_size); - put_packet(s, buf); - } else { - put_packet(s, "E14"); + { + static GdbCmdParseEntry get_reg_cmd_desc = { + .handler = handle_get_reg, + .cmd = "p", + .cmd_startswith = 1, + .schema = "L0" + }; + process_string_cmd(s, NULL, line_buf, &get_reg_cmd_desc, 1); } break; case 'P': From patchwork Wed Apr 24 18:45:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10915529 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2436413B5 for ; Wed, 24 Apr 2019 19:11:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 13F4C28BCD for ; Wed, 24 Apr 2019 19:11:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1262128949; Wed, 24 Apr 2019 19:11:36 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id AFC0E28C0A for ; Wed, 24 Apr 2019 19:11:35 +0000 (UTC) Received: from localhost ([127.0.0.1]:45954 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNIs-0005dg-Kn for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 15:11:34 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45538) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN6E-0001z4-Af for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:58:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJMug-0005sH-Hq for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:36 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:43057) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJMuf-0005ll-4S for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:33 -0400 Received: by mail-wr1-x441.google.com with SMTP id a12so3312849wrq.10 for ; Wed, 24 Apr 2019 11:46:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=M+yhf0GRNa4d/DQXAVVJ7qTGXubOanaL8giDXjKc0rA=; b=qqiXgw0JjPiPCh+d0fvaUjEhv2doUaoNMz0sguWiaNaT2WSTCNx9EmY87UYAEkTisz +IxFunAjRV27qv02sDU+t3LggY/k7bQezcFmdewi0V7CakAtRjDtVI24t2G8JiNW35+k cun42pS6PvO/FyA23NEUir0hFaFgrTYGjap68PfsFY5XgkfCtZ0YXoe1Gzw6PWfL51ql V8Pit7+2UBhj4leQJ80dIVLZvZkaUU7ORcrJ5w/y69Q1qneVBwVcYZ5eeRw43YAYheRk avkQEcsm/CAmt5kHWg0pEA38oz12PsrBHTQyGyKZUcm1x0M5cWNZSVLonpxrnSli9A52 RFxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=M+yhf0GRNa4d/DQXAVVJ7qTGXubOanaL8giDXjKc0rA=; b=tU89ecVVyT3i/J/cO6GMTswpbIuXDE913wK0wyAi5AflkEosEJ6H4tHrl/XGexSz+/ jtOnwD/ZmWu7Aj6f4O90nCXTBSca6HYNDBYdshH+XNm7pWyMTBVgFWeg5CWH0roQV+Hv CgkkpCbo/iqW8+jy6v83UhL0Psn+HmWhKHsarC2nTutyldFPosUHFLbolCVcJ9rvUh4F +j0De/tCwFd/n/tYJoePHa0OCowhjkJqpq2AO0q4401nbE7WZ/d2YJrzoa6E6su3nQKP 7vNsxJEOYiBUwU7zfaYgGptSWeHLgOhe9T2ZtBOlMQx9VHMaIvLtxF6N6QJo+qBf3dS5 70jQ== X-Gm-Message-State: APjAAAXMd5PyL8d1uaDdWMQXQnhGFPwTZH49zziYa56gxHIeYL7DNsDA l8voaRVJFGAQNYZtv3WbmdjG5SY2 X-Google-Smtp-Source: APXvYqwkI4UBMUJRsoQmi8gSLysEFsPFHsp93mzhQ8ohLgKUOY7kJ2Hf1nKOPQ6yF94WbkMRvAXflg== X-Received: by 2002:a5d:4308:: with SMTP id h8mr11601859wrq.22.1556131590205; Wed, 24 Apr 2019 11:46:30 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id h9sm14720106wmb.5.2019.04.24.11.46.28 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 11:46:29 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 21:45:51 +0300 Message-Id: <20190424184600.8445-11-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424184600.8445-1-arilou@gmail.com> References: <20190424184600.8445-1-arilou@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::441 Subject: [Qemu-devel] [PATCH v4 11/20] gdbstub: Implement write memory (M pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Jon Doron --- gdbstub.c | 51 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 58b665d303..f29042cac0 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1695,6 +1695,31 @@ static void handle_get_reg(GdbCmdContext *gdb_ctx, void *user_ctx) put_packet(gdb_ctx->s, gdb_ctx->str_buf); } +static void handle_write_mem(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + if (gdb_ctx->num_params < 3) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + /* hextomem() reads 2*len bytes */ + if (gdb_ctx->params[1].val_ull > strlen(gdb_ctx->params[2].data) / 2) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + hextomem(gdb_ctx->mem_buf, gdb_ctx->params[2].data, + gdb_ctx->params[1].val_ull); + if (target_memory_rw_debug(gdb_ctx->s->g_cpu, gdb_ctx->params[0].val_ull, + gdb_ctx->mem_buf, + gdb_ctx->params[1].val_ull, true)) { + put_packet(gdb_ctx->s, "E14"); + return; + } + + put_packet(gdb_ctx->s, "OK"); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1902,24 +1927,14 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) } break; case 'M': - addr = strtoull(p, (char **)&p, 16); - if (*p == ',') - p++; - len = strtoull(p, (char **)&p, 16); - if (*p == ':') - p++; - - /* hextomem() reads 2*len bytes */ - if (len > strlen(p) / 2) { - put_packet (s, "E22"); - break; - } - hextomem(mem_buf, p, len); - if (target_memory_rw_debug(s->g_cpu, addr, mem_buf, len, - true) != 0) { - put_packet(s, "E14"); - } else { - put_packet(s, "OK"); + { + static GdbCmdParseEntry write_mem_cmd_desc = { + .handler = handle_write_mem, + .cmd = "M", + .cmd_startswith = 1, + .schema = "L,L:s0" + }; + process_string_cmd(s, NULL, line_buf, &write_mem_cmd_desc, 1); } break; case 'p': From patchwork Wed Apr 24 18:45:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10915535 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C1E3E1575 for ; Wed, 24 Apr 2019 19:14:15 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B11BA28AB3 for ; Wed, 24 Apr 2019 19:14:15 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A55F028ABB; Wed, 24 Apr 2019 19:14:15 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 5057E28AB3 for ; Wed, 24 Apr 2019 19:14:15 +0000 (UTC) Received: from localhost ([127.0.0.1]:45983 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNLS-0007zS-KU for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 15:14:14 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45555) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN6E-0001zm-PM for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:58:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJMug-0005sT-IU for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:36 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:44052) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJMuf-0005pG-5T for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:33 -0400 Received: by mail-wr1-x441.google.com with SMTP id c5so17694714wrs.11 for ; Wed, 24 Apr 2019 11:46:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=1SwoKvryYx1PTxyZrw2VBC7pjubib4WcDyGhDiggCzw=; b=sZmTtIlUxV6jS/uCmnEc4eMfNvX9rvKQ5RLOfPgAL9AaO1e7AoQ5hGcPPX8SPE0tBW qpTJFYek09kpiunnB6Nr7noWuPBHNUQn7+vU7BnAiveBVzeXI6pLV4k/PzJwHWna/tZc GcC12fN3NkvmrVxRCXHOnXGxs4YDBr++A106BVmySOYgyzKlRMz9NfO2FrJOmcfkWKVC e9VWEi8X3+iBzj57PZRatFaK9FyVhH+HG9B3AbMI/hB6Q4qwegdztRp3IL24+LiLbesb km74vRQA4bCOvzVjph8knpcLsxS/R5pZJqWmEM++97f6jNIaNuilCujniZbJhZT0I4ag 4dHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=1SwoKvryYx1PTxyZrw2VBC7pjubib4WcDyGhDiggCzw=; b=rWS501ri5sjKkoTx9nkLYcKLcK/TIiJ7p8Kjdkk3x5Pnb1VSbXapVjubbLxTKod7Bt ii6O1WQSigqxWRSHJzYQsDWAoFtVCnGdTf8XC/eQZvdyRab6xOYBl/6N9kSuXfPR3lnz Oe6QMPA4I3v3WN1u3WAQc3LtMkZKsK8u1Qo5CiJWfQCH+ofF8jOemSfbF3nl41EPIDc5 gwrlMSWA57hml/um6Ot6HnQYNao1x6TMDXQRecXJLnxuA6PJ/kQpC80cpPpCKBbfi3Im RTmZFu6NMD9lgA99TbAB+emYbeLYq0WDX6Z4+X/N4W2qPsfGwccTsSRx14kfwZqC0Vtc 6Byg== X-Gm-Message-State: APjAAAW4e/CPdtR0IkYtavLJt8Oamc74sWhsuBB3LfRenaFvY2ArOK2y CyQ/5r0AKoNll55W0hNT/I7Zp5WM X-Google-Smtp-Source: APXvYqwJGRyxhxgaM0KHob1TuhYkByHlGAsD7d+km0+imRUnZk8DHUbUGDwPWucgputQaDSTB5kkTQ== X-Received: by 2002:adf:ec8f:: with SMTP id z15mr13502737wrn.61.1556131591773; Wed, 24 Apr 2019 11:46:31 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id h9sm14720106wmb.5.2019.04.24.11.46.30 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 11:46:31 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 21:45:52 +0300 Message-Id: <20190424184600.8445-12-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424184600.8445-1-arilou@gmail.com> References: <20190424184600.8445-1-arilou@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::441 Subject: [Qemu-devel] [PATCH v4 12/20] gdbstub: Implement read memory (m pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Jon Doron --- gdbstub.c | 48 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index f29042cac0..af37222034 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1720,6 +1720,30 @@ static void handle_write_mem(GdbCmdContext *gdb_ctx, void *user_ctx) put_packet(gdb_ctx->s, "OK"); } +static void handle_read_mem(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + if (gdb_ctx->num_params < 2) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + /* memtohex() doubles the required space */ + if (gdb_ctx->params[1].val_ull > MAX_PACKET_LENGTH / 2) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + if (target_memory_rw_debug(gdb_ctx->s->g_cpu, gdb_ctx->params[0].val_ull, + gdb_ctx->mem_buf, + gdb_ctx->params[1].val_ull, false)) { + put_packet(gdb_ctx->s, "E14"); + return; + } + + memtohex(gdb_ctx->str_buf, gdb_ctx->mem_buf, gdb_ctx->params[1].val_ull); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1908,22 +1932,14 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) put_packet(s, "OK"); break; case 'm': - addr = strtoull(p, (char **)&p, 16); - if (*p == ',') - p++; - len = strtoull(p, NULL, 16); - - /* memtohex() doubles the required space */ - if (len > MAX_PACKET_LENGTH / 2) { - put_packet (s, "E22"); - break; - } - - if (target_memory_rw_debug(s->g_cpu, addr, mem_buf, len, false) != 0) { - put_packet (s, "E14"); - } else { - memtohex(buf, mem_buf, len); - put_packet(s, buf); + { + static GdbCmdParseEntry read_mem_cmd_desc = { + .handler = handle_read_mem, + .cmd = "m", + .cmd_startswith = 1, + .schema = "L,L0" + }; + process_string_cmd(s, NULL, line_buf, &read_mem_cmd_desc, 1); } break; case 'M': From patchwork Wed Apr 24 18:45:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10915491 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4247B1575 for ; Wed, 24 Apr 2019 18:59:59 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 31CA5286F2 for ; Wed, 24 Apr 2019 18:59:59 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2620C2899C; Wed, 24 Apr 2019 18:59:59 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id C5409286F2 for ; Wed, 24 Apr 2019 18:59:58 +0000 (UTC) Received: from localhost ([127.0.0.1]:45762 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN7d-0003U7-VZ for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 14:59:58 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45538) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN6D-0001z4-8q for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:58:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJMum-0005yM-Jv for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:42 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:50184) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJMuk-0005ry-NH for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:39 -0400 Received: by mail-wm1-x343.google.com with SMTP id 10so5985445wmk.0 for ; Wed, 24 Apr 2019 11:46:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=FJVTikkUicWvAfpJ8BpfdJseXsvuuGT8oDDrdrWscvA=; b=jszLGKHvLCyto3lkDXenTAs4LJ+EBQf2jFvhCZxITzEm+Lovq/gr5Nvf8B6iaABl/s ie74doJoxJSe4Z8tZcaV5cW1ka/TttKnJLOb67A0CmgRwES9U7Dqlk6Fad8PQaudl/L3 qcufN7Z+sTKsQvCxaiBHSVvNuyDh4sjzVZKXKA9BFk7QESfX9Pk+2/7IGjNDL4LZn7Lr pcISM82AnCi1R6NT78UsBot5tb+nRi8PIQ3Zw3JOEob+p505DM6li7nwRSp1tNUbQtaE eaKnQWxAjRjZxqWF6Thb+Mcz0dRaILoEy3VeK0ZLykQ7NBwEI4+D84QFROwvHQv578sU DAYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=FJVTikkUicWvAfpJ8BpfdJseXsvuuGT8oDDrdrWscvA=; b=mW+q4c2JoOIhlveLWzYByn8V7MUdMDVdBAHMRYzFcvfb8ph415vbhVpbuBWLqPOSl/ lDgiTWcBzJhQds67fLXRJ8wec3hRaRS8SzpiiMGPZ+umBn1jQ/AlOfm5ibPf+QOrClqu B1BQZNNUjWuBWSQTYUXjP3MI3AYrf7tcogD9Qlf4Rex6nQEn1vrc3gHzcdvRDw+6VBum Q3PjIZ32SDEtnn8YhpscI26+qSKmr5eSgGRwG3jhf84He8jWDBt1i8GROb6EqbstNCpB NIt+t5wlH6826YGBDgUZIcRoowna6TxNs9J50MyUJHcF4329TiIhiV+YTRRlBqKqkNPL ft0A== X-Gm-Message-State: APjAAAVPIpgqU+Iysbr1toSQIEiZrSHtOFQIIAKe9unoIxKoXpc32jY7 ly3x1T9X0xyA+2/4+GWGINNtUQDg X-Google-Smtp-Source: APXvYqw+GB+nGObOfWZ8K+qfyOnPjNsf49BhntKeogcwgc4ECb2GhtyRuKel2hUCeddsjYDlhcH+UQ== X-Received: by 2002:a1c:f311:: with SMTP id q17mr391412wmq.144.1556131593560; Wed, 24 Apr 2019 11:46:33 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id h9sm14720106wmb.5.2019.04.24.11.46.31 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 11:46:32 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 21:45:53 +0300 Message-Id: <20190424184600.8445-13-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424184600.8445-1-arilou@gmail.com> References: <20190424184600.8445-1-arilou@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::343 Subject: [Qemu-devel] [PATCH v4 13/20] gdbstub: Implement write all registers (G pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Jon Doron --- gdbstub.c | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index af37222034..084c688f75 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1744,6 +1744,29 @@ static void handle_read_mem(GdbCmdContext *gdb_ctx, void *user_ctx) put_packet(gdb_ctx->s, gdb_ctx->str_buf); } +static void handle_write_all_regs(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + target_ulong addr, len; + uint8_t *registers; + int reg_size; + + if (!gdb_ctx->num_params) { + return; + } + + cpu_synchronize_state(gdb_ctx->s->g_cpu); + registers = gdb_ctx->mem_buf; + len = strlen(gdb_ctx->params[0].data) / 2; + hextomem(registers, gdb_ctx->params[0].data, len); + for (addr = 0; addr < gdb_ctx->s->g_cpu->gdb_num_g_regs && len > 0; + addr++) { + reg_size = gdb_write_register(gdb_ctx->s->g_cpu, registers, addr); + len -= reg_size; + registers += reg_size; + } + put_packet(gdb_ctx->s, "OK"); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1755,7 +1778,6 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) uint8_t mem_buf[MAX_PACKET_LENGTH]; char buf[sizeof(mem_buf) + 1 /* trailing NUL */]; char thread_id[16]; - uint8_t *registers; target_ulong addr, len; trace_gdbstub_io_command(line_buf); @@ -1920,16 +1942,15 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) put_packet(s, buf); break; case 'G': - cpu_synchronize_state(s->g_cpu); - registers = mem_buf; - len = strlen(p) / 2; - hextomem((uint8_t *)registers, p, len); - for (addr = 0; addr < s->g_cpu->gdb_num_g_regs && len > 0; addr++) { - reg_size = gdb_write_register(s->g_cpu, registers, addr); - len -= reg_size; - registers += reg_size; + { + static GdbCmdParseEntry write_all_regs_cmd_desc = { + .handler = handle_write_all_regs, + .cmd = "G", + .cmd_startswith = 1, + .schema = "s0" + }; + process_string_cmd(s, NULL, line_buf, &write_all_regs_cmd_desc, 1); } - put_packet(s, "OK"); break; case 'm': { From patchwork Wed Apr 24 18:45:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10915505 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B3CC313B5 for ; Wed, 24 Apr 2019 19:06:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A318028B81 for ; Wed, 24 Apr 2019 19:06:22 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 97A1428B86; Wed, 24 Apr 2019 19:06:22 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 4854328B81 for ; Wed, 24 Apr 2019 19:06:22 +0000 (UTC) Received: from localhost ([127.0.0.1]:45872 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNDp-0000jE-G5 for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 15:06:21 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45555) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN6D-0001zm-Na for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:58:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJMum-0005yS-KI for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:42 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:53565) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJMuk-0005un-Nk for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:40 -0400 Received: by mail-wm1-x343.google.com with SMTP id 26so99804wmj.3 for ; Wed, 24 Apr 2019 11:46:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=EaCl9SsGwI5+JE82EjyjE4yVFH0TLyDPcizFjjdq7aM=; b=OAbAEOswep6xp/h3VnyynC9vrnK0ahklR43DYsHUaR1Pm/oS+mf8no0+mzP7lbDMJ+ tQ8TalPeq455vviLLLto/EiQifzsdGW4/9KMCFFOhPt7AXMNyVTVhr0m5BuXkdVnNJxQ CzsFQl+yi0W2HTjy4H1e1UtGFuBWS4tCXIuqqjfj8U+Tk1YFYI+OWG8efQ0Tb/vtPXcw TNjpAl9y1FxDpH3RtEeVZK19MeB3EAFOLtYOGsg4GMMX8K8l6xwZOhZRbnJvnqWSEhYH CDNVmhyJLzg91/Mn1I8WNBzvB0r3utqbAlJwB9LDL4gklapRc1eBBwTOmSTyYPIcyVjZ kUPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=EaCl9SsGwI5+JE82EjyjE4yVFH0TLyDPcizFjjdq7aM=; b=YNaAO6tFGHUmqCRdMSu4vDkmbXQKOUuJ+iN8ThwN7TA8uQhEivCiS8jNs2LQPP4w4W ImqiDR0hW4i4H7bDC+bA4WAaH/KuJrJfOCG5fD/rselZfskUTZ92Ch8rIQhzu9/GlJnn 0rkfLWwqpB4ZMi1598FYl+0updeEP07Ic1+TwfJcSvaWN0OPL95N42QO1/OJSUUaGXZe 6ZjkXA3X0uaxuarBybD9LDOuRGbK02fyoNdKTj+vI9XN1FCIo6/u8FCXhAEpdl7L50rz wb4b+o4VzTgwAiK4M7Cb6CY+0Yf9mJtTw6mE1Ub+cXU+PI87Kr5DxUOAFk5N/GlZQWa0 w0Ww== X-Gm-Message-State: APjAAAXVHjGeZLwyBxDdxOoapXoR5tAJ9zRnkQWt86hDjoi4d9F8RKY+ H3b1xSyPWDNtNG9aE124nuIFDLZO X-Google-Smtp-Source: APXvYqwazn+AC3jTcKmkZ/Kn1+jM5gukSiRR8RUvoDjWDoGQ84LDkaTvKhcGo5LlvSnbcJuoEpno3A== X-Received: by 2002:a1c:dc09:: with SMTP id t9mr387351wmg.142.1556131595527; Wed, 24 Apr 2019 11:46:35 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id h9sm14720106wmb.5.2019.04.24.11.46.33 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 11:46:34 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 21:45:54 +0300 Message-Id: <20190424184600.8445-14-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424184600.8445-1-arilou@gmail.com> References: <20190424184600.8445-1-arilou@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::343 Subject: [Qemu-devel] [PATCH v4 14/20] gdbstub: Implement read all registers (g pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Jon Doron --- gdbstub.c | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 084c688f75..b9ac9401ed 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1767,6 +1767,21 @@ static void handle_write_all_regs(GdbCmdContext *gdb_ctx, void *user_ctx) put_packet(gdb_ctx->s, "OK"); } +static void handle_read_all_regs(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + target_ulong addr, len; + + cpu_synchronize_state(gdb_ctx->s->g_cpu); + len = 0; + for (addr = 0; addr < gdb_ctx->s->g_cpu->gdb_num_g_regs; addr++) { + len += gdb_read_register(gdb_ctx->s->g_cpu, gdb_ctx->mem_buf + len, + addr); + } + + memtohex(gdb_ctx->str_buf, gdb_ctx->mem_buf, len); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1774,7 +1789,7 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) CPUClass *cc; const char *p; uint32_t pid, tid; - int ch, reg_size, type, res; + int ch, type, res; uint8_t mem_buf[MAX_PACKET_LENGTH]; char buf[sizeof(mem_buf) + 1 /* trailing NUL */]; char thread_id[16]; @@ -1932,14 +1947,14 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) } break; case 'g': - cpu_synchronize_state(s->g_cpu); - len = 0; - for (addr = 0; addr < s->g_cpu->gdb_num_g_regs; addr++) { - reg_size = gdb_read_register(s->g_cpu, mem_buf + len, addr); - len += reg_size; + { + static GdbCmdParseEntry read_all_regs_cmd_desc = { + .handler = handle_read_all_regs, + .cmd = "g", + .cmd_startswith = 1 + }; + process_string_cmd(s, NULL, line_buf, &read_all_regs_cmd_desc, 1); } - memtohex(buf, mem_buf, len); - put_packet(s, buf); break; case 'G': { From patchwork Wed Apr 24 18:45:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10915511 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CECFC13B5 for ; Wed, 24 Apr 2019 19:08:48 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BF22828B83 for ; Wed, 24 Apr 2019 19:08:48 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B376328B86; Wed, 24 Apr 2019 19:08:48 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 5368928B83 for ; Wed, 24 Apr 2019 19:08:48 +0000 (UTC) Received: from localhost ([127.0.0.1]:45895 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNGB-00031S-Gw for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 15:08:47 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45555) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN6C-0001zm-Ly for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:58:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJMuo-0005zX-Ge for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:43 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:37007) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJMum-0005wr-Il for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:40 -0400 Received: by mail-wm1-x341.google.com with SMTP id v14so6525029wmf.2 for ; Wed, 24 Apr 2019 11:46:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=zYJbcOVNvpPyrvRX9su4r5yz5i0Elz7yc6R5fA8SZ74=; b=Vs0RlYxsWW4Bsu2DKTNJoNl7zKnNqE9CU6WAFjQ0ixaZ0rXt/eAOXub6SoNJuFrLMU SskBBucnr7fKhKs+RM6BdzXEfcP6fa4iroRxnvtt8BN/45j8kZ5yU59OZM/+aV0S9InM lWQ4bfQxAGNokFGA4xbPgNtETKQFZ04jRqbX4vwQZqJwKadG0R+p1vaixZxoj2HWCHyg hnmlFk7uP8oXgkwjRexdVJRduMPfLy/JDac1/zcdvDcyGkTDvnUIwRqb7dSlrEYBXQiW mfFAn9+MqsA+L1SQ54Bki7oxOkffQWuXz+QtF40KtP+uB2uDXZz6lhrSTLVhsTZ2xnMf 8Gig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zYJbcOVNvpPyrvRX9su4r5yz5i0Elz7yc6R5fA8SZ74=; b=T67TaEfrWM6zIWM7VIYD89djfNe9VLiZCGHFGxVJq0wyIaSQ9lfVH0HLqX98FbfttG cp8B68gnNjFA3Ci4HXWahFt6C1KGAly89kNiwZ2uCz0p07cNF212R+jvWIjzl48pd0Ma Pw3ElxK63HqCUi7w3zqUCTMpmtkqQSGagtQC4gaUonU6P+i+1hggr03To9zhwTyM3grM SltYvm4NdADi4H2Ezs9jsr9h6xUJLlx4pyXk/jM1nhcsDBA6RqRgUITVoqhHg31FC4do NRO9VHZCjdu8wsG6cOxUQ2m0KGCvFug6yrqpZrKjxQykeSfFo0YhSAw31Tno6FlOAjlc hHpQ== X-Gm-Message-State: APjAAAVbsDiBRjr1zulw8wcqphLW0OlWirBmWwA0sNIZLzZWz8m85MRE VHonZY5ytsRnboTME3ZpJwcTf10o X-Google-Smtp-Source: APXvYqzpjG7uTAmIKlo6BVvlCbflfzigSlbqlfmntYC4tt6sLr2EYl07osfuqo64/HYSvPZEIVdg6Q== X-Received: by 2002:a1c:4d02:: with SMTP id o2mr389248wmh.134.1556131597495; Wed, 24 Apr 2019 11:46:37 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id h9sm14720106wmb.5.2019.04.24.11.46.35 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 11:46:36 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 21:45:55 +0300 Message-Id: <20190424184600.8445-15-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424184600.8445-1-arilou@gmail.com> References: <20190424184600.8445-1-arilou@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::341 Subject: [Qemu-devel] [PATCH v4 15/20] gdbstub: Implement file io (F pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Jon Doron --- gdbstub.c | 62 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index b9ac9401ed..772bcd2e1f 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1782,6 +1782,39 @@ static void handle_read_all_regs(GdbCmdContext *gdb_ctx, void *user_ctx) put_packet(gdb_ctx->s, gdb_ctx->str_buf); } +static void handle_file_io(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + int num_syscall_params; + GdbCmdVariant syscall_params[3] = {}; + + if (!gdb_ctx->num_params) { + return; + } + + if (cmd_parse_params(gdb_ctx->params[0].data, "L,L,o0", syscall_params, + &num_syscall_params)) { + return; + } + + if (!num_syscall_params) { + return; + } + + if (gdb_ctx->s->current_syscall_cb) { + gdb_ctx->s->current_syscall_cb(gdb_ctx->s->c_cpu, + (target_ulong)syscall_params[0].val_ull, + (target_ulong)syscall_params[1].val_ull); + gdb_ctx->s->current_syscall_cb = NULL; + } + + if (syscall_params[2].opcode == (uint8_t)'C') { + put_packet(gdb_ctx->s, "T02"); + return; + } + + gdb_continue(gdb_ctx->s); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1922,28 +1955,13 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) return RS_IDLE; case 'F': { - target_ulong ret; - target_ulong err; - - ret = strtoull(p, (char **)&p, 16); - if (*p == ',') { - p++; - err = strtoull(p, (char **)&p, 16); - } else { - err = 0; - } - if (*p == ',') - p++; - type = *p; - if (s->current_syscall_cb) { - s->current_syscall_cb(s->c_cpu, ret, err); - s->current_syscall_cb = NULL; - } - if (type == 'C') { - put_packet(s, "T02"); - } else { - gdb_continue(s); - } + static GdbCmdParseEntry file_io_cmd_desc = { + .handler = handle_file_io, + .cmd = "F", + .cmd_startswith = 1, + .schema = "s0" + }; + process_string_cmd(s, NULL, line_buf, &file_io_cmd_desc, 1); } break; case 'g': From patchwork Wed Apr 24 18:45:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10915497 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 83616922 for ; Wed, 24 Apr 2019 19:03:05 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 731A528B7D for ; Wed, 24 Apr 2019 19:03:05 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6740728B80; Wed, 24 Apr 2019 19:03:05 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 0CD3428B7D for ; Wed, 24 Apr 2019 19:03:05 +0000 (UTC) Received: from localhost ([127.0.0.1]:45818 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNAe-0006MD-Bo for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 15:03:04 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45538) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN6C-0001z4-Br for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:58:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJMuo-00060C-PZ for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:43 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:53043) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJMuo-0005y6-Ff for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:42 -0400 Received: by mail-wm1-x342.google.com with SMTP id j13so5983140wmh.2 for ; Wed, 24 Apr 2019 11:46:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Elov4xAnJGmngtlyMgW02/nKGr/yYVvmnCqDsLN4Wi0=; b=nADDBX/22khSfEbKsFyizO0PysBKg/goXoMD5hkwG0p/vIMG5mEEM3gR2Qel2qTvvk pnvFTevAtV0w1l60P84Int0gXJFLFalLD8d0EnipGmeZUGfOvge6M6x3o1OqcWg0PfhN aft2AkxMdDspbxSbLgqMWzgik3XDM8f3LFAoxPPDXTdOxzyVzjvDCGLD8RYXJK5g8BvV dNtioToflip11I16rqQ/uxRlXOdZh6l/JKkH56KDlWANRPtqHoWerQYJgpuEFRMMtUo+ CoonoDvnPAaOGpYi5nMO8FqowSLH7bRWXemf29e8/POegwFDqcdeguxceDZcsVFWXv61 w8gQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Elov4xAnJGmngtlyMgW02/nKGr/yYVvmnCqDsLN4Wi0=; b=SQH1S2bS17Yo+j8RENbXj7pQnmu/FkeIU0HGMfdeH1UUefCi2100SXmqhC+hk5g+SS iB/u79DvVr+BBAqtV4F6n58CTSNhw/kib+TG72IL68ooByXwP3GBWRw5/YMpne2VmcOJ 4F1jaa9FQlhAu1LcmqHPVVgSc8ptg4URx7kSM8TwYRWv3CbAGHjLemwMcEeAvEm0oED7 3TPICplQSyVS/MzicUUuLWeKLFGy+RaJ3V0cTNvoPxsV/JVps9jkpek+MmjQdyIHC+22 Uidd81BLt6Aq/ghRIsAFj9FurHRQ/TQjYyrsRqrHbJeeRFzdUdlyTGDFq5Oz7Dsvpx5y 4hjw== X-Gm-Message-State: APjAAAWw/QRwM0FI23hmZOp272Aar3IQvE0VC0sN6Lo4kV6Jxb1iG8J6 rZpuU0+ZwXUx6ziPSCgS6dUZPBdV X-Google-Smtp-Source: APXvYqxM14Na4byrA5TTbh9r3QY9DEggUEvynjuE6YIKtWnMlyqnGOZfvwWWYp23DuxuFuSAib8Nmw== X-Received: by 2002:a1c:2109:: with SMTP id h9mr404872wmh.68.1556131599463; Wed, 24 Apr 2019 11:46:39 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id h9sm14720106wmb.5.2019.04.24.11.46.37 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 11:46:38 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 21:45:56 +0300 Message-Id: <20190424184600.8445-16-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424184600.8445-1-arilou@gmail.com> References: <20190424184600.8445-1-arilou@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::342 Subject: [Qemu-devel] [PATCH v4 16/20] gdbstub: Implement step (s pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Jon Doron --- gdbstub.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 772bcd2e1f..265a6e3aeb 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1815,6 +1815,16 @@ static void handle_file_io(GdbCmdContext *gdb_ctx, void *user_ctx) gdb_continue(gdb_ctx->s); } +static void handle_step(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + if (gdb_ctx->num_params) { + gdb_set_cpu_pc(gdb_ctx->s, (target_ulong)gdb_ctx->params[0].val_ull); + } + + cpu_single_step(gdb_ctx->s->c_cpu, sstep_flags); + gdb_continue(gdb_ctx->s); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1946,13 +1956,16 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) } break; case 's': - if (*p != '\0') { - addr = strtoull(p, (char **)&p, 16); - gdb_set_cpu_pc(s, addr); + { + static GdbCmdParseEntry step_cmd_desc = { + .handler = handle_step, + .cmd = "s", + .cmd_startswith = 1, + .schema = "L0" + }; + process_string_cmd(s, NULL, line_buf, &step_cmd_desc, 1); } - cpu_single_step(s->c_cpu, sstep_flags); - gdb_continue(s); - return RS_IDLE; + break; case 'F': { static GdbCmdParseEntry file_io_cmd_desc = { From patchwork Wed Apr 24 18:45:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10915489 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B55011575 for ; Wed, 24 Apr 2019 18:59:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A1F41286F2 for ; Wed, 24 Apr 2019 18:59:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 90A012899C; Wed, 24 Apr 2019 18:59:56 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 6FC14286F2 for ; Wed, 24 Apr 2019 18:59:55 +0000 (UTC) Received: from localhost ([127.0.0.1]:45760 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN7a-0003Qg-CM for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 14:59:54 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45538) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN6B-0001z4-4i for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:58:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJMuq-00061D-Ba for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:46 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:51734) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJMup-00060H-KK for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:44 -0400 Received: by mail-wm1-x341.google.com with SMTP id 4so5926188wmf.1 for ; Wed, 24 Apr 2019 11:46:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=TnGwuRox7yvb4M5l/GDgOTPc0fAhtVpbGoGtUtQCrkc=; b=I3hJNwEmEFoZWN/S938jv7iktamZdgNDj5+wvEe9PMH2mYrSHcw/6A/c7WPSbUCHFk mdoV0zVXMWacmZeQBBB6FIHri92C1aTm4TkxL9Ra//uWnUdRH6aW89uYvhYIzue/07tb fga2pm+oMW2oa0bSGid4qWtO4d3kf9dNdqYZDfAX1NgsGW4rBmp1/KUyzonrQZ9Gnvxm d5vVg4zDXk/QKUcUTFl3KPYJSjuJJReIjqYvG/bUEtiJ+iq6w7CTUc69RpxzJo6jhDKe 1z7HIaxB3vscUicRr1yYIz7rDMq4AZavGDZzlO76cmYapKgch/GYbc1Z5Rb/m5+06YPq /lNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=TnGwuRox7yvb4M5l/GDgOTPc0fAhtVpbGoGtUtQCrkc=; b=az4YXFQgGjyi5nAlebVMfRFy0CmJepW90phRjc1aMypz7gYYWObiZnXD6YlXc4Tk9K cAS0NaZV4/nz+2VCfGUz2AP9ZKXXL2WRvlqPqVbLkx3TiRIv2FG9ItQGWt7QgJHNZhbb uiThzSvHbzxwv6MRQJCXEbwX1z2IqjAWmLE2mARu4Wbnkp4zy72rnNC3yTVzKMDxX8Ij 2M8fohIk/tHxqzGn5L55GYpwHhdeey1AECVK7s1gWQfds3mFTCJoGTKLYa+k5yZ26Hky PTwbCufwAsBZYk9TmaPmpQhp7zduzGwziy3YTCYImU0wtXsPj2ldG7fYpZwYOK2ZNfWZ TKjA== X-Gm-Message-State: APjAAAW1sqaUk0noZCG2QPSS6j8g8YwYlvPkJZ0pUslrAJ4IYZvPq6a5 MtYJOLSFOa1c9SrBeHFAL9hQxxDl X-Google-Smtp-Source: APXvYqzIKkqEkEs/8d3O7xWsWSCKLnirLOAYZjWWqhjZ9YtKaKdmvIKnBiuMavxsp9zk0QB+KGuRxQ== X-Received: by 2002:a1c:4c1a:: with SMTP id z26mr377807wmf.73.1556131601549; Wed, 24 Apr 2019 11:46:41 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id h9sm14720106wmb.5.2019.04.24.11.46.39 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 11:46:40 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 21:45:57 +0300 Message-Id: <20190424184600.8445-17-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424184600.8445-1-arilou@gmail.com> References: <20190424184600.8445-1-arilou@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::341 Subject: [Qemu-devel] [PATCH v4 17/20] gdbstub: Implement v commands with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Jon Doron --- gdbstub.c | 170 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 110 insertions(+), 60 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 265a6e3aeb..8c79e36923 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1825,6 +1825,106 @@ static void handle_step(GdbCmdContext *gdb_ctx, void *user_ctx) gdb_continue(gdb_ctx->s); } +static void handle_v_cont_query(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + put_packet(gdb_ctx->s, "vCont;c;C;s;S"); +} + +static void handle_v_cont(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + int res; + + if (!gdb_ctx->num_params) { + return; + } + + res = gdb_handle_vcont(gdb_ctx->s, gdb_ctx->params[0].data); + if ((res == -EINVAL) || (res == -ERANGE)) { + put_packet(gdb_ctx->s, "E22"); + } else if (res) { + put_packet(gdb_ctx->s, "\0"); + } +} + +static void handle_v_attach(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + GDBProcess *process; + CPUState *cpu; + char thread_id[16]; + + strcpy(gdb_ctx->str_buf, "E22"); + if (!gdb_ctx->num_params) { + goto cleanup; + } + + process = gdb_get_process(gdb_ctx->s, gdb_ctx->params[0].val_ul); + if (!process) { + goto cleanup; + } + + cpu = get_first_cpu_in_process(gdb_ctx->s, process); + if (!cpu) { + goto cleanup; + } + + process->attached = true; + gdb_ctx->s->g_cpu = cpu; + gdb_ctx->s->c_cpu = cpu; + + gdb_fmt_thread_id(gdb_ctx->s, cpu, thread_id, sizeof(thread_id)); + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), "T%02xthread:%s;", + GDB_SIGNAL_TRAP, thread_id); +cleanup: + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} + +static void handle_v_kill(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + /* Kill the target */ + put_packet(gdb_ctx->s, "OK"); + error_report("QEMU: Terminated via GDBstub"); + exit(0); +} + +static GdbCmdParseEntry gdb_v_commands_table[] = { + /* Order is important if has same prefix */ + { + .handler = handle_v_cont_query, + .cmd = "Cont?", + .cmd_startswith = 1 + }, + { + .handler = handle_v_cont, + .cmd = "Cont", + .cmd_startswith = 1, + .schema = "s0" + }, + { + .handler = handle_v_attach, + .cmd = "Attach;", + .cmd_startswith = 1, + .schema = "l0" + }, + { + .handler = handle_v_kill, + .cmd = "Kill;", + .cmd_startswith = 1 + }, +}; + +static void handle_v_commands(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + if (!gdb_ctx->num_params) { + return; + } + + if (process_string_cmd(gdb_ctx->s, NULL, gdb_ctx->params[0].data, + gdb_v_commands_table, + ARRAY_SIZE(gdb_v_commands_table))) { + put_packet(gdb_ctx->s, ""); + } +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1832,7 +1932,7 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) CPUClass *cc; const char *p; uint32_t pid, tid; - int ch, type, res; + int ch, type; uint8_t mem_buf[MAX_PACKET_LENGTH]; char buf[sizeof(mem_buf) + 1 /* trailing NUL */]; char thread_id[16]; @@ -1880,66 +1980,16 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) } break; case 'v': - if (strncmp(p, "Cont", 4) == 0) { - p += 4; - if (*p == '?') { - put_packet(s, "vCont;c;C;s;S"); - break; - } - - res = gdb_handle_vcont(s, p); - - if (res) { - if ((res == -EINVAL) || (res == -ERANGE)) { - put_packet(s, "E22"); - break; - } - goto unknown_command; - } - break; - } else if (strncmp(p, "Attach;", 7) == 0) { - unsigned long pid; - - p += 7; - - if (qemu_strtoul(p, &p, 16, &pid)) { - put_packet(s, "E22"); - break; - } - - process = gdb_get_process(s, pid); - - if (process == NULL) { - put_packet(s, "E22"); - break; - } - - cpu = get_first_cpu_in_process(s, process); - - if (cpu == NULL) { - /* Refuse to attach an empty process */ - put_packet(s, "E22"); - break; - } - - process->attached = true; - - s->g_cpu = cpu; - s->c_cpu = cpu; - - snprintf(buf, sizeof(buf), "T%02xthread:%s;", GDB_SIGNAL_TRAP, - gdb_fmt_thread_id(s, cpu, thread_id, sizeof(thread_id))); - - put_packet(s, buf); - break; - } else if (strncmp(p, "Kill;", 5) == 0) { - /* Kill the target */ - put_packet(s, "OK"); - error_report("QEMU: Terminated via GDBstub"); - exit(0); - } else { - goto unknown_command; + { + static GdbCmdParseEntry v_cmd_desc = { + .handler = handle_v_commands, + .cmd = "v", + .cmd_startswith = 1, + .schema = "s0" + }; + process_string_cmd(s, NULL, line_buf, &v_cmd_desc, 1); } + break; case 'k': /* Kill the target */ error_report("QEMU: Terminated via GDBstub"); From patchwork Wed Apr 24 18:45:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10915503 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 21C561575 for ; Wed, 24 Apr 2019 19:05:55 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1022B28B81 for ; Wed, 24 Apr 2019 19:05:55 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 046DE28B86; Wed, 24 Apr 2019 19:05:55 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 4691428B81 for ; Wed, 24 Apr 2019 19:05:54 +0000 (UTC) Received: from localhost ([127.0.0.1]:45870 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNDN-0000Eg-CB for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 15:05:53 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45555) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN6A-0001zm-Um for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:58:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJMus-000638-IR for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:48 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:36413) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJMus-00061z-9l for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:46 -0400 Received: by mail-wr1-x444.google.com with SMTP id b1so15244321wru.3 for ; Wed, 24 Apr 2019 11:46:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=QQGABXszNUPXqwbpAMs22zCrsdaaKw8jZVGlEs6Tk5c=; b=bOJnJjGs+3KXDEN/1eecLl2selnVlVE1Gxx0+dIRY6BlAXYrarAk6dmgNEJOiH5qwL 9NBPPDMOeB6Wb/62w0zSSRSa893quwqZ8JNRmCoTCi1Ib91KMVPX39YqcOXPxrkuunN5 cxLvS9czzw1D3QGihHLtVOA0M+4vw07uVSQfazqUw/asMvFt0tuVYGRx6+tyMPHV+Q0X khjplgazrrgK3rpgxtisjhW6lLUjaBY+THClycAG4nbcMTWk5hCOvt44ap4jnMcGcZMM 7pQrjXR3NjwVTKmEsxk8Qthh8w/PApTLwpJzxpktUm0tY6Q3B33pV5gVxZAx1tmjJPLr JeyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=QQGABXszNUPXqwbpAMs22zCrsdaaKw8jZVGlEs6Tk5c=; b=jCU0eL0kiV3P2T/EtPtVXIFz4VKQkNVg53Ljz5ASjUilYssAz9KzJY3HC4/8V4XUGe /+Knlp+JDU7mEOJOgSrHxKy+F031KcPjzlBFiwo0+9Bz+gCrjJff9E96ES9ySkgmcYrY qMJ/gDTItiD+xNH2UPHA+wkWIi3mkqWOCIMgn2Jv0ezxQiOpwBH8VOhlaWQf/8HaVt0/ zvly1trpLVmBinLQQR+IADGgozQPgtwmzogt76OcTsKWTph5cu0wBuHbChwlxWni2EWc XIrEyvM1pCE4CR/V1eEqjuBFkKMXviTYbsjl9/bHYyICgvtcsQ2/rRfVCMPUTY9J8JEr IqRg== X-Gm-Message-State: APjAAAVwlEzH6kiMMMy/whb7Q32Fk2ir+f1rjiK3a4aFjcoV3gYLipw+ lQpz8i7oWYWHjT/WongKbI2c24y1 X-Google-Smtp-Source: APXvYqznOPlOnrkL8a5YMV9tAkKHLRGxaA2AJxux4N/W31eYSp+XjHVoGZivp9jLOgRUOVM5ASivCQ== X-Received: by 2002:adf:f8d0:: with SMTP id f16mr22644476wrq.198.1556131604267; Wed, 24 Apr 2019 11:46:44 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id h9sm14720106wmb.5.2019.04.24.11.46.41 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 11:46:43 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 21:45:58 +0300 Message-Id: <20190424184600.8445-18-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424184600.8445-1-arilou@gmail.com> References: <20190424184600.8445-1-arilou@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::444 Subject: [Qemu-devel] [PATCH v4 18/20] gdbstub: Implement generic query (q pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Jon Doron --- gdbstub.c | 335 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 335 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index 8c79e36923..8de4e09caa 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1925,6 +1925,331 @@ static void handle_v_commands(GdbCmdContext *gdb_ctx, void *user_ctx) } } +static void handle_query_qemu_sstepbits(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), + "ENABLE=%x,NOIRQ=%x,NOTIMER=%x", SSTEP_ENABLE, + SSTEP_NOIRQ, SSTEP_NOTIMER); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} + +static void handle_set_qemu_sstep(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + if (!gdb_ctx->num_params) { + return; + } + + sstep_flags = gdb_ctx->params[0].val_ul; + put_packet(gdb_ctx->s, "OK"); +} + +static void handle_query_qemu_sstep(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), "0x%x", sstep_flags); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} + +static void handle_query_curr_tid(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + CPUState *cpu; + GDBProcess *process; + char thread_id[16]; + + /* + * "Current thread" remains vague in the spec, so always return + * the first thread of the current process (gdb returns the + * first thread). + */ + process = gdb_get_cpu_process(gdb_ctx->s, gdb_ctx->s->g_cpu); + cpu = get_first_cpu_in_process(gdb_ctx->s, process); + gdb_fmt_thread_id(gdb_ctx->s, cpu, thread_id, sizeof(thread_id)); + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), "QC%s", thread_id); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} + +static void handle_query_threads(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + char thread_id[16]; + + if (!gdb_ctx->s->query_cpu) { + put_packet(gdb_ctx->s, "l"); + return; + } + + gdb_fmt_thread_id(gdb_ctx->s, gdb_ctx->s->query_cpu, thread_id, + sizeof(thread_id)); + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), "m%s", thread_id); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); + gdb_ctx->s->query_cpu = + gdb_next_attached_cpu(gdb_ctx->s, gdb_ctx->s->query_cpu); +} + +static void handle_query_first_threads(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + gdb_ctx->s->query_cpu = gdb_first_attached_cpu(gdb_ctx->s); + handle_query_threads(gdb_ctx, user_ctx); +} + +static void handle_query_thread_extra(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + CPUState *cpu; + int len; + + if (!gdb_ctx->num_params || + gdb_ctx->params[0].thread_id.kind == GDB_READ_THREAD_ERR) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + cpu = gdb_get_cpu(gdb_ctx->s, gdb_ctx->params[0].thread_id.pid, + gdb_ctx->params[0].thread_id.tid); + if (!cpu) { + return; + } + + cpu_synchronize_state(cpu); + + if (gdb_ctx->s->multiprocess && (gdb_ctx->s->process_num > 1)) { + /* Print the CPU model and name in multiprocess mode */ + ObjectClass *oc = object_get_class(OBJECT(cpu)); + const char *cpu_model = object_class_get_name(oc); + char *cpu_name = object_get_canonical_path_component(OBJECT(cpu)); + len = snprintf((char *)gdb_ctx->mem_buf, sizeof(gdb_ctx->str_buf) / 2, + "%s %s [%s]", cpu_model, cpu_name, + cpu->halted ? "halted " : "running"); + g_free(cpu_name); + } else { + /* memtohex() doubles the required space */ + len = snprintf((char *)gdb_ctx->mem_buf, sizeof(gdb_ctx->str_buf) / 2, + "CPU#%d [%s]", cpu->cpu_index, + cpu->halted ? "halted " : "running"); + } + trace_gdbstub_op_extra_info((char *)gdb_ctx->mem_buf); + memtohex(gdb_ctx->str_buf, gdb_ctx->mem_buf, len); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} + +#ifdef CONFIG_USER_ONLY +static void handle_query_offsets(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + TaskState *ts; + + ts = gdb_ctx->s->c_cpu->opaque; + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), + "Text=" TARGET_ABI_FMT_lx ";Data=" TARGET_ABI_FMT_lx + ";Bss=" TARGET_ABI_FMT_lx, + ts->info->code_offset, + ts->info->data_offset, + ts->info->data_offset); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} +#else +static void handle_query_rcmd(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + int len; + + if (!gdb_ctx->num_params) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + len = strlen(gdb_ctx->params[0].data); + if (len % 2) { + put_packet(gdb_ctx->s, "E01"); + return; + } + + len = len / 2; + hextomem(gdb_ctx->mem_buf, gdb_ctx->params[0].data, len); + gdb_ctx->mem_buf[len++] = 0; + qemu_chr_be_write(gdb_ctx->s->mon_chr, gdb_ctx->mem_buf, len); + put_packet(gdb_ctx->s, "OK"); + +} +#endif + +static void handle_query_supported(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + CPUClass *cc; + + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), "PacketSize=%x", + MAX_PACKET_LENGTH); + cc = CPU_GET_CLASS(first_cpu); + if (cc->gdb_core_xml_file) { + pstrcat(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), + ";qXfer:features:read+"); + } + + if (gdb_ctx->num_params && + strstr(gdb_ctx->params[0].data, "multiprocess+")) { + gdb_ctx->s->multiprocess = true; + } + + pstrcat(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), ";multiprocess+"); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} + +static void handle_query_xfer_features(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + GDBProcess *process; + CPUClass *cc; + unsigned long len, total_len, addr; + const char *xml; + const char *p; + + if (gdb_ctx->num_params < 3) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + process = gdb_get_cpu_process(gdb_ctx->s, gdb_ctx->s->g_cpu); + cc = CPU_GET_CLASS(gdb_ctx->s->g_cpu); + if (!cc->gdb_core_xml_file) { + put_packet(gdb_ctx->s, ""); + return; + } + + gdb_has_xml = true; + p = gdb_ctx->params[0].data; + xml = get_feature_xml(gdb_ctx->s, p, &p, process); + if (!xml) { + put_packet(gdb_ctx->s, "E00"); + return; + } + + addr = gdb_ctx->params[1].val_ul; + len = gdb_ctx->params[2].val_ul; + total_len = strlen(xml); + if (addr > total_len) { + put_packet(gdb_ctx->s, "E00"); + return; + } + + if (len > (MAX_PACKET_LENGTH - 5) / 2) { + len = (MAX_PACKET_LENGTH - 5) / 2; + } + + if (len < total_len - addr) { + gdb_ctx->str_buf[0] = 'm'; + len = memtox(gdb_ctx->str_buf + 1, xml + addr, len); + } else { + gdb_ctx->str_buf[0] = 'l'; + len = memtox(gdb_ctx->str_buf + 1, xml + addr, total_len - addr); + } + + put_packet_binary(gdb_ctx->s, gdb_ctx->str_buf, len + 1, true); +} + +static void handle_query_attached(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + put_packet(gdb_ctx->s, GDB_ATTACHED); +} + +static GdbCmdParseEntry gdb_gen_query_set_common_table[] = { + /* Order is important if has same prefix */ + { + .handler = handle_query_qemu_sstepbits, + .cmd = "qemu.sstepbits", + .cmd_full_match = 1 + }, + { + .handler = handle_query_qemu_sstep, + .cmd = "qemu.sstep", + .cmd_full_match = 1, + }, + { + .handler = handle_set_qemu_sstep, + .cmd = "qemu.sstep=", + .cmd_startswith = 1, + .schema = "l0" + }, +}; + +static GdbCmdParseEntry gdb_gen_query_table[] = { + { + .handler = handle_query_curr_tid, + .cmd = "C", + .cmd_full_match = 1 + }, + { + .handler = handle_query_threads, + .cmd = "sThreadInfo", + .cmd_full_match = 1 + }, + { + .handler = handle_query_first_threads, + .cmd = "fThreadInfo", + .cmd_full_match = 1 + }, + { + .handler = handle_query_thread_extra, + .cmd = "ThreadExtraInfo,", + .cmd_startswith = 1, + .schema = "t0" + }, +#ifdef CONFIG_USER_ONLY + { + .handler = handle_query_offsets, + .cmd = "Offsets", + .cmd_full_match = 1 + }, +#else + { + .handler = handle_query_rcmd, + .cmd = "Rcmd,", + .cmd_startswith = 1, + .schema = "s0" + }, +#endif + { + .handler = handle_query_supported, + .cmd = "Supported:", + .cmd_startswith = 1, + .schema = "s0" + }, + { + .handler = handle_query_supported, + .cmd = "Supported", + .cmd_full_match = 1, + .schema = "s0" + }, + { + .handler = handle_query_xfer_features, + .cmd = "Xfer:features:read:", + .cmd_startswith = 1, + .schema = "s:l,l0" + }, + { + .handler = handle_query_attached, + .cmd = "Attached:", + .cmd_startswith = 1 + }, + { + .handler = handle_query_attached, + .cmd = "Attached", + .cmd_full_match = 1 + }, +}; + +static void handle_gen_query(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + if (!gdb_ctx->num_params) { + return; + } + + if (!process_string_cmd(gdb_ctx->s, NULL, gdb_ctx->params[0].data, + gdb_gen_query_set_common_table, + ARRAY_SIZE(gdb_gen_query_set_common_table))) { + return; + } + + if (process_string_cmd(gdb_ctx->s, NULL, gdb_ctx->params[0].data, + gdb_gen_query_table, + ARRAY_SIZE(gdb_gen_query_table))) { + put_packet(gdb_ctx->s, ""); + } +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -2137,6 +2462,16 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) } break; case 'q': + { + static GdbCmdParseEntry gen_query_cmd_desc = { + .handler = handle_gen_query, + .cmd = "q", + .cmd_startswith = 1, + .schema = "s0" + }; + process_string_cmd(s, NULL, line_buf, &gen_query_cmd_desc, 1); + } + break; case 'Q': /* parse any 'q' packets here */ if (!strcmp(p,"qemu.sstepbits")) { From patchwork Wed Apr 24 18:45:59 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10915493 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4507C1575 for ; Wed, 24 Apr 2019 19:00:32 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2F5EF28B56 for ; Wed, 24 Apr 2019 19:00:32 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2379A28B7B; Wed, 24 Apr 2019 19:00:32 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 7A4DC28B56 for ; Wed, 24 Apr 2019 19:00:31 +0000 (UTC) Received: from localhost ([127.0.0.1]:45794 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN8A-00040M-JW for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 15:00:30 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45555) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN69-0001zm-Fp for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:58:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJMuu-000647-2m for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:49 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:40596) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJMut-00063i-QJ for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:48 -0400 Received: by mail-wr1-x443.google.com with SMTP id h4so26569531wre.7 for ; Wed, 24 Apr 2019 11:46:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=33FIaUwsXhUgKNhssUv3dAg2ebSGWOiTF6mf5E5+6hg=; b=GMZqCmMQ+8BEc2zt5xKSA3NjsBzrGRZ5vx+hsAwU3bun8Mg3zJdsOKheR8EFz1rLlX lppm/XDl0ZGicMSZmlE5kwQSzLjgYyBZsRhtzg+cLkj7gL8QZdRhpSJlfrr/xgY0PjXG cqPBQeGI3M/alDMW0hu6Cr7C80CYk/NFuxQsJz5TBhbDUeVIwh/W2CFh0NbW9b3ZP2FJ KYUvcqG16JFgYYT9l7qtvQGYopR4lHJ6CE/ESZV1wSUyjEe9y3b3FU4SnPSE/iswePMD PteLHLltQjq2Be2NVUmfP6RzjTc3uDJ2k9HLFwr+YzM324UOzZgNlMth8CdcmAXW26CL qJBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=33FIaUwsXhUgKNhssUv3dAg2ebSGWOiTF6mf5E5+6hg=; b=C1Uro7eZNuxEKThiyBERoeTkcnOBjUUgLaQbOV1HKNTToQu6gxJ7ann21vcRdm5xh1 VdNXjF9bRFeWlasT/6wKEr7A2OsXQOvScm9x2GQ83oBTlRTu6BtCAXoueGes1dJ4VaBV VJ7hfgnb/1uYvIXcXENSxuaPpBc3058PXgxQvL7tN7n76MnRI/7rwjOH3Vm4XbpoKN49 UfmIrRY3DPopjCTXD8+jQn8wb0n9UCoPUs1tg2IquOHV/+B7IqezrLnAc7rZ1TPyP+G1 LDWcUJ6C6Smpso3+gJGjLRM4p1Utv9UuS8PVCA09AyiVbuR1qbUB61mRHyJ3kYSy6Bh5 fBPg== X-Gm-Message-State: APjAAAXwq33k6pOUYjtr2Sn84lHMKaTPi2uZpCZdrOEGUYySGHD/Q/hJ jMRR5OvCHmNt7ggXkFvZEXYVpEG5 X-Google-Smtp-Source: APXvYqx0P1k+lkcehRyqj5Lcccxz/gmOix3ABl8V1F125m5OmIhEApwVVM7Px8iBM1L857Gho5Umlw== X-Received: by 2002:adf:d84f:: with SMTP id k15mr5326787wrl.301.1556131606269; Wed, 24 Apr 2019 11:46:46 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id h9sm14720106wmb.5.2019.04.24.11.46.44 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 11:46:45 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 21:45:59 +0300 Message-Id: <20190424184600.8445-19-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424184600.8445-1-arilou@gmail.com> References: <20190424184600.8445-1-arilou@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::443 Subject: [Qemu-devel] [PATCH v4 19/20] gdbstub: Implement generic set (Q pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Jon Doron --- gdbstub.c | 213 +++++++----------------------------------------------- 1 file changed, 25 insertions(+), 188 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 8de4e09caa..61ab630d9e 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1130,14 +1130,6 @@ static GDBThreadIdKind read_thread_id(const char *buf, const char **end_buf, return GDB_ONE_THREAD; } -static int is_query_packet(const char *p, const char *query, char separator) -{ - unsigned int query_len = strlen(query); - - return strncmp(p, query, query_len) == 0 && - (p[query_len] == '\0' || p[query_len] == separator); -} - /** * gdb_handle_vcont - Parses and handles a vCont packet. * returns -ENOTSUP if a command is unsupported, -EINVAL or -ERANGE if there is @@ -2250,18 +2242,28 @@ static void handle_gen_query(GdbCmdContext *gdb_ctx, void *user_ctx) } } +static void handle_gen_set(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + if (!gdb_ctx->num_params) { + return; + } + + if (!process_string_cmd(gdb_ctx->s, NULL, gdb_ctx->params[0].data, + gdb_gen_query_set_common_table, + ARRAY_SIZE(gdb_gen_query_set_common_table))) { + return; + } + + put_packet(gdb_ctx->s, ""); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { - CPUState *cpu; - GDBProcess *process; - CPUClass *cc; const char *p; - uint32_t pid, tid; - int ch, type; + int ch; uint8_t mem_buf[MAX_PACKET_LENGTH]; char buf[sizeof(mem_buf) + 1 /* trailing NUL */]; char thread_id[16]; - target_ulong addr, len; trace_gdbstub_io_command(line_buf); @@ -2473,182 +2475,17 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) } break; case 'Q': - /* parse any 'q' packets here */ - if (!strcmp(p,"qemu.sstepbits")) { - /* Query Breakpoint bit definitions */ - snprintf(buf, sizeof(buf), "ENABLE=%x,NOIRQ=%x,NOTIMER=%x", - SSTEP_ENABLE, - SSTEP_NOIRQ, - SSTEP_NOTIMER); - put_packet(s, buf); - break; - } else if (is_query_packet(p, "qemu.sstep", '=')) { - /* Display or change the sstep_flags */ - p += 10; - if (*p != '=') { - /* Display current setting */ - snprintf(buf, sizeof(buf), "0x%x", sstep_flags); - put_packet(s, buf); - break; - } - p++; - type = strtoul(p, (char **)&p, 16); - sstep_flags = type; - put_packet(s, "OK"); - break; - } else if (strcmp(p,"C") == 0) { - /* - * "Current thread" remains vague in the spec, so always return - * the first thread of the current process (gdb returns the - * first thread). - */ - cpu = get_first_cpu_in_process(s, gdb_get_cpu_process(s, s->g_cpu)); - snprintf(buf, sizeof(buf), "QC%s", - gdb_fmt_thread_id(s, cpu, thread_id, sizeof(thread_id))); - put_packet(s, buf); - break; - } else if (strcmp(p,"fThreadInfo") == 0) { - s->query_cpu = gdb_first_attached_cpu(s); - goto report_cpuinfo; - } else if (strcmp(p,"sThreadInfo") == 0) { - report_cpuinfo: - if (s->query_cpu) { - snprintf(buf, sizeof(buf), "m%s", - gdb_fmt_thread_id(s, s->query_cpu, - thread_id, sizeof(thread_id))); - put_packet(s, buf); - s->query_cpu = gdb_next_attached_cpu(s, s->query_cpu); - } else - put_packet(s, "l"); - break; - } else if (strncmp(p,"ThreadExtraInfo,", 16) == 0) { - if (read_thread_id(p + 16, &p, &pid, &tid) == GDB_READ_THREAD_ERR) { - put_packet(s, "E22"); - break; - } - cpu = gdb_get_cpu(s, pid, tid); - if (cpu != NULL) { - cpu_synchronize_state(cpu); - - if (s->multiprocess && (s->process_num > 1)) { - /* Print the CPU model and name in multiprocess mode */ - ObjectClass *oc = object_get_class(OBJECT(cpu)); - const char *cpu_model = object_class_get_name(oc); - char *cpu_name = - object_get_canonical_path_component(OBJECT(cpu)); - len = snprintf((char *)mem_buf, sizeof(buf) / 2, - "%s %s [%s]", cpu_model, cpu_name, - cpu->halted ? "halted " : "running"); - g_free(cpu_name); - } else { - /* memtohex() doubles the required space */ - len = snprintf((char *)mem_buf, sizeof(buf) / 2, - "CPU#%d [%s]", cpu->cpu_index, - cpu->halted ? "halted " : "running"); - } - trace_gdbstub_op_extra_info((char *)mem_buf); - memtohex(buf, mem_buf, len); - put_packet(s, buf); - } - break; - } -#ifdef CONFIG_USER_ONLY - else if (strcmp(p, "Offsets") == 0) { - TaskState *ts = s->c_cpu->opaque; - - snprintf(buf, sizeof(buf), - "Text=" TARGET_ABI_FMT_lx ";Data=" TARGET_ABI_FMT_lx - ";Bss=" TARGET_ABI_FMT_lx, - ts->info->code_offset, - ts->info->data_offset, - ts->info->data_offset); - put_packet(s, buf); - break; - } -#else /* !CONFIG_USER_ONLY */ - else if (strncmp(p, "Rcmd,", 5) == 0) { - int len = strlen(p + 5); - - if ((len % 2) != 0) { - put_packet(s, "E01"); - break; - } - len = len / 2; - hextomem(mem_buf, p + 5, len); - mem_buf[len++] = 0; - qemu_chr_be_write(s->mon_chr, mem_buf, len); - put_packet(s, "OK"); - break; - } -#endif /* !CONFIG_USER_ONLY */ - if (is_query_packet(p, "Supported", ':')) { - snprintf(buf, sizeof(buf), "PacketSize=%x", MAX_PACKET_LENGTH); - cc = CPU_GET_CLASS(first_cpu); - if (cc->gdb_core_xml_file != NULL) { - pstrcat(buf, sizeof(buf), ";qXfer:features:read+"); - } - - if (strstr(p, "multiprocess+")) { - s->multiprocess = true; - } - pstrcat(buf, sizeof(buf), ";multiprocess+"); - - put_packet(s, buf); - break; - } - if (strncmp(p, "Xfer:features:read:", 19) == 0) { - const char *xml; - target_ulong total_len; - - process = gdb_get_cpu_process(s, s->g_cpu); - cc = CPU_GET_CLASS(s->g_cpu); - if (cc->gdb_core_xml_file == NULL) { - goto unknown_command; - } - - gdb_has_xml = true; - p += 19; - xml = get_feature_xml(s, p, &p, process); - if (!xml) { - snprintf(buf, sizeof(buf), "E00"); - put_packet(s, buf); - break; - } - - if (*p == ':') - p++; - addr = strtoul(p, (char **)&p, 16); - if (*p == ',') - p++; - len = strtoul(p, (char **)&p, 16); - - total_len = strlen(xml); - if (addr > total_len) { - snprintf(buf, sizeof(buf), "E00"); - put_packet(s, buf); - break; - } - if (len > (MAX_PACKET_LENGTH - 5) / 2) - len = (MAX_PACKET_LENGTH - 5) / 2; - if (len < total_len - addr) { - buf[0] = 'm'; - len = memtox(buf + 1, xml + addr, len); - } else { - buf[0] = 'l'; - len = memtox(buf + 1, xml + addr, total_len - addr); - } - put_packet_binary(s, buf, len + 1, true); - break; - } - if (is_query_packet(p, "Attached", ':')) { - put_packet(s, GDB_ATTACHED); - break; + { + static GdbCmdParseEntry gen_set_cmd_desc = { + .handler = handle_gen_set, + .cmd = "Q", + .cmd_startswith = 1, + .schema = "s0" + }; + process_string_cmd(s, NULL, line_buf, &gen_set_cmd_desc, 1); } - /* Unrecognised 'q' command. */ - goto unknown_command; - + break; default: - unknown_command: /* put empty packet */ buf[0] = '\0'; put_packet(s, buf); From patchwork Wed Apr 24 18:46:00 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10915495 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A3CA6922 for ; Wed, 24 Apr 2019 19:02:33 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 91EC728B7B for ; Wed, 24 Apr 2019 19:02:33 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 85A1828B7F; Wed, 24 Apr 2019 19:02:33 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id CB3EF28B7B for ; Wed, 24 Apr 2019 19:02:32 +0000 (UTC) Received: from localhost ([127.0.0.1]:45816 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNA8-0005wF-2M for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 15:02:32 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45538) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJN69-0001z4-Ew for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:58:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJMuw-00065g-Cg for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:51 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:39875) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJMuw-000654-3k for qemu-devel@nongnu.org; Wed, 24 Apr 2019 14:46:50 -0400 Received: by mail-wm1-x343.google.com with SMTP id n25so6515699wmk.4 for ; Wed, 24 Apr 2019 11:46:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=VZlgR/bdvBO9GYH8kPpcaYFD1ijB8eF/54ekGvMt5aM=; b=msEeSyZhiXA1F7oDOJWvmNK4jruzKPSS6eWxuQU5Cx6xPxUPcPujwG2GdovNs3Gyzs RkEOcLJ2divFyipcwK79JT5GuCIyZGvb1ooMR/tKeXWc6EGVvHXTOvgfzaKa0kwPTyIe vH1KMsmS/CvJqmdCWm2rs3crdB29sAPM3xMHw1FMgPpppFNKIIHR/B3P1Rz6AdMIz6Zs 2WFYNCuXQ8VZoRkWj//mjihorJUJyQPuVe+z4nlkAH/moWWMqR94rKnIGkB52OAs34wQ hfnGo4D2kUnhUo0k9ICH4ETNvf+RknKHvCVwm3TtXWuzG2Lhf9v/7AQ5g9f5FgHrPguc T2Lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=VZlgR/bdvBO9GYH8kPpcaYFD1ijB8eF/54ekGvMt5aM=; b=eBDfAh2frtBlYUiukxu9v54iai+psj7gIa1/rOvo1vhdnK691nMkbf1J2qC/75tFdT EJ3oGS6IkCAhjGUqYrzqvaZzKi5js/hzFERFu0nwDFiTtmgu05TkTTVsMQSgTplgYUGx 6sKG41505z9MPYZE1D6ReiwpdIi5LDeRduEbAXtzOx5nOlUzbSpXrXV+KbWtJBi3bzwr VzGjMp52wo9l28bJYZBX4hnLedCM8MEmb4L51iqqnDmwrll4yxE4weMYxxt23KSCqKlr l8OUZltSlui5qp3NKBUVxtEz4nYBjtDANDBbrVQQQngRyYSqurkIXbbfFzRZN1PhOt0/ XqzQ== X-Gm-Message-State: APjAAAWKanIBAjmmIf+sw5UvyFle6nI3ggjv0YCX51Mh83iQNrXJR0bV ulTVbSGH0zS6Nm+n2+Nsf0bpd3jr X-Google-Smtp-Source: APXvYqxJ277h6KDM0p89zfOW6GKlcb1BcMi//dkUHJW8VwrMhh2osyvzXxJVabhquSwTNTQ7XFzLKQ== X-Received: by 2002:a1c:f205:: with SMTP id s5mr338572wmc.131.1556131608349; Wed, 24 Apr 2019 11:46:48 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id h9sm14720106wmb.5.2019.04.24.11.46.46 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 11:46:47 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 21:46:00 +0300 Message-Id: <20190424184600.8445-20-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424184600.8445-1-arilou@gmail.com> References: <20190424184600.8445-1-arilou@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::343 Subject: [Qemu-devel] [PATCH v4 20/20] gdbstub: Refactor parse handle packet to work with a static array X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Jon Doron --- gdbstub.c | 386 ++++++++++++++++++++++-------------------------------- 1 file changed, 158 insertions(+), 228 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 61ab630d9e..69b3a5185e 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -2257,240 +2257,170 @@ static void handle_gen_set(GdbCmdContext *gdb_ctx, void *user_ctx) put_packet(gdb_ctx->s, ""); } -static int gdb_handle_packet(GDBState *s, const char *line_buf) +static void handle_extend_mode(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + put_packet(gdb_ctx->s, "OK"); +} + +static void handle_target_halt(GdbCmdContext *gdb_ctx, void *user_ctx) { - const char *p; - int ch; - uint8_t mem_buf[MAX_PACKET_LENGTH]; - char buf[sizeof(mem_buf) + 1 /* trailing NUL */]; char thread_id[16]; + /* TODO: Make this return the correct value for user-mode. */ + gdb_fmt_thread_id(gdb_ctx->s, gdb_ctx->s->c_cpu, thread_id, + sizeof(thread_id)); + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), "T%02xthread:%s;", + GDB_SIGNAL_TRAP, thread_id); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); + /* + * Remove all the breakpoints when this query is issued, + * because gdb is doing and initial connect and the state + * should be cleaned up. + */ + gdb_breakpoint_remove_all(); +} + +static void handle_kill(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + /* Kill the target */ + error_report("QEMU: Terminated via GDBstub"); + exit(0); +} + +static GdbCmdParseEntry gdb_packet_table[0x100] = { + ['!'] = { + .handler = handle_extend_mode, + .cmd = "!", + .cmd_startswith = 1 + }, + ['?'] = { + .handler = handle_target_halt, + .cmd = "?", + .cmd_startswith = 1 + }, + ['c'] = { + .handler = handle_continue, + .cmd = "c", + .cmd_startswith = 1, + .schema = "L0" + }, + ['C'] = { + .handler = handle_cont_with_sig, + .cmd = "C", + .cmd_startswith = 1, + .schema = "l0" + }, + ['v'] = { + .handler = handle_v_commands, + .cmd = "v", + .cmd_startswith = 1, + .schema = "s0" + }, + ['k'] = { + .handler = handle_kill, + .cmd = "k", + .cmd_startswith = 1 + }, + ['D'] = { + .handler = handle_detach, + .cmd = "D", + .cmd_startswith = 1, + .schema = "?.l0" + }, + ['s'] = { + .handler = handle_step, + .cmd = "s", + .cmd_startswith = 1, + .schema = "L0" + }, + ['F'] = { + .handler = handle_file_io, + .cmd = "F", + .cmd_startswith = 1, + .schema = "s0" + }, + ['g'] = { + .handler = handle_read_all_regs, + .cmd = "g", + .cmd_startswith = 1 + }, + ['G'] = { + .handler = handle_write_all_regs, + .cmd = "G", + .cmd_startswith = 1, + .schema = "s0" + }, + ['m'] = { + .handler = handle_read_mem, + .cmd = "m", + .cmd_startswith = 1, + .schema = "L,L0" + }, + ['M'] = { + .handler = handle_write_mem, + .cmd = "M", + .cmd_startswith = 1, + .schema = "L,L:s0" + }, + ['p'] = { + .handler = handle_get_reg, + .cmd = "p", + .cmd_startswith = 1, + .schema = "L0" + }, + ['P'] = { + .handler = handle_set_reg, + .cmd = "P", + .cmd_startswith = 1, + .schema = "L?s0" + }, + ['Z'] = { + .handler = handle_insert_bp, + .cmd = "Z", + .cmd_startswith = 1, + .schema = "l?L?L0" + }, + ['z'] = { + .handler = handle_remove_bp, + .cmd = "z", + .cmd_startswith = 1, + .schema = "l?L?L0" + }, + ['H'] = { + .handler = handle_set_thread, + .cmd = "H", + .cmd_startswith = 1, + .schema = "o.t0" + }, + ['T'] = { + .handler = handle_thread_alive, + .cmd = "T", + .cmd_startswith = 1, + .schema = "t0" + }, + ['q'] = { + .handler = handle_gen_query, + .cmd = "q", + .cmd_startswith = 1, + .schema = "s0" + }, + ['Q'] = { + .handler = handle_gen_set, + .cmd = "Q", + .cmd_startswith = 1, + .schema = "s0" + }, +}; + +static int gdb_handle_packet(GDBState *s, const char *line_buf) +{ trace_gdbstub_io_command(line_buf); - p = line_buf; - ch = *p++; - switch(ch) { - case '!': - put_packet(s, "OK"); - break; - case '?': - /* TODO: Make this return the correct value for user-mode. */ - snprintf(buf, sizeof(buf), "T%02xthread:%s;", GDB_SIGNAL_TRAP, - gdb_fmt_thread_id(s, s->c_cpu, thread_id, sizeof(thread_id))); - put_packet(s, buf); - /* Remove all the breakpoints when this query is issued, - * because gdb is doing and initial connect and the state - * should be cleaned up. - */ - gdb_breakpoint_remove_all(); - break; - case 'c': - { - static GdbCmdParseEntry continue_cmd_desc = { - .handler = handle_continue, - .cmd = "c", - .cmd_startswith = 1, - .schema = "L0" - }; - process_string_cmd(s, NULL, line_buf, &continue_cmd_desc, 1); - } - break; - case 'C': - { - static GdbCmdParseEntry cont_with_sig_cmd_desc = { - .handler = handle_cont_with_sig, - .cmd = "C", - .cmd_startswith = 1, - .schema = "l0" - }; - process_string_cmd(s, NULL, line_buf, &cont_with_sig_cmd_desc, 1); - } - break; - case 'v': - { - static GdbCmdParseEntry v_cmd_desc = { - .handler = handle_v_commands, - .cmd = "v", - .cmd_startswith = 1, - .schema = "s0" - }; - process_string_cmd(s, NULL, line_buf, &v_cmd_desc, 1); - } - break; - case 'k': - /* Kill the target */ - error_report("QEMU: Terminated via GDBstub"); - exit(0); - case 'D': - { - static GdbCmdParseEntry deatch_cmd_desc = { - .handler = handle_detach, - .cmd = "D", - .cmd_startswith = 1, - .schema = "?.l0" - }; - process_string_cmd(s, NULL, line_buf, &deatch_cmd_desc, 1); - } - break; - case 's': - { - static GdbCmdParseEntry step_cmd_desc = { - .handler = handle_step, - .cmd = "s", - .cmd_startswith = 1, - .schema = "L0" - }; - process_string_cmd(s, NULL, line_buf, &step_cmd_desc, 1); - } - break; - case 'F': - { - static GdbCmdParseEntry file_io_cmd_desc = { - .handler = handle_file_io, - .cmd = "F", - .cmd_startswith = 1, - .schema = "s0" - }; - process_string_cmd(s, NULL, line_buf, &file_io_cmd_desc, 1); - } - break; - case 'g': - { - static GdbCmdParseEntry read_all_regs_cmd_desc = { - .handler = handle_read_all_regs, - .cmd = "g", - .cmd_startswith = 1 - }; - process_string_cmd(s, NULL, line_buf, &read_all_regs_cmd_desc, 1); - } - break; - case 'G': - { - static GdbCmdParseEntry write_all_regs_cmd_desc = { - .handler = handle_write_all_regs, - .cmd = "G", - .cmd_startswith = 1, - .schema = "s0" - }; - process_string_cmd(s, NULL, line_buf, &write_all_regs_cmd_desc, 1); - } - break; - case 'm': - { - static GdbCmdParseEntry read_mem_cmd_desc = { - .handler = handle_read_mem, - .cmd = "m", - .cmd_startswith = 1, - .schema = "L,L0" - }; - process_string_cmd(s, NULL, line_buf, &read_mem_cmd_desc, 1); - } - break; - case 'M': - { - static GdbCmdParseEntry write_mem_cmd_desc = { - .handler = handle_write_mem, - .cmd = "M", - .cmd_startswith = 1, - .schema = "L,L:s0" - }; - process_string_cmd(s, NULL, line_buf, &write_mem_cmd_desc, 1); - } - break; - case 'p': - { - static GdbCmdParseEntry get_reg_cmd_desc = { - .handler = handle_get_reg, - .cmd = "p", - .cmd_startswith = 1, - .schema = "L0" - }; - process_string_cmd(s, NULL, line_buf, &get_reg_cmd_desc, 1); - } - break; - case 'P': - { - static GdbCmdParseEntry set_reg_cmd_desc = { - .handler = handle_set_reg, - .cmd = "P", - .cmd_startswith = 1, - .schema = "L?s0" - }; - process_string_cmd(s, NULL, line_buf, &set_reg_cmd_desc, 1); - } - break; - case 'Z': - { - static GdbCmdParseEntry insert_bp_cmd_desc = { - .handler = handle_insert_bp, - .cmd = "Z", - .cmd_startswith = 1, - .schema = "l?L?L0" - }; - process_string_cmd(s, NULL, line_buf, &insert_bp_cmd_desc, 1); - } - break; - case 'z': - { - static GdbCmdParseEntry remove_bp_cmd_desc = { - .handler = handle_remove_bp, - .cmd = "z", - .cmd_startswith = 1, - .schema = "l?L?L0" - }; - process_string_cmd(s, NULL, line_buf, &remove_bp_cmd_desc, 1); - } - break; - case 'H': - { - static GdbCmdParseEntry set_thread_cmd_desc = { - .handler = handle_set_thread, - .cmd = "H", - .cmd_startswith = 1, - .schema = "o.t0" - }; - process_string_cmd(s, NULL, line_buf, &set_thread_cmd_desc, 1); - } - break; - case 'T': - { - static GdbCmdParseEntry thread_alive_cmd_desc = { - .handler = handle_thread_alive, - .cmd = "T", - .cmd_startswith = 1, - .schema = "t0" - }; - process_string_cmd(s, NULL, line_buf, &thread_alive_cmd_desc, 1); - } - break; - case 'q': - { - static GdbCmdParseEntry gen_query_cmd_desc = { - .handler = handle_gen_query, - .cmd = "q", - .cmd_startswith = 1, - .schema = "s0" - }; - process_string_cmd(s, NULL, line_buf, &gen_query_cmd_desc, 1); - } - break; - case 'Q': - { - static GdbCmdParseEntry gen_set_cmd_desc = { - .handler = handle_gen_set, - .cmd = "Q", - .cmd_startswith = 1, - .schema = "s0" - }; - process_string_cmd(s, NULL, line_buf, &gen_set_cmd_desc, 1); - } - break; - default: - /* put empty packet */ - buf[0] = '\0'; - put_packet(s, buf); - break; + if (process_string_cmd(s, NULL, line_buf, + &gdb_packet_table[*(uint8_t *)line_buf], 1)) { + put_packet(s, ""); } + return RS_IDLE; }