From patchwork Wed Apr 24 14:26: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: 10914971 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 BEE9713B5 for ; Wed, 24 Apr 2019 14:49:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AD6121FF40 for ; Wed, 24 Apr 2019 14:49:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A169B28796; Wed, 24 Apr 2019 14:49:46 +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 137851FF40 for ; Wed, 24 Apr 2019 14:49:46 +0000 (UTC) Received: from localhost ([127.0.0.1]:42855 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJJDV-0000kE-Eb for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 10:49:45 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43876) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJIzN-0004gC-6G for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:35:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJIrt-0000KA-Jj for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:26 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:33636) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJIrt-0000Iv-CT for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:25 -0400 Received: by mail-wr1-x442.google.com with SMTP id s18so630476wrp.0 for ; Wed, 24 Apr 2019 07:27: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:mime-version :content-transfer-encoding; bh=5TvE4pfl6f5eEGUEFOQhBOkuedA1G1QP7QDZaqPSExU=; b=q3XvPy3vd+RQrkOfkFDqYu5qiJU/ahYqHJYMJUuqR/LjAWtqV++fmRK4NH0wBL/Axw NuWdbgkkqL7k1inz++Kdfz8hQ/pKzwPosAHx32dzz8GAV8ttkROJ8X/Ik2idyTd3hpVD ytzpy8LRx4uArqrArTNNWJnmjY5oxesQAJf0Gnw3vEoQs1HUIam6fNW+V+rYUWUjhVxn xDikA8Q1ngb/Twzws1+5olcAu6kX7BQwkXMpWY1mKpqNMNUBHynztnZlyQTnS01MPG7r a3YYsCoUSrWNvMXXu3Q5C529PBRC3D1m+H8uC+MzJsRAu9sSadQiwILOBTxwIM3oNEY6 VO4Q== 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=5TvE4pfl6f5eEGUEFOQhBOkuedA1G1QP7QDZaqPSExU=; b=RPBQ5TyLWJBVoRJGFkZrdoQMA/2nvuYurbi79bdKczxTNZdFeHxR/u4WlIURbSWyRe Vx1glXETRFNrNNn9JvVQwKsvaQZizVYQWCvtgSwx8GtMdcVZOVYbrGK0tuBYddE3NnEv KGe+dEUcbRY7PcjjG8oO4TzkzEtVV9IVjFlavIjQPQKIOK6Czkvqw/Q6v/m33GEqqH6j hbdxEBaXg99agf1A5F4RHtx7yGbtO9fkHX6lQ2WC3bh1GuGH0Hd3cnqKrGT5pv7j8EGc yFImrMvmLy4NG/ivY9oSCr194JtX57xiWwIxJjNVtvwYB/VGY3jdggvyO1ZwHXBYhWw1 ZnRg== X-Gm-Message-State: APjAAAUR9HAKD3/Ux7RvDTE9/k+YSDjEeEo02Huvp/q1xG6rXkkmoaSD A71pXXI2y/BJVYZojN1mU/hIotRP X-Google-Smtp-Source: APXvYqxd24h1Uz5CQID/i0Eh7HAmfP1kwEePvK23yYiltgzDs3f4Ql45DKMXXmbOqVTRRO0pHoCDuw== X-Received: by 2002:adf:b641:: with SMTP id i1mr21654807wre.288.1556116043114; Wed, 24 Apr 2019 07:27:23 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id q7sm5518041wmc.11.2019.04.24.07.27.20 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 07:27:20 -0700 (PDT) From: arilou@gmail.com To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 17:26:55 +0300 Message-Id: <20190424142714.28460-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::442 Subject: [Qemu-devel] [PATCH v3 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 From: Jon Doron Signed-off-by: Jon Doron --- gdbstub.c | 215 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index d54abd17cc..b5bd01b913 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1268,6 +1268,221 @@ 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 'x': + params[curr_param].data = curr_data; + 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) + * 'x' -> xml (stored in .data), must have a ':' delimiter + * '?' -> 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 14:26:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10914987 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 A432D13B5 for ; Wed, 24 Apr 2019 14:51:08 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9210C288E8 for ; Wed, 24 Apr 2019 14:51:08 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 866FE28B5A; Wed, 24 Apr 2019 14:51:08 +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 27A2528B70 for ; Wed, 24 Apr 2019 14:51:07 +0000 (UTC) Received: from localhost ([127.0.0.1]:42897 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJJEp-0001v1-Cm for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 10:51:07 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43979) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJIzN-0004qG-6D for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:35:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJIrv-0000M7-2X for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:28 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:40932) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJIru-0000Kf-SI for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:27 -0400 Received: by mail-wr1-x444.google.com with SMTP id h4so25449651wre.7 for ; Wed, 24 Apr 2019 07:27:26 -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=0t4FX1TNQUnOr4CGuttVo9IjP/yTIVHUDB0xpm/aIaA=; b=ZVb2lgdvFITrBoKCE6wX/q2XJr0an8YLKBRRaRcRb/NzNv7QmstG3StgSxceAGewsY nt+Yt5/ohPV7T5QKfXen0gzO88s+7oe/UPen7X5WR+tLzt5jwwmPzLLNqGs5qyD6Igco 2KE9QB9964qB0IL5LswSYPovBC6ttfeX5htk0sVEUEsw5TZCd0ldsrKNZNSIjqK+Fj7f woEjy4t0WE+NNW3xJsaFX2lqELZtFnVhh0FhZO9F3agMDNnJXORJ2O4i02Ram3t7p1U7 h4I5zecuNrYDBBbKh7oY/lRE1VXTxPimKeFua1y0gXsg7ahk2OAjSngJ8UmW8rBzuxR3 aa9w== 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=0t4FX1TNQUnOr4CGuttVo9IjP/yTIVHUDB0xpm/aIaA=; b=C89YkJmEZyex68Fi73X9Sa5Q9eJb/hZ49MObWswmZiT4Nrcgh2HclPmRa1QXLXWMe5 VDQsYf6RLe3XhDR7XmOAxj+PUvEwTNN65w4b3Eyug1UWXYOL23dRtLeg5pFnlojjE8/O cIpleQVvg9ClTq1xUc4c9qGZSTiEgyr0SeWuDbrnqsv0TzQX5wW+91/3OFbknlDcsmD6 kX/pku0iGhC30ERAhsNf2tS3LA+ipI1TYunDFNAUR11gLYwbfExEo5i8R0dtW3YZ5RKn jGduzfx1nIm+1InMR3zEZ+WtzwhDyzW5U9l3TfoPrn+z5KBdmDZBbarQVlyeLV/dWOka BoYA== X-Gm-Message-State: APjAAAVaY/BxqRunb8VtQRZvLH1kAfaN2F9UH8+opaywCCkNqseWQcUH ggJMV00jzrr3SMY9DfZT/c6Sdbys X-Google-Smtp-Source: APXvYqwgkG992Dfz6kXdUusTwSwFMEgxI7Ei+MzY+RARabCboaTmuesi+VvUe7qN7iNlkLqT3fSekg== X-Received: by 2002:adf:ef07:: with SMTP id e7mr6906035wro.256.1556116045168; Wed, 24 Apr 2019 07:27:25 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id q7sm5518041wmc.11.2019.04.24.07.27.23 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 07:27:24 -0700 (PDT) From: arilou@gmail.com To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 17:26:56 +0300 Message-Id: <20190424142714.28460-2-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424142714.28460-1-arilou@gmail.com> References: <20190424142714.28460-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 v3 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 From: Jon Doron Signed-otff-by: Jon Doron Reviewed-by: Alex Bennée --- gdbstub.c | 82 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 43 insertions(+), 39 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index b5bd01b913..34e6722a8c 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1435,10 +1435,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) { @@ -1483,6 +1479,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; @@ -1597,42 +1628,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 14:26: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: 10914933 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 54BD313B5 for ; Wed, 24 Apr 2019 14:36:15 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4370628A27 for ; Wed, 24 Apr 2019 14:36:15 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 37DD128B50; Wed, 24 Apr 2019 14:36: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 B4D8128A27 for ; Wed, 24 Apr 2019 14:36:13 +0000 (UTC) Received: from localhost ([127.0.0.1]:42659 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJJ0O-00063Z-OL for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 10:36:12 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43933) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJIyy-0004hj-FD for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:34:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJIrx-0000NS-5G for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:30 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:35029) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJIrw-0000Mc-VQ for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:29 -0400 Received: by mail-wm1-x343.google.com with SMTP id y197so5377928wmd.0 for ; Wed, 24 Apr 2019 07:27:28 -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=sqCWStzfcMsu/tEXfh9fQdnW8vNIxC4MXrF6FZGiMas=; b=P1Et8lnck0wntDh1ayJdW/2NS2E0yN89+RKpnCyihUZNjMH5ZOJbIANhr9EMrWB3L5 ti+qRqCtMigjdQY+Iis7tBCiRsKqlXFeN9rAlQy0rfEb4AL6hNn4uTxjxb1QSZKYe/+H EIuGwhVy1X4lD24iGMS15eEZ5oA1VileXCpxyMRAYPAP0SgfYT8YouyqFYLLudb64N1T vrSUrsRBlF4wAQ6s+9AXKrbKN+QruR3ykXGFah/uuITe00tBbuMmAMvCLx6kNCBm0aT5 KTVyENeYOawt0MHo1o4JMsMUzhOfC/Bvwy6d9Ye9Y1zWIwD22bMSVwUBYhYCu/W/8jrh RtpQ== 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=sqCWStzfcMsu/tEXfh9fQdnW8vNIxC4MXrF6FZGiMas=; b=W4IZ3nA10lcdpyTAeaPLQQ0Nmt7D3pxlxMq2WxNj1Xp/djiReT1KiANgR1xnL35xPS qk18zGpMUmsxQUzrm6KZQ18w9iq0Rl4XfISrc/fKyC/VM9paX3GQwZRn3B7be1stEA7Q wrAHzWvw1TIZzAeT3OTC4P+x2NHGMCGGQY747ziiraa3a0V9XCDlDnXSvL0BikTHa31T FxXHzSYd+f7gR/DE4+LFUhKQDACfG3yRQ2S2qH31l2f0q46VXrjiLJNYQCCOqZrEW/32 tHamHbrjRD/SwOVo799AczuzCx/rt7cU10Z5rs+eKAMmJusJ7+Hw8mRf5PoIg1DsGhTj 1KcQ== X-Gm-Message-State: APjAAAVFviKhThEZCXxdTaK52sTVQyM/PjyuEMeYPwSBrz1cilmMHxcI EqnYLqHYFDxoY8AwslrXNfNDK/Bz X-Google-Smtp-Source: APXvYqzK5Ff77NwLwvg1k/Vao2nfGjplriub4Ws4szTtL+ZVxf+tXg4yxyyOGvxWuDdBFZEMzUORbw== X-Received: by 2002:a1c:6587:: with SMTP id z129mr6590092wmb.84.1556116047221; Wed, 24 Apr 2019 07:27:27 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id q7sm5518041wmc.11.2019.04.24.07.27.25 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 07:27:26 -0700 (PDT) From: arilou@gmail.com To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 17:26:57 +0300 Message-Id: <20190424142714.28460-3-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424142714.28460-1-arilou@gmail.com> References: <20190424142714.28460-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 v3 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 From: Jon Doron Signed-off-by: Jon Doron --- gdbstub.c | 43 ++++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 34e6722a8c..435b492b4f 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1514,6 +1514,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; @@ -1813,17 +1837,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 14:26:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10914965 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 833E71515 for ; Wed, 24 Apr 2019 14:47:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7237A21BED for ; Wed, 24 Apr 2019 14:47:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 64CD0280CF; Wed, 24 Apr 2019 14:47:44 +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 1758B21BED for ; Wed, 24 Apr 2019 14:47:44 +0000 (UTC) Received: from localhost ([127.0.0.1]:42841 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJJBX-0007s1-28 for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 10:47:43 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43933) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJIzM-0004hj-Ty for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:35:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJIrz-0000P7-0H for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:31 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:36891) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJIry-0000Nv-Qm for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:30 -0400 Received: by mail-wr1-x442.google.com with SMTP id t17so13736946wrr.4 for ; Wed, 24 Apr 2019 07:27:30 -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=zogLByT0vx2z+qQQ3qhral7Vpr8Eyy7znh0LZW+Yxhg=; b=e/1uvVsxtgdPOEE9ZEPvqOG1w6orTvjZruMTf15SbWCxJILlsujkKk72rua+tw+GUp tiYtzgGo2eOHOwvtEcz0136qMiUzs4hthRaTxkom/lrqj/2tDs2pp7+TFCrOcNVPmXZo PqERTFmlNxgad1SIhIbs06bd3NuHq3gH4uGCLebuh1gQqnwe/ABhHpqp/BuYvDdmeDKQ vSs4UjAg6oaT9XPTOV5crhLSvJlS7PMetI/FDWb7Box4YY3yoe00R9UUKYXIlxEHOauh iALkJzfwCFFvI0XbwXnZtElklw6LjMVigpVgR1la3WeTGNl9tTt/qm/DbR7XBX1sKZGi vovg== 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=zogLByT0vx2z+qQQ3qhral7Vpr8Eyy7znh0LZW+Yxhg=; b=ZrpONrBfMICOYoR8M3X36SmZ1E+bXQZWo7UggYPxo30/yp0EEc0kTehiTv8T/no8qh rapnE4ZNOfeWj82bU34dDXt0+GRzb+6PRg7EhWkHpMuj3knZojvHcYqQm0i4EjunCy9z BggvBKduENuNzr4D/i1Q/s0AO8WTJjXYwEKI/00cx1ZKA3fvK7aZW6S2A5XG5qA8TgvU ji1ayPbmzFj+xPu2/Ww73Iu+OUP+vghuHefXSFpoLbvZjqzm0+QF4FBpPffbjQ9UFQzN v37hak1WGbiUI+Clk4LAotJEe9iXWL1zHmSvQiefTujsgic50eQnCC2CbXpIMln8P9c1 cfiA== X-Gm-Message-State: APjAAAVlNSwQGZ68osjJm+9ghVBbTXdH0ZxH7B3K/PpZkwLsZyNU43m0 TyRx1oyPSpk51qcI/1UiKmFk5ZUP X-Google-Smtp-Source: APXvYqxwIyjtVxdqZPlYm8H6a67VQ4jHZz3VnYFnLoNCCteFyq/AOOoy1/O485rNLuJFQZOi38iFgg== X-Received: by 2002:adf:b3d4:: with SMTP id x20mr23487367wrd.284.1556116049341; Wed, 24 Apr 2019 07:27:29 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id q7sm5518041wmc.11.2019.04.24.07.27.27 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 07:27:28 -0700 (PDT) From: arilou@gmail.com To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 17:26:58 +0300 Message-Id: <20190424142714.28460-4-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424142714.28460-1-arilou@gmail.com> References: <20190424142714.28460-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 v3 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 From: Jon Doron Signed-off-by: Jon Doron Reviewed-by: Alex Bennée --- gdbstub.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 435b492b4f..a6d5acd6f0 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1538,6 +1538,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; @@ -1573,13 +1583,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 14:26: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: 10914959 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 BC356922 for ; Wed, 24 Apr 2019 14:45:00 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id ACADC287DE for ; Wed, 24 Apr 2019 14:45:00 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AAC852884B; Wed, 24 Apr 2019 14:45:00 +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 50C0E28816 for ; Wed, 24 Apr 2019 14:45:00 +0000 (UTC) Received: from localhost ([127.0.0.1]:42773 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJJ8t-0005fL-Ip for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 10:44:59 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43917) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJIzM-0004gR-7z for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:35:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJIs1-0000Rd-3n for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:34 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:43416) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJIs0-0000Ql-Tt for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:33 -0400 Received: by mail-wr1-x442.google.com with SMTP id a12so2198618wrq.10 for ; Wed, 24 Apr 2019 07:27:32 -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=TfkE6Ar039zvehEi89kG1PU/hrNuG0kcx18XMkvwwEs=; b=foBgZQSXyHAPGWNLvw9odtZac0gYsDBsdqAg6HNJtqYFGCDaHyQYShd7Po9NvX6ZGU miCJ8Xzj6B+mArSKXaXvupf6aooq36hTHAPg+VgYZOgCbibtN18H3vzCtZp23EnAxi1r AeMP4JztslzNN2LQzgCZoylhGIyh7NpHr8/Q729az566SbLs982eFVinAzDLW73uGPwn NsB61XbI572t3Xf80mm2+fKn6hiK2/zouH2hQKoyZ0J7MoGun68+fg4l9+Z9VrAJ/Ql2 ziy3Q6Pl8VWqybOGxNIFnCmjXeaoCYz22cRIB9lgnUDAggKMkxBNdGz9NsptUd5CZ+Do dl1A== 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=TfkE6Ar039zvehEi89kG1PU/hrNuG0kcx18XMkvwwEs=; b=J691/OxjxyhLfP8my9tVyV/yXu8DX/QHdSoUedCUrtfkuZOAs7dZZ3ViRPCfCCRnBp 28aFcx0h54yc8sWLLWsDrOz6bDwG2Uiv216wrtmHy4a8lDOMu64XYzd9rdVgr7JYbuvj PQtJexTtgSvDuA05qPG9wMxy/WKgVdfT168Alty90L9kTZiTXZ1Hn016BJ6Q7ogHiHP4 YDBNpOXuJ3eFTxkja9KIiaYhGzuygIa8mfrPhMN/c3td9DouDshOa0gDeHV7bueH+z50 gXYpWz5i5Fe0XZijOnHGHcwpXvBWCtVgRf2FqrPRpr8Jd4TneUahWcuVOVYjJE5M1+OE jxvQ== X-Gm-Message-State: APjAAAUvAZCHeGPftjbx2H6YBREKT8WWyCHUzECN6LIDHBTaP1J9ybSJ yy56BJctOsUSXcIZ74yhXokBCFl0 X-Google-Smtp-Source: APXvYqw2yvZpgvIS91nz/XnAUzYnvKNMTuppXBBzayQs8i17LK5DSGzhg2fY5ZsAgzjG+cb6A1iztA== X-Received: by 2002:a05:6000:12c7:: with SMTP id l7mr20535902wrx.4.1556116051407; Wed, 24 Apr 2019 07:27:31 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id q7sm5518041wmc.11.2019.04.24.07.27.29 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 07:27:30 -0700 (PDT) From: arilou@gmail.com To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 17:26:59 +0300 Message-Id: <20190424142714.28460-5-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424142714.28460-1-arilou@gmail.com> References: <20190424142714.28460-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 v3 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 From: Jon Doron Signed-off-by: Jon Doron --- gdbstub.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index a6d5acd6f0..eaa42713ac 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1548,6 +1548,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; @@ -1594,11 +1609,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 14:27: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: 10914961 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 50C1813B5 for ; Wed, 24 Apr 2019 14:45:20 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3D03128A18 for ; Wed, 24 Apr 2019 14:45:20 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2D0E528A45; Wed, 24 Apr 2019 14:45:20 +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 C9344287DE for ; Wed, 24 Apr 2019 14:45:19 +0000 (UTC) Received: from localhost ([127.0.0.1]:42807 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJJ9D-00061h-21 for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 10:45:19 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43979) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJIzM-0004qG-1f for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:35:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJIs3-0000Sg-3q for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:36 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:41514) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJIs2-0000SF-U4 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:35 -0400 Received: by mail-wr1-x444.google.com with SMTP id c12so19288055wrt.8 for ; Wed, 24 Apr 2019 07:27: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=AtGxKwB2VPfL6jQl6Viia9yYxf81+esR3avKy4DEacA=; b=HqavmJCti81owpL+6bVLuBaLUcvYK7eGfyOHkdzHcyyCC6Msd4l81pOjPGfFIrK3o6 XyaRFEftwGSuehCppj+EvZrvc8v4Z+1Y8WPxM2eYHq5GO4YFUHvnWjcb1GjnOwS+R0vG eYEoIA8cLM00BkK46hAwq5FsedNamBOtlspKanaYJVV8P25tA6Gzm4Os7hTzL8Fx3tXP Yh1rtnFiWyjs+I5uLwCpEGvj74kD+Dd7rj3QSjbk4vIgj1bZhn0pBnerokHcXkeyvgZb u71dg0fxHIBv+PgSFl52+wXneo+Dc+o7/zlvhIYxnLi6+LA8kRhgkUFa4x+GV51iFXNK QeqQ== 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=AtGxKwB2VPfL6jQl6Viia9yYxf81+esR3avKy4DEacA=; b=tCkrY/wUTN0SKzqs57P7usx/Tw2mYYh7ktp8pJL7momp6ahiruKVD5063ga81ywIH+ hGsH6VEVkk5Ml/WKzMFbao6oN/zsRbdCn+3/zLyXfTIRn09uNTZ9ZQJ6lssTiPSPjxii F7zlZAfaWQKRczccjiqsPsHbiC7EtwW70+7iQIthfSq3OiD1huQSW9FQtbXL4V2YpNvo D4pALrnlD6/+1FD+LxfZt60NUzfa/uFZWNbn2gex5ByXixQn+PWz4FZCuvJr4yfDpI/A 2vqML1f4vHhx70/54kqluzfSflJh0A0i0sskH5IG9mJ7azu9Xnc0oKWojIyycXVX1hXT 6lbQ== X-Gm-Message-State: APjAAAX3AkdSO2e2bhhb3ivv6u01ReMGNh3as5cIxWE9HLzx9TvrumDw kVDioiuG9WJCNLEsnE9hbPYu7rL1 X-Google-Smtp-Source: APXvYqygjTharVhNbamXZcbVyFlw+e02db53sIaYe2MdSmOlC+qc7mj8ouOTP0UkaR03cOM6zJiuDw== X-Received: by 2002:adf:dc08:: with SMTP id t8mr20640431wri.220.1556116053418; Wed, 24 Apr 2019 07:27:33 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id q7sm5518041wmc.11.2019.04.24.07.27.31 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 07:27:32 -0700 (PDT) From: arilou@gmail.com To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 17:27:00 +0300 Message-Id: <20190424142714.28460-6-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424142714.28460-1-arilou@gmail.com> References: <20190424142714.28460-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 v3 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 From: Jon Doron Signed-off-by: Jon Doron --- gdbstub.c | 79 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 30 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index eaa42713ac..87b364b1d0 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1563,6 +1563,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; @@ -1576,7 +1617,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); @@ -1838,35 +1878,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 14:27:01 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10914963 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 9A6591515 for ; Wed, 24 Apr 2019 14:45:45 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8970D21BED for ; Wed, 24 Apr 2019 14:45:45 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7E02A28736; Wed, 24 Apr 2019 14:45: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 3269C21BED for ; Wed, 24 Apr 2019 14:45:45 +0000 (UTC) Received: from localhost ([127.0.0.1]:42809 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJJ9c-0006Lb-C4 for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 10:45:44 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43933) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJIzL-0004hj-R3 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:35:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJIs5-0000UO-7u for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:38 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:33639) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJIs5-0000To-23 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:37 -0400 Received: by mail-wr1-x443.google.com with SMTP id s18so631451wrp.0 for ; Wed, 24 Apr 2019 07:27: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=L/ntZTxQqbWbh47gRffGNOALcSxerPUuXFaXMjdEz80=; b=Ht3oNd6DAFodZwbDAYEL5n/Z9eSbh63flG9lUSCT/+HfurtHwyAdmKe7v1yer3oBQ5 VZQXxsa6767LMs8FZZSC6GnEbeKu8BIN7ks8VkgxTuhG18gT6bCGHEi2x4Wjae1WTE3B JuibktgVxOAN/RXGtSSw/ycjAqtKiDmiIF0Mdr0AARuwO8OhmO5A1E0ZQ0DrYYqzToRA QQYiVQwPUOlaIJ9yfkhc/us96vmwSwo5vMIJDOAnm1KSReiN9BSZIsSdV+MhOvGhv7HI zqrmb8BFqMJuXbzoLqCxwkrqe9merJ4UltzeLGq/u8UMGLEDs7BBq7mDLC4Cm3UIwNUs 672A== 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=L/ntZTxQqbWbh47gRffGNOALcSxerPUuXFaXMjdEz80=; b=IeDkRqLZob/SuG7oM502jwur82hFKzjocE7BWv9wWW+e52tzFaAnbUHCEZ8ROfN1IW s3K6+gH/xTuSwSANYSadVUY1o1zG721LrfoyMNZQE0hbQxLi24vnD1i2RibYXo2Pey6c ZkIR8nUdmRuBmksvSxD3cpKKiecGvXi9zXpzOc/9dFyKx8iiN9HnklrpdG0eFz0Ixjaq qktQOIQDc6ryswM7tW2D11F3NeMTe9oQDCCXtMeisSaqMsMq1sn6lpDA0k442QOt76eP M52uIu2IyuWYrF/Uruws5UU0os2sugr5P2pHmPCv0+8/9AhNEuzgse//d8QZGFi63jSx m43w== X-Gm-Message-State: APjAAAX9rg1r1Lo75eDTsKmxG6HaVeDYNexCSzzwf2dIfK/cNeLgdua/ xAdb0TcJMeBIICx3VoPDD9fmZvUx X-Google-Smtp-Source: APXvYqzo0n7+WSNTxKRZmBWMMPKvgmr/hP82aX/tOnzluCT5rmRZUkaPpcZ9aJprrSR/GomldBeYlg== X-Received: by 2002:a5d:550b:: with SMTP id b11mr6782518wrv.81.1556116055468; Wed, 24 Apr 2019 07:27:35 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id q7sm5518041wmc.11.2019.04.24.07.27.33 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 07:27:34 -0700 (PDT) From: arilou@gmail.com To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 17:27:01 +0300 Message-Id: <20190424142714.28460-7-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424142714.28460-1-arilou@gmail.com> References: <20190424142714.28460-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 v3 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 From: Jon Doron Signed-off-by: Jon Doron --- gdbstub.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index 87b364b1d0..67cb140031 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1604,6 +1604,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; @@ -1858,6 +1881,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 14:27:02 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10914967 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 42A2E13B5 for ; Wed, 24 Apr 2019 14:48:14 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2DB0D21BED for ; Wed, 24 Apr 2019 14:48:14 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 20E21285D6; Wed, 24 Apr 2019 14:48:14 +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 41DA021BED for ; Wed, 24 Apr 2019 14:48:12 +0000 (UTC) Received: from localhost ([127.0.0.1]:42843 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJJBz-0008BY-Kw for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 10:48:11 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43914) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJIzL-0004gM-CJ for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:35:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJIs7-0000XR-Mk for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:40 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:36893) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJIs7-0000Ve-G9 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:39 -0400 Received: by mail-wr1-x442.google.com with SMTP id t17so13737680wrr.4 for ; Wed, 24 Apr 2019 07:27: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=4wej51JV8dBZGzGZkifd8KMFqFKiLMpf+q218fNFW6A=; b=KlXdNMYfWBwU7pBg6wIbsnwBfS/5b+VqDP5ceLuI74mX+vb85YiQid8C379vRv9JQ9 cfENSiHBz7/M/Jd/Eiv+ZZPkflq7cIfktNkMDT9+a34h/h6iZfIwposCx280JkwRDIQD tqcQAxgaTMHaTASErQp6siHkLmGHD3BKtz9mpbzkX6gsmZ9DJX2EFXBY/yMeE1L8tKBc 5GpD93losnD8aIR5WcbZzddIGSebqGzniOm6PofXd+xcB9ngZhbSv8esfZ30p8ABIzcU eF9ve36vNganMCgmeBIxQwbrWHXONtSaA91QTBoGYp+u6x4qXCO30x4Yy8t6t/ndTZIp KDRg== 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=4wej51JV8dBZGzGZkifd8KMFqFKiLMpf+q218fNFW6A=; b=HdsJzse9kP1ylB2HDGf/lOiSUFPR8Poi4oShHc2jNVXupxRzarv+0d3MIhYZo5yfSu 9zhYxN/8WcSU+tAVyap10LI1kjez9mHHX0hly45tZ2LOz2aZz7Ov0aJA6NT+WPhqvSjT CANz8MBkt26a4QxKm1rdWlAbIrXN3GHdvGW+yxJDY6h+4C/nD5SWLqT4tnuVXSODNyIl REEN0nsWJJnbcGUOJWG5V/cZbf6quM4K7AHr6WFn93oHdVbyUH5lsAUipuXZuwjnKN/L uEEfK7in2CpWlUzh73ImJ8xKp9fQO9uOESvk5K8ma49po2oS0AXzgUonFo+GOkR6A9VE 39Bg== X-Gm-Message-State: APjAAAV1kmGXULsZlHsM1qHWBW0dQxzfvCMgItbe+Z/ztXF7ybOc3jAU LZEJ8v+zxXf+5mIhENj1NJ6AGn4Q X-Google-Smtp-Source: APXvYqyqe8R3mQrkopp+9RqaMAEvsbdk7ERAI6r0kobolSrZDGfynXI8d9AFSihpw1zKqvf7OePmsQ== X-Received: by 2002:adf:db0c:: with SMTP id s12mr22773849wri.184.1556116057889; Wed, 24 Apr 2019 07:27:37 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id q7sm5518041wmc.11.2019.04.24.07.27.35 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 07:27:36 -0700 (PDT) From: arilou@gmail.com To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 17:27:02 +0300 Message-Id: <20190424142714.28460-8-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424142714.28460-1-arilou@gmail.com> References: <20190424142714.28460-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 v3 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 From: Jon Doron Signed-off-by: Jon Doron --- gdbstub.c | 49 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 67cb140031..d0b27da518 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1627,6 +1627,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; @@ -1892,23 +1915,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 14:27:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10914955 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 CFF33922 for ; Wed, 24 Apr 2019 14:42:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C0F8328A40 for ; Wed, 24 Apr 2019 14:42:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BF7DE28A77; Wed, 24 Apr 2019 14:42:44 +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 67FCE28A45 for ; Wed, 24 Apr 2019 14:42:44 +0000 (UTC) Received: from localhost ([127.0.0.1]:42750 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJJ6h-0003c7-I3 for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 10:42:43 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43979) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJIzK-0004qG-Vc for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:35:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJIsC-0000g6-Ib for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:46 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:40932) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJIsA-0000Zl-Lt for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:44 -0400 Received: by mail-wr1-x441.google.com with SMTP id h4so25451006wre.7 for ; Wed, 24 Apr 2019 07:27:42 -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=/4p/9wcjPsGxuW9B5wn6ecQTpKHg4IUyF0xkxjHpH00=; b=si/a1coBSDVL/q591ChAIH/FO1qsiCdaLHP0PtqfA3L9R5ZU6b+C7hEE3VzHs1NuNB 6oiHIrAxmY5ER48qcWgB9LQTefkTYguj8RQ4Ew5y3f7uxwD/oLfspBdo+4Y6yVMHfbTt /G2Ba64loPklftqeccCrfg9/JuCykJ/HuZJGr9qXEREAvuCHgcfB5IyUjilqNc2HYX28 5ao2sz/TKrS/1iUyklIR7Gsg072ZxuERG6FWX75tgWMQjmFdPtBXGbFAw4oYxy5vEgnI EVvv4ntgn3vsQ4MhgNwHZZ0zzF+9jQjiqGWMMWTE4EWaP8roA7PrkXjw5AqNXl/jN5g3 JNGg== 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=/4p/9wcjPsGxuW9B5wn6ecQTpKHg4IUyF0xkxjHpH00=; b=Y33YmWKRsc71J2rTwyQMQPnOkkT85JJzefqmW1D9BmqJOswijZKInW0iQ2XhZ5QbQi 3Cx2yQ+c/m84V+jRyzd30PoMfLtQGWmlUDmX7dyRQVKYMEF9Af28rWZCoPgtydSM8Oyw /wr0+rN1ubVvvbLmhO5cs4auEor/4soSqI8mVmQRTrxf+XH2IZjKfcdmUgPYe1Xbr3kh JS9E5CGrpFkMWdOgv30JlTtKycYnHCkKc/G0wApBdypQNWWwX5yZuGVZ7nmB+o5ONUHR WcPk7LSof4GVjgke/MBSOoRq33ELnlFx9NukgCg6+AhcBu6K1We/Z4boFKEohTGmjfjU cA9w== X-Gm-Message-State: APjAAAXU18nUchsDPUumDFG+gZkRtfRkiKhJqA81PB+B6ypufOr372AG +twSggY4/ENmpaTwBUVPWOSkHF2Z X-Google-Smtp-Source: APXvYqzPsZ6ClVop0xZawH8FQ4KUaY2vN9hGoQ0qEqGTiK7f0zQ42H7u/otYslYPiMP/ytYk2RVZug== X-Received: by 2002:a5d:530f:: with SMTP id e15mr21332814wrv.19.1556116060154; Wed, 24 Apr 2019 07:27:40 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id q7sm5518041wmc.11.2019.04.24.07.27.37 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 07:27:39 -0700 (PDT) From: arilou@gmail.com To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 17:27:03 +0300 Message-Id: <20190424142714.28460-9-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424142714.28460-1-arilou@gmail.com> References: <20190424142714.28460-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 v3 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 From: Jon Doron Signed-off-by: Jon Doron --- gdbstub.c | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index d0b27da518..674370a60a 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1650,6 +1650,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; @@ -1893,15 +1914,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 14:27:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10914953 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 D0EB21708 for ; Wed, 24 Apr 2019 14:42:28 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0E8D4289C2 for ; Wed, 24 Apr 2019 14:42:26 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0CB2E28BA9; Wed, 24 Apr 2019 14:42:26 +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 9CD43289C2 for ; Wed, 24 Apr 2019 14:42:25 +0000 (UTC) Received: from localhost ([127.0.0.1]:42748 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJJ6O-0003LI-QY for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 10:42:24 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43933) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJIzK-0004hj-O6 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:35:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJIsL-0000oe-Bn for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:55 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:43419) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJIsE-0000fU-Ci for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:48 -0400 Received: by mail-wr1-x443.google.com with SMTP id a12so2199602wrq.10 for ; Wed, 24 Apr 2019 07:27:44 -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=/q2YxP46nWW9AurWHkjvr/gtc+/2KwPsNaB4cdndJHQ=; b=JoPTXwd1WwqEPYqxJXyMMQJIgMvlvGUH+iTswjG7xnHa4P8bQPxF96pxTVY9Kdm/lc HSFBcEp8Apr72VCXmmela82XSGOEDFAvGiPHTCqQbUa1RVFnjgZdVaRrMDqt9YU8bE3f gI58Hc6NEN3ZL/d9OPllHhs63MtaKxlo93XGZHwAISGNdYaTDnML5luqPqFEvkOMNdQ4 pLDqh8/Gn1f+E2WtrvE+Vwj+hI0ma04xdr3XW6HW0kILDBh7C/pgweTEql8w9vToxRb+ 2hP8hPKCarf/wGNA2jYPpZuE7Wd23AAUPSGFNDNytrV5JL15uBROLBSxim4GEkdg5TJO LNeA== 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=/q2YxP46nWW9AurWHkjvr/gtc+/2KwPsNaB4cdndJHQ=; b=o7tmBoPBzWFmRbzyEhoZPFzdGEksHUa07PTEhodLfVCouycCpy0t7CXKYh8FCy7dlX r1GOB1HWVt+QHcHD7VbzktBEp32BTZIK7N+ry2prC8RcVS5zOGWZ6ImZGyJaLgZ90ueL NJoDdzuYYWsQTY9mDM6OPh+x6/r8h1nwbCNs9Rg6hGGbn2283eHLhBUdBfB2VWqosyW4 68gCvhT4Y398V3ZY0O/odzZSH2Lchn+2fadRPCWMgzekIApd8jg9LOY/ahCCKxzC/yFm bGTXizPWFtafgFR+sEMjelY0Y7K/IjZo5iW1E3eHi4uAFW+4ieN30NdaUxaSMgmMXVY1 hBqA== X-Gm-Message-State: APjAAAW4Dzun2wc1P9uAYlnlUmzgTG8wTY9jXumyRT4wPOpQ1lVofA/X OnNpB6Gx3iOaHqOrgiPzgVlN9lVW X-Google-Smtp-Source: APXvYqxxxpX3ul8ZIWhoXlZt1WRXtyNdVxDhfUZxN06/FGqA6CudX72qoDpJxK9DOsQfdqBVBZKu5w== X-Received: by 2002:adf:dc08:: with SMTP id t8mr20641013wri.220.1556116062668; Wed, 24 Apr 2019 07:27:42 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id q7sm5518041wmc.11.2019.04.24.07.27.40 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 07:27:41 -0700 (PDT) From: arilou@gmail.com To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 17:27:04 +0300 Message-Id: <20190424142714.28460-10-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424142714.28460-1-arilou@gmail.com> References: <20190424142714.28460-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 v3 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 From: Jon Doron Signed-off-by: Jon Doron --- gdbstub.c | 50 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 674370a60a..ca91cb6740 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1671,6 +1671,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; @@ -1899,18 +1929,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 14:27:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10914957 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 8293B922 for ; Wed, 24 Apr 2019 14:44:59 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 72659287C0 for ; Wed, 24 Apr 2019 14:44:59 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 703332882C; Wed, 24 Apr 2019 14:44: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 1FCB42884B for ; Wed, 24 Apr 2019 14:44:58 +0000 (UTC) Received: from localhost ([127.0.0.1]:42771 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJJ8s-0005e6-3n for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 10:44:58 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43876) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJIzK-0004gC-IR for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:35:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJIsL-0000pB-UZ for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:55 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:44425) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJIsK-0000hq-1b for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:53 -0400 Received: by mail-wr1-x443.google.com with SMTP id c5so16586391wrs.11 for ; Wed, 24 Apr 2019 07:27: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=1Xzew2DYAuR34ykBKdLIT8kezrjugasfzVHtbe9dKFY=; b=Ig3S8TS/r2gQE/ij6CXDSEFrHEvk4cYRRnO4ajnpNN1rqbluromBKiF9F3YgzWnVAp FfmH+x7bzop3kXiHVi4dhnnY5AFc49lKCLvdQM42k1JvDQ46VPQztMAJ7IPT8FF64CnS zGAerJ1ioL+lKvZmcL1pbWwEFp05qnon4z0OXlhloFU+gZBDl1A1rxO831MdqktqUZ2E /1P6BB2ixT63xo/G9PyhSa91P5xWxHJaKVO6O5fuSyDd2z5fJ+wdC6J8OPuXtbnPYkZ7 gQWdQVFEo6VtGP4bZMw5mgDo+HJtdop1i4q0fqhI4Lby/L87NsckASTFrnhi+bUMvMwB Ox2Q== 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=1Xzew2DYAuR34ykBKdLIT8kezrjugasfzVHtbe9dKFY=; b=SPC9TXogk48vCoddPj1RgI80g54XZ1u9HQCFjmDxo0U0z4o/EXZyniR9axXMIJE7T9 ZaVTikOYwlyR1yFTItnDoCk88fQLlF4xQ3mUYC5sFXxSmO2t9wVrVqDa6lvjM5X08eIA FHCfGnjbdPzrjz3J8hUagscTbOpOqx7xBikhhXfmX6rb+8WdKhXWGidXdpJHY5Hiw/WA aQIj95AG2IaC77CJ9g/BZs4sbB62iu1w2pm+CzBG1YO+q/GG7DBIcMOCRE/mw0Q8UzL9 0/ggEBkSW+apsxU1AXwEY5eJenpQPq8B1sI78bU0bi+GSMNskWLsT/b83639eGkJlkwG EmlQ== X-Gm-Message-State: APjAAAWVCsFGRmliXGjuqmt5ZgeO4XWoi6pYYMkF1COGl9+flnhP8dX/ 3G6GBwiFnAqdaSt30OZnsKUX5BQl X-Google-Smtp-Source: APXvYqzqHXDfpBgBsOVwu2JdQG+LMWilc8RcKZx4tLDd3VoPj+4aLM0oJA3W5yXogSHhdAGvwUXrOA== X-Received: by 2002:a05:6000:ca:: with SMTP id q10mr1116883wrx.148.1556116065248; Wed, 24 Apr 2019 07:27:45 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id q7sm5518041wmc.11.2019.04.24.07.27.42 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 07:27:44 -0700 (PDT) From: arilou@gmail.com To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 17:27:05 +0300 Message-Id: <20190424142714.28460-11-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424142714.28460-1-arilou@gmail.com> References: <20190424142714.28460-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 v3 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 From: Jon Doron Signed-off-by: Jon Doron --- gdbstub.c | 51 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index ca91cb6740..a58450ffab 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1701,6 +1701,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; @@ -1908,24 +1933,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 14:27:06 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10914951 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 49F4B922 for ; Wed, 24 Apr 2019 14:42:28 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C657628A26 for ; Wed, 24 Apr 2019 14:42:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C472628A8E; Wed, 24 Apr 2019 14:42: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 6B1B728C2E for ; Wed, 24 Apr 2019 14:42:24 +0000 (UTC) Received: from localhost ([127.0.0.1]:42746 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJJ6N-0003KD-HN for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 10:42:23 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43914) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJIzK-0004gM-9M for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:35:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJIsP-0000tv-HB for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:59 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:38788) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJIsN-0000lo-Bz for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:55 -0400 Received: by mail-wm1-x342.google.com with SMTP id w15so5350063wmc.3 for ; Wed, 24 Apr 2019 07:27:51 -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=v2qJUM44akSSBaqAJasZXAgKOeZiMtI66+B3Dins8I8=; b=gF4ls4Hf8PGsrpOvzxyJFNVWOpO55kSyEsE8wgTCuATo4FaENyhW1lfPCGug9v52St Wud6Gc4wSSNmoDnGSqcnOrMM9/vc4Tm0983K0BpYZdRYnwHaGjkMfZcf1iphVD1BupTU 0FhmG2wzTxaGotjVi6iwkoup/qbw0CNX29QfPhmLkNk44BDRaVaQ2SAgA1WwzUk8TGOe jmAnfi8rhaQV6dVCMwue/3nJNn64hA9Yo+UEjYWK7VSyxzMd5WrkAXiErAFiyJw4rlds WLAn9N3tsk9yY4S8lIDhHoKkggNEfuf1k5yniESOMKX5JD91Wr3NSNpaHKY/Chy1F+JR nWWQ== 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=v2qJUM44akSSBaqAJasZXAgKOeZiMtI66+B3Dins8I8=; b=kZiSkUK/022g7ztWXUpdheL8z6bQ6xP9MyEpu0OFj4ZbekvGoYdbrGD/50iKl9dHP7 +ZiUEwGxYhIZhLKA22EqBVbJ3Xb9nblIaSpKfaiNdHiOfA2qR3Ts3lDBX9uGHD4KqZZr e8KoXWbda7wH2KiumSqIMEswA4w+nd9scSErB98bPY19KMsHUdm+bfXnlBzpmpuknQfv inDL1GgibSkx4hj9a2rylIX5ahfmNxEEslRO96fWK9GM/l5KMY5jRHHnolZ7lCn829rP liBK3rxVjtc9tXJG2TULoCysHum459e0VGX3yYdW7Y7akpa/X6Wg6w51ZSKlD3fB23bI ODGw== X-Gm-Message-State: APjAAAXTKK2+cX3gh++K1dGjEuXM4TBmvumbzRXktLwcIk2aIx4snx9K n2HhU7maOF/RVbX2C2jV+yIHS225 X-Google-Smtp-Source: APXvYqxgsdvTgjUihbv+YyWUriOyGY/25kk98zJNWGhzbxFs7/+Yge94GkYrRHU81yDQAx3HkBxJdA== X-Received: by 2002:a05:600c:203:: with SMTP id 3mr6721001wmi.77.1556116069609; Wed, 24 Apr 2019 07:27:49 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id q7sm5518041wmc.11.2019.04.24.07.27.45 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 07:27:46 -0700 (PDT) From: arilou@gmail.com To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 17:27:06 +0300 Message-Id: <20190424142714.28460-12-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424142714.28460-1-arilou@gmail.com> References: <20190424142714.28460-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 v3 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 From: Jon Doron Signed-off-by: Jon Doron --- gdbstub.c | 48 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index a58450ffab..deeb78c341 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1726,6 +1726,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; @@ -1914,22 +1938,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 14:27:07 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10914941 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 C99FE1708 for ; Wed, 24 Apr 2019 14:39:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B6055289B2 for ; Wed, 24 Apr 2019 14:39:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A854228A41; Wed, 24 Apr 2019 14:39:39 +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 C2BE1289B2 for ; Wed, 24 Apr 2019 14:39:38 +0000 (UTC) Received: from localhost ([127.0.0.1]:42688 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJJ3h-0000X6-2J for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 10:39:37 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43979) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJIzJ-0004qG-St for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:35:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJIsT-0000zp-96 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:28:02 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:40934) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJIsP-0000oX-HX for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:27:59 -0400 Received: by mail-wr1-x442.google.com with SMTP id h4so25452121wre.7 for ; Wed, 24 Apr 2019 07:27:53 -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=g0cYfZYZPafiRCWlvwBqevxyijfckEKNWxR0Y2mkHTM=; b=l7PZHCfDSegZSZlTNS8Kbzq6mBubbx9DUvSAp95GYMWQi7/Qjr1XsHdqjdQMsxEWbP fcez3mXH0YwoWNpeqf57UdLh1wEaw9r+BUpY1PUtz/3Xy9XS1Ddo+rEnhuxDZuJ+Pre1 VWfoWRcNWZ3DwGy94Ju/AQyvU7WpwdCTslnx0mzZ1XD1k9P81ZpSO6U2iU0QRd5uOxbj oR0cR0zQP646029rnzKHb1gv4SJ2uaeV9nCSEE2qHzNFSQ7M0M9v+q/jTfOx7aH0rDul 9Vioh3RpUz+n4+0hMO+LT6LyZAf+AuMhycd5brRBNj93gVXsuIheeR1r3pMJdm47EgNW UbSA== 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=g0cYfZYZPafiRCWlvwBqevxyijfckEKNWxR0Y2mkHTM=; b=VNYuzR4BmAOojKjf6EMGW6xJ3/JEDem7ah2KcHfpN0FxeXG5CWlmTixn3BQkSHLdom nckh8rzCEJeix0XAez5C506tmnoCu2w9elTrS4cx+scAQ6c+xrPVsN3QhdXCFVYbmDbQ qyfUjZ3Tp5h8HbdnmiJlsSB9zKIDrtMlD618kwujUGg55RJTTrcLCHZaV9iPdzJUGWwm DmgQLZ/0NDIXnw09BLsNezMm8degnuBaeEHloZtr5a8s+DMZGGOMndouXTClRzM7aTGb U09bMUNRNS+AlOqfbEsLrEx61703DI4t6ku9QYj5n+owGlV9lzdvXNniG7dHhA/oFPgX pIdA== X-Gm-Message-State: APjAAAWu36WfMrQWcxGoxXVMp3Vx30Xii9CX/gx6Fnw9pc+4qh6hdtb1 WAQqdy3H/wQ2s47Ej2eSl8IRW88h X-Google-Smtp-Source: APXvYqw9YQ6TIb3u97vjpG7bCQVvjfPMxAyGscpk6LHQ7ctoK6AQX14vCOSbpejfmeYfrdht/nioIw== X-Received: by 2002:a05:6000:12c7:: with SMTP id l7mr20537210wrx.4.1556116072309; Wed, 24 Apr 2019 07:27:52 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id q7sm5518041wmc.11.2019.04.24.07.27.49 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 07:27:50 -0700 (PDT) From: arilou@gmail.com To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 17:27:07 +0300 Message-Id: <20190424142714.28460-13-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424142714.28460-1-arilou@gmail.com> References: <20190424142714.28460-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 v3 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 From: Jon Doron Signed-off-by: Jon Doron --- gdbstub.c | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index deeb78c341..0523deaef2 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1750,6 +1750,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; @@ -1761,7 +1784,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); @@ -1926,16 +1948,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 14:27:08 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10914945 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 C7296922 for ; Wed, 24 Apr 2019 14:39:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B6637285D6 for ; Wed, 24 Apr 2019 14:39:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AA16C2873C; Wed, 24 Apr 2019 14:39: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 9BD42285D6 for ; Wed, 24 Apr 2019 14:39:57 +0000 (UTC) Received: from localhost ([127.0.0.1]:42692 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJJ40-0000pd-QF for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 10:39:56 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43914) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJIzJ-0004gM-3e for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:35:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJIsV-00012k-7d for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:28:05 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:35034) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJIsT-0000tU-9O for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:28:02 -0400 Received: by mail-wm1-x343.google.com with SMTP id y197so5380357wmd.0 for ; Wed, 24 Apr 2019 07:27:57 -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=QHRX3vrkkfr+XXALwGjewcGRMA15zptsxywkn/wXCOE=; b=dEmdck2f8NSrRqFQi6yyaIHnM/D6lwR9Dkex1c2rfT40qMQ5/1D/lQlE/2E3/Kv66I 7XRIs3m9HVOeUv1ukgm+4ru/mjthaf+XB0l4WlzBasf8+vrNXYaHKiO6RBvwaaOiRWnR uL/IZ0UXgcVzrPWTNkZXdX1TtTcM3N+aNLsZCrBG9KKzanfK74iFDqIHcq+ft0zWhp0a gC8o2uZKTIWT8xP3eBLPdpERgtwf5WVboC6UiCg3qyYb5EUNAiox0PcWr1QvsUKTx873 UUdJugqiqG62+AYOEVrZvGvSdwkz7XGsmUNXC4zLi+nEVXGBHAFMfElLXvAsnWx8MHlt pNmg== 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=QHRX3vrkkfr+XXALwGjewcGRMA15zptsxywkn/wXCOE=; b=RiInObnQgS1ALCR88H+8m0IDsKTtVKkhLC1erKXK2Rzxp2vnlUK5Ws955/mybOIuiF 64UGIM7Yrt3LMZWib37CsGwZA9SonfniMyz68rjTAjHWnOdYtrnkFO/BqWjDdzWW5lx9 DmhP3GxJnZ7+cprcd6Q38f8SabpUllP/Fv9jYLbqffUN5kjC3F8ggiEBYAHSjiqERvoP ERfmGrOxrEscJIJrwNg7Y+hmEOccEtv2hH7ZGo4ta/5aBnFAdc30IX2rPk1ByaGrsoo/ VJbyRvuIrgq16DQxW/jllHly7Aagd4hbOjUQSQLL4wfk0tnn7HvCs5kN7pZA5KWpsBVk QeQA== X-Gm-Message-State: APjAAAUCfBI8dGMZSG+OlTRoeT/6quLbMNomgZ+QafrrPOGedDnwMQj6 WGs35GxSWu+UN4cX7+xbrNr8x8mn X-Google-Smtp-Source: APXvYqzMaBkp6mVNyL8gqe3Y2ITIsXAoTVihqaF0OPPyuFjiBZd2qhgmn1ys7I+ZHqIWXIic0IjSIQ== X-Received: by 2002:a7b:c745:: with SMTP id w5mr2683921wmk.89.1556116076471; Wed, 24 Apr 2019 07:27:56 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id q7sm5518041wmc.11.2019.04.24.07.27.52 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 07:27:54 -0700 (PDT) From: arilou@gmail.com To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 17:27:08 +0300 Message-Id: <20190424142714.28460-14-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424142714.28460-1-arilou@gmail.com> References: <20190424142714.28460-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 v3 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 From: Jon Doron Signed-off-by: Jon Doron --- gdbstub.c | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 0523deaef2..b3278a66c7 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1773,6 +1773,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; @@ -1780,7 +1795,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]; @@ -1938,14 +1953,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 14:27:09 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10914949 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 EE29A922 for ; Wed, 24 Apr 2019 14:42:11 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 65EC228A72 for ; Wed, 24 Apr 2019 14:42:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6048628C55; Wed, 24 Apr 2019 14:42:04 +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 0670528C71 for ; Wed, 24 Apr 2019 14:42:03 +0000 (UTC) Received: from localhost ([127.0.0.1]:42744 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJJ62-00032l-Vl for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 10:42:03 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43876) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJIzI-0004gC-9O for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:35:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJIsV-000133-8d for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:28:05 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:54595) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJIsT-0000yU-AN for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:28:02 -0400 Received: by mail-wm1-x343.google.com with SMTP id c1so4877209wml.4 for ; Wed, 24 Apr 2019 07:28:00 -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=jOumf5EKIBS6pSzC09ZC4a6q0f22TQxEoJGNlEiAnhc=; b=lKZEG8xVKnTTuKTx3uPhEkzdc3WEYJXEmlrnJ66BhsqJDlqiJUAQRbLZPjNNoNR3EV aLPMXi3ArQTkvy1POIxOIsD57B0SZaHG3D4FsqJ0FZnRoMmLZlbEx58ct/W6aijNSpvZ jfhaOPnIT44T17ISUaYb4gMqTDsenjzJvMNOZWA+9f4eyYbd+I3a9ix5fCuVJ2IN6pbt R5EleHfQ1GEYFAbTXAb6rmhkDL6gKIB57uRdvskbE5wWHXPxMat5FkZ4Pkb3EAsQZMvP ll74mULVThBRR2IeLGkBljrU2lUEXce7XV0FF4R1gRvEB66h+WXNyU+AIOvdiXei8Dz8 tE7w== 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=jOumf5EKIBS6pSzC09ZC4a6q0f22TQxEoJGNlEiAnhc=; b=REabpqQtmgQuMum9yM74w96BCVASP4avb1vMz36Do+jsQ20gM2lqXxUTaLWfsEtSUG 2oPCakqLIyj0yxJxAXb9j2EUr5xd0f/U7dnEgVjOhLUxHHj2Hf8xk7fet9Jk5WejP0XS h6eGCeFFY5uT4L6wAOLWGU9he8DSNCE2/8S7KKaaxHGBeu+K1OqEJ50WYzBBVEtp6mx9 IH3x9gXRnmFTL5Ba3K76tcmcAp1aQf1KKRfdGNzdsghIbBnEkRIOD9JEdZCKLL5QdGD+ QuWAke+ts6Y0VoQMRmLU2fVvQ6I6muSiew3a6DU/p/YtSr/jmT43p/Zb1Xxbznv1msUL r+PA== X-Gm-Message-State: APjAAAWlCW3WUtIQn26o0sFPBuSSL6Eb1T12OXFlnMDTVa6/Vi6+4TNQ NdQ1HYvPW6nd5UG8NxSio3/CIIYi X-Google-Smtp-Source: APXvYqyD4jmTlCiIxu3ZCszw0ExteUQK7/1amDaLEFp9rurgIkEfmvcRxhCKGX8RgES/7FAExpIyKQ== X-Received: by 2002:a7b:c111:: with SMTP id w17mr4418616wmi.6.1556116078839; Wed, 24 Apr 2019 07:27:58 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id q7sm5518041wmc.11.2019.04.24.07.27.56 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 07:27:57 -0700 (PDT) From: arilou@gmail.com To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 17:27:09 +0300 Message-Id: <20190424142714.28460-15-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424142714.28460-1-arilou@gmail.com> References: <20190424142714.28460-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 v3 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 From: Jon Doron Signed-off-by: Jon Doron --- gdbstub.c | 62 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index b3278a66c7..a71fbc800d 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1788,6 +1788,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; @@ -1928,28 +1961,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 14:27:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10914943 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 4D41F13B5 for ; Wed, 24 Apr 2019 14:39:49 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 352E020416 for ; Wed, 24 Apr 2019 14:39:49 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2484028A41; Wed, 24 Apr 2019 14:39:49 +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 A41E4289B2 for ; Wed, 24 Apr 2019 14:39:48 +0000 (UTC) Received: from localhost ([127.0.0.1]:42690 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJJ3i-0000YJ-0P for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 10:39:38 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43914) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJIzH-0004gM-WF for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:35:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJIsa-00017p-BP for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:28:09 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:44428) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJIsX-00012Z-Ta for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:28:07 -0400 Received: by mail-wr1-x444.google.com with SMTP id c5so16587826wrs.11 for ; Wed, 24 Apr 2019 07:28:03 -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=oNvYdC4tqKz4oI8z9errxHpODrCC+7dQMBIQxEmmSxE=; b=u+IsWB5bpHkYCUt5c37HEw1GdTJ6frytUzM7iubbRm3Vq2iuMCRuvwlrwvz+EcrxrZ 0TC+OF5TSEikjjrwNeZfgdNO+wcx2IGGM9pmY8Gt1SLxPQFE0HDnjvC8s21clxSwmUl9 5Uqx28l0ioA2niMzowbm3Pn4vh/xU6nOVn8zkYw+vsi3AOVyIkpocD/lBvm4nM9Ri36z ehCm4d997n5scIe3RN8PJAXiRfiwhy4eqAMAP0ZcI3Y+Dh32Ps3gf1efobQfryQUSKmd U/YEXQaO6wYkKK6hsFQnLPXEqwNigI/438ZZQz3F65lPeReq+Xob2KpglVqXy2I7SG3M koyQ== 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=oNvYdC4tqKz4oI8z9errxHpODrCC+7dQMBIQxEmmSxE=; b=b1LpQ2uasX43OzkyEK2si0AZDtbTDWEcx1MXbWDMBnFQw22n7CcxdiWdOd/HRyHuXm AjKP1OLmZo5G4z9GCWMtNP1g7J6QPAiJJMSj5D0lWX5sq52B391o2+y+juuK95oHB7A8 xvNukV7p4tobiYnMvEG39yJ+4TK5tol4IRO5/OyO/SJyMbPkx7qSWwQ6P/HhjIBR9SXU k1PsyRAz248zl9wzEC+yhhQR1AIaQpmpPP3x08gydDbtyBteJDjYvtts2arqeRf/3Fx8 rJ3JjyrL13tzoTz2ka4wQEkaOeYARUGICMqzDUFYaG920QbXRMGDp7K/35GRh2Kmy3+D jiKA== X-Gm-Message-State: APjAAAWah2thpDarb0AtxkkY9vQBTk8JtAw1FtHmHFrYi4itWqn0hjMV sfLZbl7SZwMYdFE5pLtx/BtUqnn5 X-Google-Smtp-Source: APXvYqxF/PbkZOKfHCsblyCSfd+E0YgGBquzwxrV7rWewsEKS2HrI5yPRViahNCiIBRF/kvbhqwSdw== X-Received: by 2002:adf:dc4b:: with SMTP id m11mr22567523wrj.66.1556116082024; Wed, 24 Apr 2019 07:28:02 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id q7sm5518041wmc.11.2019.04.24.07.27.58 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 07:28:00 -0700 (PDT) From: arilou@gmail.com To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 17:27:10 +0300 Message-Id: <20190424142714.28460-16-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424142714.28460-1-arilou@gmail.com> References: <20190424142714.28460-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 v3 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 From: Jon Doron Signed-off-by: Jon Doron --- gdbstub.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index a71fbc800d..273216beb6 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1821,6 +1821,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; @@ -1952,13 +1962,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 14:27:11 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10914935 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 3D88D13B5 for ; Wed, 24 Apr 2019 14:36:41 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2BCFB28B37 for ; Wed, 24 Apr 2019 14:36:41 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 197F128A78; Wed, 24 Apr 2019 14:36:41 +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 276E628A78 for ; Wed, 24 Apr 2019 14:36:40 +0000 (UTC) Received: from localhost ([127.0.0.1]:42661 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJJ0p-0006Tf-2c for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 10:36:39 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43979) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJIzG-0004qG-Pv for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:35:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJIsb-00018N-CD for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:28:10 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:39746) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJIsb-00014h-4P for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:28:09 -0400 Received: by mail-wr1-x442.google.com with SMTP id a9so7882430wrp.6 for ; Wed, 24 Apr 2019 07:28:05 -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=/c5IWlozLF/xgWcLfKZ3+ImQLkPy2X3T9RDaN/kMFqI=; b=sGb+VjBwbXmkke3gYgbOg3Or6g/IdAj/eykBR8j6254JqPMPsxFGSIgl63RHD36Y3b EVTSrua/Por9EfxDzJZ4LFQsTcfo7T+hOZsdt9onu58Yq+eQC/YvNGQOwhs9YW+uf+rT njKkmaCuI4eaJuP54OwlE90WKpEAyTMRqdvzu06yeARrXuxgLn+AY7ipp2fS9hh5Tbkv +NnoTYr0r/qGrOBE5qopvlFlBQkMAg8fpjj/qj1LjCS58Eepx0y2IEOCGcqUQD9B3Z6k +0SgLPkTTamqYUVT6QAlI6xs/DwfwW1EcgCRoAj0qEMF1SMeaqTQscb2rqsfPQbK7Vzo PqMw== 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=/c5IWlozLF/xgWcLfKZ3+ImQLkPy2X3T9RDaN/kMFqI=; b=MZGaCksCyTjYkKTaMP/A8Odf9WEsdErfVvGY6pGLXJ0xW6ebtNctpYcMDqm1V60qTS LQ/Tw2IwbteFsN4Bds+QjTaCK4uDYzkbkPXDA8iog2DfRgzefnIS/Fky3C+ANOWSQG1t 8puVg8TL9PmdKjA6Y5zXbrb1FKPCF3mjdOTQloUWOeSlBp5RWqh2L8BjuxDNO2WR0hm3 p2KP2Bilu6QiS3PHWUhkkVpc4O/zsFgn0uI7tjGDH7li2pdYgS72zirKNv+BKoIFKsh/ AMT9bfKawRfaSG6/2FmeSEOnWHOzK8jJYjaFLVNXpoQqmMN+u3ZZhLVKU49MbpKf+AWq Ircw== X-Gm-Message-State: APjAAAVhvBEU2fOOkkU/FoSOUhfROg98oAmDmLrLJX4kK2WuHK9WYCdR y8L3uPWWV+UET8DW/34kMI/wdyCW X-Google-Smtp-Source: APXvYqwTQoyOUaYQ+vhsNwfE/I+uw1G54QSq3QwrKeB98GHEH8tflklssRhD/gV1USCIh8eBQL4t3w== X-Received: by 2002:a5d:60c6:: with SMTP id x6mr6545572wrt.41.1556116084248; Wed, 24 Apr 2019 07:28:04 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id q7sm5518041wmc.11.2019.04.24.07.28.02 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 07:28:03 -0700 (PDT) From: arilou@gmail.com To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 17:27:11 +0300 Message-Id: <20190424142714.28460-17-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424142714.28460-1-arilou@gmail.com> References: <20190424142714.28460-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 v3 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 From: Jon Doron Signed-off-by: Jon Doron --- gdbstub.c | 170 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 110 insertions(+), 60 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 273216beb6..2dc088180d 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1831,6 +1831,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; @@ -1838,7 +1938,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]; @@ -1886,66 +1986,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 14:27:12 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10914939 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 CA24B13B5 for ; Wed, 24 Apr 2019 14:39:17 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B7A44289B2 for ; Wed, 24 Apr 2019 14:39:17 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id ABE3928A3D; Wed, 24 Apr 2019 14:39:17 +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 32459289B2 for ; Wed, 24 Apr 2019 14:39:15 +0000 (UTC) Received: from localhost ([127.0.0.1]:42686 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJJ3H-0000Dm-Hc for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 10:39:11 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43876) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJIzG-0004gC-A7 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:35:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJIsc-00019y-5b for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:28:11 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:42157) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJIsb-00018I-Sx for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:28:10 -0400 Received: by mail-wr1-x441.google.com with SMTP id g3so25445869wrx.9 for ; Wed, 24 Apr 2019 07:28:09 -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=cU0qMewhMT+XVYXreZk+E0Se47mXH1qUFUilrgBXhCk=; b=lrmFVu/fkyCarDYhdMMUhPlS6ObvzIEm/yhAew3dSI9Wxajm547c5ukOuZSTaXIfXl LCLHiM4Ahkrf5FwbPbN0BZXKa316NUHx6FKbJ4CfL9jnR05iRfp8pavtarRnJ1BqVYKE HK+Ck2EpW3rjqouWaSfVPApr+RHuH+w6V3T2zKP3vv0JN96IY4ypo98EC5/D3JYr6O8w dYLLqwqtg9Z8cbZddKlO/+1SR9vvoiToFTYw65O2f9iNF25eta3jayNjheLY9MGnVchM BjSYiZNSsMQTU+IJH06saGptgqxt5ylA6E14ODNrdWXXWQhBfwd8hq5hN3OYFj/Ck9CF F9Fg== 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=cU0qMewhMT+XVYXreZk+E0Se47mXH1qUFUilrgBXhCk=; b=knHd0g5/C3VlximPBuIveodXMkAZ/ZTwJZXH6VZt+WCNgHOSpTKOyocFMFwkwwOPe0 048HlKENR5d8dnknbhTA1LguD1fPMDotObFxPB3wwRUgwTJ2WVIu5JIwFqIMAzMtBazn qvhtAYIbwcQRUWDmBqIJnme8Xh9R1etvz8WE1c3cPqkgPe6gh8G40U4WL9lRxR1kKuxi +NeNYZfNIirroWSb1BZ+fH+awIm5u4G+OGBjKHgRcSYyHqN+oyBVudhyKEEYSgo77p36 K0qZz9nWJNYREVt0i3W78MHjq2ceZdeonqT4AynKtgfGAbr9qDyXGIUyhNZSi0/uPPYv 3i1Q== X-Gm-Message-State: APjAAAXv71NcmeyYzz2eUNsdyu7Ywt2txz3GVbeovHM/cRZLztHmYE2h lQhIvryXEHglDgSgVPNxQ8/lgYfp X-Google-Smtp-Source: APXvYqxdHhYtL/5eczNQvyK3XnG0VwHOL+/XRz1TWbzWbbdDUwIVuImZ55pq91LMLBZBTkAFg15Xqg== X-Received: by 2002:a05:6000:12c8:: with SMTP id l8mr3926784wrx.80.1556116088136; Wed, 24 Apr 2019 07:28:08 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id q7sm5518041wmc.11.2019.04.24.07.28.04 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 07:28:06 -0700 (PDT) From: arilou@gmail.com To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 17:27:12 +0300 Message-Id: <20190424142714.28460-18-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424142714.28460-1-arilou@gmail.com> References: <20190424142714.28460-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 v3 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 From: Jon Doron Signed-off-by: Jon Doron --- gdbstub.c | 335 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 335 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index 2dc088180d..f8389528fe 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1931,6 +1931,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 = "x: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; @@ -2143,6 +2468,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 14:27:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10914931 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 C12C6922 for ; Wed, 24 Apr 2019 14:36:14 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AF0B628B38 for ; Wed, 24 Apr 2019 14:36:14 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A21FC28B3B; Wed, 24 Apr 2019 14:36:14 +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 B4E4A28B37 for ; Wed, 24 Apr 2019 14:36:13 +0000 (UTC) Received: from localhost ([127.0.0.1]:42657 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJJ0O-00062Q-Fi for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 10:36:12 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43914) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJIyw-0004gM-Ii for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:34:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJIsf-0001EA-KL for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:28:18 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:56247) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJIsf-0001Dz-Bw for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:28:13 -0400 Received: by mail-wm1-x344.google.com with SMTP id o25so4874322wmf.5 for ; Wed, 24 Apr 2019 07:28:13 -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=nVBujIY8jQ+mCz54eBD0alHwA5ZhV8sSGiqMXpK+lfg=; b=O3I12ntMIrwwTqn+FL8G+VgtwcDGMItToIsQRPv0ZMo+eaGhv8iaJ1zKBasFzy86DJ Kd/YG7Lkhxaf+nCjlPJ53gRv8SCWMFn+z84bKHB8HovK3yRkj0b+ehwpGy8G9IrbWP2w niimMLxGqkkYYxctCJ6DQt6x0VF942IpYMFAm7wqPpBoOWp7pOp4hdwVsE1dqJbqz8jx NTUKdlFpy0rs8zn84qQqokhoYScxTgVfg4yA/+opUlIwV9mxmcXAi8A4WgVAbRJqSsbY r7lX7DRGVJk/1rA5eQBmuS+KqHBDPaIp5BkC73bGAfYibRrEi+blShitSQk8wK209bsq aJCw== 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=nVBujIY8jQ+mCz54eBD0alHwA5ZhV8sSGiqMXpK+lfg=; b=ZkqpEFjs9Qgpi1Z/IOihvBaXkkuOvN6g4f0Xq3QRSqYTG4BFXCww0ErH7sH3BbrlrG YnsikPE4rCcHnQfNai2u/FhwNARUOHvyIRBTKk8s3dSyhVrFnSie9abhzq44VbSFZ24F AfONGaxhajp7boF0KX/Crwe68ql+scEnSWZf5B5dccKTGw4TYDb3kx8g8uotscjv9cb3 7b9RoBcZ66sVfAAGXditC8f7wXeXR0UmpODu4J5f0lqKRwchs40+/Wzwu/p2lEQaH2+J K4fcyzy5qxy4l/UI5r7vPDHjWN6OuxuOh6eZgXMSeaGz00vJIOsQGmQgw2nHAedJ5kSd A9FQ== X-Gm-Message-State: APjAAAWutR+5RNAc9TVuCQJBPBhpp9VML6uGgm24pAalqgYgtFfV7hWd pJI5t2c7KQeP2qzlGVMblPGXn70W X-Google-Smtp-Source: APXvYqxKsq3B2d43lMqK2sKCb8H1/c6aM4sobQ2vhKvMK5i6Ufgs7QZ1+YmcalXt3TuCm+8euz2jLQ== X-Received: by 2002:a1c:1d4:: with SMTP id 203mr6880579wmb.101.1556116091562; Wed, 24 Apr 2019 07:28:11 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id q7sm5518041wmc.11.2019.04.24.07.28.08 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 07:28:10 -0700 (PDT) From: arilou@gmail.com To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 17:27:13 +0300 Message-Id: <20190424142714.28460-19-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424142714.28460-1-arilou@gmail.com> References: <20190424142714.28460-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::344 Subject: [Qemu-devel] [PATCH v3 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 From: Jon Doron Signed-off-by: Jon Doron --- gdbstub.c | 213 +++++++----------------------------------------------- 1 file changed, 25 insertions(+), 188 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index f8389528fe..c206a9a7c6 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 @@ -2256,18 +2248,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); @@ -2479,182 +2481,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 14:27:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 10914937 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 5D4E7922 for ; Wed, 24 Apr 2019 14:36:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4A3D728A28 for ; Wed, 24 Apr 2019 14:36:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3E28D28AF5; Wed, 24 Apr 2019 14:36:42 +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 093C028B35 for ; Wed, 24 Apr 2019 14:36:41 +0000 (UTC) Received: from localhost ([127.0.0.1]:42663 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJJ0p-0006Ux-Mx for patchwork-qemu-devel@patchwork.kernel.org; Wed, 24 Apr 2019 10:36:39 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43914) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJIzG-0004gM-27 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:35:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJIsh-0001Ed-HS for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:28:17 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:39748) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJIsh-0001ER-8U for qemu-devel@nongnu.org; Wed, 24 Apr 2019 10:28:15 -0400 Received: by mail-wr1-x443.google.com with SMTP id a9so7883248wrp.6 for ; Wed, 24 Apr 2019 07:28:15 -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=M3YSO3dI0sJMlSR+ppmy4WdoBSCnY0dsCE1UChjYBRM=; b=NLsLaoX1THaHDpO79DaABC6kpxTLYO+QlvLSMAEVpcpO9vsNbWKjL7h3nSW71JQY1e zN6S0UMiolNCgMGsYHxALGea/TzaC7IKhD8U4BIqDmAzwrEIjNTyZw+KUqNRGr7853vk URJanL6Mu+Nj+YebkNHwmhlZr0uTzygrbpJXLTYhre5lrykLXSkaNn/ygKFi66oacjE8 pM6cF8koZihM8F+oo+TozbFKOYTIFTj7kwO3xz/Scd2M7zCl1zqHJKig5TzB1SQY3a73 1r9ML1H5tQ/BWibJr+R2xuGu3ShBqXKsDz2f49T/P5bDgTTbvyS9+SdMrgTIofAWSlEc 54CA== 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=M3YSO3dI0sJMlSR+ppmy4WdoBSCnY0dsCE1UChjYBRM=; b=TdzhvBCGulj1k/FOEJYNfFz3rs/V68Kyb31ehZLkmUEqGI5HnIIpE0GMTurlIbqomi gv4Kc0U5ZaqZHMx/wmhhgjyzKehTa8OqWMoopjBL0UchHksKpWR4GWkwpAVjfx4tO4sB cbDUlZ/wYRRcGxCvvSsqd/K/T47XUSM1UTWGZARJovlVCty1KlNgaofLiPF/QaHK/xoO DtFSUt8/Ku3N2kIGB1MRhG11e8kZ8Cg92vnz5weuIRviEpXSsaej8GKLhfvws6pYicWl y4T7OgJPz2c9WBxYA/T3u1PHfNUuj0/DWfiNxuSQbqTpf2Syb0T+D45BsEw/7sL9vrUH PgLg== X-Gm-Message-State: APjAAAVAQCDw0ASowoEDWcoNwUM4kxs7ahSuXDNNTtK4MFQTR9RcPyTy 4X3AmszGjxYYj0mIQnlfmLMSAvLc X-Google-Smtp-Source: APXvYqwODb+IDEspFRGAA2pyiACETIsBI/yrR785XuoOAuHTje6gEwx1Vml+zXr8XJwjk2hs8hRZyw== X-Received: by 2002:adf:eb02:: with SMTP id s2mr21682587wrn.29.1556116093459; Wed, 24 Apr 2019 07:28:13 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id q7sm5518041wmc.11.2019.04.24.07.28.11 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 07:28:12 -0700 (PDT) From: arilou@gmail.com To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 17:27:14 +0300 Message-Id: <20190424142714.28460-20-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424142714.28460-1-arilou@gmail.com> References: <20190424142714.28460-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 v3 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 From: Jon Doron Signed-off-by: Jon Doron --- gdbstub.c | 386 ++++++++++++++++++++++-------------------------------- 1 file changed, 158 insertions(+), 228 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index c206a9a7c6..0ed9a91768 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -2263,240 +2263,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; }