From patchwork Thu May 2 07:26:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1093999 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="J9qoRGBD"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vn1y6NKNz9s9T for ; Thu, 2 May 2019 17:28:50 +1000 (AEST) Received: from localhost ([127.0.0.1]:46498 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM698-0003iF-Op for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:28:46 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59365) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM68c-0003i3-3E for qemu-devel@nongnu.org; Thu, 02 May 2019 03:28:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM68N-0001CI-RI for qemu-devel@nongnu.org; Thu, 02 May 2019 03:28:04 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:46888) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM68E-0008Td-UQ for qemu-devel@nongnu.org; Thu, 02 May 2019 03:27:54 -0400 Received: by mail-wr1-x444.google.com with SMTP id r7so1750480wrr.13 for ; Thu, 02 May 2019 00:26:55 -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=9gs1pjZcHlRiuvyF89Xf0dDUFOI/nZh6LcrIM/HDQRg=; b=J9qoRGBDNZVmCkGZrD9pQG2s+Svkx1b7tGVlnWLt+o3IFDnrSAbwt3oKGnpytRtfeE NQp4vCPmd09Y5AvvpB515x8Bhm2N9WVTluxm7ZFs5KUkkJy8txPwzNoBewPsJqxzBYCX CIl0/xBsz4HUB9e5AMEKTIkUeJgBDBvo5RI26rxBUQ+kNv3k1ak/lNUWbIjmUvAWhWU4 zoIZ2DjfvW/Q5kYVw6/GZjFroRgIntr74EQ3V8wKfrupX4WVS30UtreO07s9z6svutWF 6yHdDfqvjy3Xu3kJ7CnYRenoJZX6a3mDh2/gTbqbhvXbuDUdy3Szk+X5XyZ7b1nrb1te xKhg== 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=9gs1pjZcHlRiuvyF89Xf0dDUFOI/nZh6LcrIM/HDQRg=; b=qD98PtZ5Awqr0MxMfy7Z3ZBF7Jg1n6nGHYGiXUoFTkeYDcO9tRqP0pCpVQYCrAZOCH 2hHPNszDFk30sbFgy+ZhPQOR3X7c2SYOOTbP1gNBCHFR4k12KDlQ9N/pRtOn6UYVOao4 WtrOKcFTRn29r/M22T4u1ZQkpciwN9s+HBSvVrD2/m3GK/9Pfncyxbubw7JABqKVBiqW k5gW09aCJR/bXLQeSgPWeY4nfmnKqf5KidOKYT9zqNsaYM6klbCilAxXLcB1iWhTfAC2 x+1J0+cj4ToPcrWGM4Zlw6rnQNT81VuU35f0kG2m5dUU/MBCs+0TrPYlnaKvlJbO2WhM N1lA== X-Gm-Message-State: APjAAAWo9N2UTwDHuJESm80f50nh6b/bpDHXxWDwbSta/X2q/oA/2bf3 idJs6sKzDMiQhvAmotZHHqq6SoiC X-Google-Smtp-Source: APXvYqzUZdV/OT/Qp671Wj4UKS5r5ml3LpqrDDoArEx7YEX+66VvONp+4TQWORMG8FvmusSOXeoFvQ== X-Received: by 2002:adf:f2c5:: with SMTP id d5mr1497438wrp.293.1556782013944; Thu, 02 May 2019 00:26:53 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.26.52 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:26:53 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:15 +0300 Message-Id: <20190502072641.4667-2-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 01/27] 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 200 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 200 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index d54abd17cc..d5e0f3878a 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1268,6 +1268,206 @@ 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) +{ + static const char all_delimiters[] = ",;:="; + char curr_delimiters[2] = {0}; + const char *delimiters; + + if (delimiter == '?') { + delimiters = all_delimiters; + } else if (delimiter == '0') { + return strchr(param, '\0'); + } else if (delimiter == '.' && *param) { + return param + 1; + } else { + curr_delimiters[0] = delimiter; + delimiters = curr_delimiters; + } + + param += strcspn(param, delimiters); + if (*param) { + param++; + } + return param; +} + +static int cmd_parse_params(const char *data, const char *schema, + GdbCmdVariant *params, int *num_params) +{ + int curr_param; + const char *curr_schema, *curr_data; + + *num_params = 0; + + if (!schema) { + return 0; + } + + curr_schema = schema; + curr_param = 0; + curr_data = data; + while (curr_schema[0] && curr_schema[1] && *curr_data) { + switch (curr_schema[0]) { + case 'l': + if (qemu_strtoul(curr_data, &curr_data, 16, + ¶ms[curr_param].val_ul)) { + return -EINVAL; + } + curr_param++; + curr_data = cmd_next_param(curr_data, curr_schema[1]); + break; + case 'L': + if (qemu_strtou64(curr_data, &curr_data, 16, + (uint64_t *)¶ms[curr_param].val_ull)) { + return -EINVAL; + } + curr_param++; + curr_data = cmd_next_param(curr_data, curr_schema[1]); + break; + case 's': + params[curr_param].data = curr_data; + curr_param++; + curr_data = cmd_next_param(curr_data, curr_schema[1]); + break; + case 'o': + params[curr_param].opcode = *(uint8_t *)curr_data; + curr_param++; + curr_data = cmd_next_param(curr_data, curr_schema[1]); + break; + case 't': + params[curr_param].thread_id.kind = + read_thread_id(curr_data, &curr_data, + ¶ms[curr_param].thread_id.pid, + ¶ms[curr_param].thread_id.tid); + curr_param++; + curr_data = cmd_next_param(curr_data, curr_schema[1]); + break; + case '?': + curr_data = cmd_next_param(curr_data, curr_schema[1]); + break; + default: + return -EINVAL; + } + curr_schema += 2; + } + + *num_params = curr_param; + return 0; +} + +typedef struct GdbCmdContext { + GDBState *s; + GdbCmdVariant *params; + int num_params; + uint8_t mem_buf[MAX_PACKET_LENGTH]; + char str_buf[MAX_PACKET_LENGTH + 1]; +} GdbCmdContext; + +typedef void (*GdbCmdHandler)(GdbCmdContext *gdb_ctx, void *user_ctx); + +/* + * cmd_startswith -> cmd is compared using startswith + * + * + * schema definitions: + * Each schema parameter entry consists of 2 chars, + * the first char represents the parameter type handling + * the second char represents the delimiter for the next parameter + * + * Currently supported schema types: + * 'l' -> unsigned long (stored in .val_ul) + * 'L' -> unsigned long long (stored in .val_ull) + * 's' -> string (stored in .data) + * 'o' -> single char (stored in .opcode) + * 't' -> thread id (stored in .thread_id) + * '?' -> skip according to delimiter + * + * Currently supported delimiters: + * '?' -> Stop at any delimiter (",;:=\0") + * '0' -> Stop at "\0" + * '.' -> Skip 1 char unless reached "\0" + * Any other value is treated as the delimiter value itself + */ +typedef struct GdbCmdParseEntry { + GdbCmdHandler handler; + const char *cmd; + union { + int flags; + struct { + int cmd_startswith:1; + }; + }; + const char *schema; +} GdbCmdParseEntry; + +static inline int startswith(const char *string, const char *pattern) +{ + return !strncmp(string, pattern, strlen(pattern)); +} + +static int process_string_cmd( + GDBState *s, void *user_ctx, const char *data, + const GdbCmdParseEntry *cmds, int num_cmds) + __attribute__((unused)); + +static int process_string_cmd(GDBState *s, void *user_ctx, const char *data, + const GdbCmdParseEntry *cmds, int num_cmds) +{ + int i, schema_len, max_num_params = 0; + GdbCmdContext gdb_ctx; + + if (!cmds) { + return -1; + } + + for (i = 0; i < num_cmds; i++) { + const GdbCmdParseEntry *cmd = &cmds[i]; + g_assert(cmd->handler && cmd->cmd); + + if ((cmd->cmd_startswith && !startswith(data, cmd->cmd)) || + (!cmd->cmd_startswith && strcmp(cmd->cmd, data))) { + continue; + } + + if (cmd->schema) { + schema_len = strlen(cmd->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(cmd->cmd)], cmd->schema, + gdb_ctx.params, &gdb_ctx.num_params)) { + return -1; + } + + gdb_ctx.s = s; + cmd->handler(&gdb_ctx, user_ctx); + return 0; + } + + return -1; +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; From patchwork Thu May 2 07:26:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094004 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Xq5yqmXH"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vn5Q3GSNz9s3l for ; Thu, 2 May 2019 17:31:54 +1000 (AEST) Received: from localhost ([127.0.0.1]:46550 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6C8-00065A-BC for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:31:52 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59408) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM68k-0003lo-9d for qemu-devel@nongnu.org; Thu, 02 May 2019 03:28:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM68e-0001bC-Pt for qemu-devel@nongnu.org; Thu, 02 May 2019 03:28:19 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:44036) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM68U-0008UO-3g for qemu-devel@nongnu.org; Thu, 02 May 2019 03:28:12 -0400 Received: by mail-wr1-x443.google.com with SMTP id c5so1771055wrs.11 for ; Thu, 02 May 2019 00:26: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=o9g7yNsrGp0cm0nQks6oxRIXlO2CyhOpcYCjoRIegtQ=; b=Xq5yqmXHrrveNmR//VLjr3VV0PDxJG2xHSnnRLPvBgcaB2v2kpzwOM2tyWOeWLxxSf k97HWW2Le3oiKVdvggdIyXae1oBy8hTlM1mig6MeP3F/Al4OQHqNvWdNi2Ng+twdv0mL aq7tdNEhlWlTGAS+IZFcKtH1Yxpvf3hfU2gjQcKXCp9kCrWaUGlFNauCyB74ZLG0PRBQ VQxgjAGC+9Mox028q/2LFUsO1edqrhN3JjrodrCi9xwTl2Cj+dQo8W+8hQTOW4eMhtSf 1ENAImKkouDDgx1vRkdopkGVbKz11Rgvi/4mTy0AKbTbO0zu0IvRZ1HsygTLLn+GUHUI bQ+g== 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=o9g7yNsrGp0cm0nQks6oxRIXlO2CyhOpcYCjoRIegtQ=; b=PFACW+TGC1ySqBseuVp5eKptaiXISvaKREk3seYETB2e5fjOp+FdDQBlBpDfC1hCsO 7QhHLjRC+JJkXASOFIt5X1mWa5WMVGfxHqd+16H14tZzZzrIPBoL/IB/brYMr1FOLpXq LVplXFTuW1pOTXbgCUP51sAt/oP63aCp8Jo2qf1cEfF4hzocaHSebcMdr4wclOh8hDuo UOqA3/P2JaVlnqr2lPKL4dJcijY3HubB91BzL/ObXb767Fs0jsdf8zO7UFV7NwXOZkXR Tmt0AGfeUAE735tLuet2qOdXbFLPpy7+dG8Q0Dt2+CUpF+Tw8gDY8KzvpFLj0ZxvEYpl q7hQ== X-Gm-Message-State: APjAAAXvigJDQY3h4ay/kvGk8Lbz5APJ+Qi2Fk6MfvboMF7OKTCvuCkL 6ovgK20NZ6+6hjpgo7ZyJftH8RnV X-Google-Smtp-Source: APXvYqw3E9CZjysTL5okERvl3rsGBi6U5h314iwer6HAZRbqQ7DA7hQasiLCxnjpYkGyRNXWP8sfBw== X-Received: by 2002:adf:d847:: with SMTP id k7mr1444834wrl.90.1556782015927; Thu, 02 May 2019 00:26:55 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.26.54 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:26:55 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:16 +0300 Message-Id: <20190502072641.4667-3-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 02/27] 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 90 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 50 insertions(+), 40 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index d5e0f3878a..621d689868 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1418,11 +1418,6 @@ static inline int startswith(const char *string, const char *pattern) return !strncmp(string, pattern, strlen(pattern)); } -static int process_string_cmd( - GDBState *s, void *user_ctx, const char *data, - const GdbCmdParseEntry *cmds, int num_cmds) - __attribute__((unused)); - static int process_string_cmd(GDBState *s, void *user_ctx, const char *data, const GdbCmdParseEntry *cmds, int num_cmds) { @@ -1468,6 +1463,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; @@ -1482,6 +1512,7 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) uint8_t *registers; target_ulong addr, len; GDBThreadIdKind thread_kind; + const GdbCmdParseEntry *cmd_parser = NULL; trace_gdbstub_io_command(line_buf); @@ -1582,42 +1613,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 const GdbCmdParseEntry detach_cmd_desc = { + .handler = handle_detach, + .cmd = "D", + .cmd_startswith = 1, + .schema = "?.l0" + }; + cmd_parser = &detach_cmd_desc; } - put_packet(s, "OK"); break; case 's': if (*p != '\0') { @@ -1990,6 +1994,12 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) put_packet(s, buf); break; } + + if (cmd_parser && + process_string_cmd(s, NULL, line_buf, cmd_parser, 1)) { + put_packet(s, ""); + } + return RS_IDLE; } From patchwork Thu May 2 07:26:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094001 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="j2H5OfT5"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vn2K6RSgz9s3l for ; Thu, 2 May 2019 17:29:13 +1000 (AEST) Received: from localhost ([127.0.0.1]:46502 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM69X-0003s4-LA for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:29:11 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59429) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM68q-0003q5-Uy for qemu-devel@nongnu.org; Thu, 02 May 2019 03:28:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM68m-0001jW-8S for qemu-devel@nongnu.org; Thu, 02 May 2019 03:28:27 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:42671) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM68j-0008Ux-Fi for qemu-devel@nongnu.org; Thu, 02 May 2019 03:28:22 -0400 Received: by mail-wr1-x442.google.com with SMTP id l2so1782364wrb.9 for ; Thu, 02 May 2019 00:26:59 -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=lYm7IhGBrxn52sVAeIC90HrrQ0q55SD5y2VdGObDHgY=; b=j2H5OfT5EN+cF9uHqNDHcFcN3+vD2wMCdsbE5xhIBscH0XWolZT2pBW9CtGFtsNBLS x8gMxteIm84u5K5SImBzHQzbmjNC3aLrZia1Cd5lStvizJ62oACK9rc1JDf6fGe5mVNf +Q6aAH1GK5w3Updc1XmXYLcbfinHjUXaniehWmYUQcD+BBS7rEDFlR/utlgCb1ZaUSBn 0DjTG87dB9DNyoGYmTwJun6Y30pz8jWXGz78kKySuCa8DUSHGeapEbAjLOI0Nj/F7lYQ FXXUVhm4r0P5sYVvpTnGVKCtHUagG4Oqvm++RPxr3dx8/wH4rokXo/H5etWNbNca5UZz qVtA== 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=lYm7IhGBrxn52sVAeIC90HrrQ0q55SD5y2VdGObDHgY=; b=mvYpvud6b9+g5uthvEiVSEyiX1fBwbJKwBlyNlbY2RvPdia+UGsrQ06CI72/0p/FR+ 3aawRpvhp7kZoTg99dV53WEZwqLAbaFQJR5QcriRT75RDxsoiW1qkxF56gkppJCRUR+E 0eXMqUqTtUErjhPM78kQML2eqUnUkMjX5WBCqLHSXvDo7WizImWT1inUjoH9BBpfp7Lp ECtFZay2HIxfpDKbSv3+4qwzJogNmRAX4OVrTT0EAtIgc0KTZYIcPgs6g8UceKRzg0+b Kp6yeaDl95TSOeda3ENScVuOiVNOd0ORKKZzlVFWhikD2IOI8N0nRiTewoctohzgomVB jgRg== X-Gm-Message-State: APjAAAVUPKKCjq7KXNzOhuZwpf0TBY+1hMvDYMjIFh9qp/UJ21kTOUMW CKVMo8T+37gcg/UGT63Vz8UIxkSV X-Google-Smtp-Source: APXvYqz4eMZgXAvm8sksSyfgy2ueWBXsyRhv9Lb6AffXH1ic4xnTvFfG7nDDxwo2BQxkgIXDY6aNhA== X-Received: by 2002:a5d:6189:: with SMTP id j9mr1501363wru.176.1556782017916; Thu, 02 May 2019 00:26:57 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.26.56 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:26:57 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:17 +0300 Message-Id: <20190502072641.4667-4-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 03/27] 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 43 ++++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 621d689868..c47ef7dd9c 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1498,6 +1498,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; @@ -1798,17 +1822,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 const GdbCmdParseEntry thread_alive_cmd_desc = { + .handler = handle_thread_alive, + .cmd = "T", + .cmd_startswith = 1, + .schema = "t0" + }; + cmd_parser = &thread_alive_cmd_desc; } break; case 'q': From patchwork Thu May 2 07:26:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094030 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="WL9fiPMG"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vnTj43MTz9s3l for ; Thu, 2 May 2019 17:49:29 +1000 (AEST) Received: from localhost ([127.0.0.1]:46799 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6T9-0005dx-HA for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:49:27 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59923) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6AS-0005FM-D7 for qemu-devel@nongnu.org; Thu, 02 May 2019 03:30:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM6AO-0003VD-MA for qemu-devel@nongnu.org; Thu, 02 May 2019 03:30:06 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:51312) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM6AL-0008Vy-Vs for qemu-devel@nongnu.org; Thu, 02 May 2019 03:30:02 -0400 Received: by mail-wm1-x343.google.com with SMTP id t76so1284464wmt.1 for ; Thu, 02 May 2019 00:27:01 -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=9IF4rsqYBB5CcGAeM/Zis8CV+HM8l1BP4iU1qHaXB5E=; b=WL9fiPMGBCF1NmRGm9kQzCB/NU7xF5Kj0HB7VgceGV3g6g4aMysoIOMOh9gDHU8/8H x4OreLILKjVz9iIOqpF2cbJLbOWpO+4pQwP8oetj7809N2pofhlJfvDcTv0dX0jhEZ3O YX0hIZ+GOMHR/W+e0UgTf/wsn5cHHAKlc9MQF3dw3zpqz2Y+/JIf2o2q+LiDUCsmh87X MnEvzybxP0xqoVqmsYRiSGnEpEQk+hTTZ4etatxvHbZ7z5GQT3I7GZj4Db4u0G77yEWQ RoQbVRchlZXW4hjzbWaP00o6s3HINKrUUivSE5zbU4jswl1R8j/fqY1U1nBmULAw/FUq yL9Q== 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=9IF4rsqYBB5CcGAeM/Zis8CV+HM8l1BP4iU1qHaXB5E=; b=j74yRedA36eXfrI/kNbT+QRkSM+GNhNJ0Q41tCddP4DoMkB6JD7YNiWs4B7lKJ8YvC W2O3DVuat4Bo9HLQlGPPFrmm0AN8WIba+0heNlSe7EFqi0DBaopJpOTnsx+jAFKpzzeH W6l0u2gn3kW9xdhqz439l/fM6N6/bihK3I6+czuLb179vs7egpwbL4WlrFhcSWfn/Arq ONKlB6qcuWB4uoIAAcD1wwp/ttZK0LnRMedMm7uKhqMHUlFjLXxv2kwRn2HqkM6syouy Q730JtJH9z/i6YpaqE9FZS1+jt8r4pPEzjr/GpsoSbAL6F5vRSh/vzmL8E5LP1Av0zaF 5jVQ== X-Gm-Message-State: APjAAAW9Qq38KY0EzW09cXGgUmqqRzHVvLEHhvalxJhsKUx7LTCS2BAM Gn4OK9qgfzzgLYMjX8GMEtQbzFTc X-Google-Smtp-Source: APXvYqyBgmhYwBJitqIi2a4xYtc5FR5p1yOrW6H2Y8HsxrJMGOpo3mxGwKrm3YXZ4Ovr6RGNa3imHA== X-Received: by 2002:a1c:3d6:: with SMTP id 205mr1264221wmd.66.1556782019896; Thu, 02 May 2019 00:26:59 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.26.57 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:26:59 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:18 +0300 Message-Id: <20190502072641.4667-5-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 04/27] 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index c47ef7dd9c..89f1ab6524 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1522,6 +1522,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; @@ -1558,13 +1568,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 const GdbCmdParseEntry continue_cmd_desc = { + .handler = handle_continue, + .cmd = "c", + .cmd_startswith = 1, + .schema = "L0" + }; + cmd_parser = &continue_cmd_desc; } - 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 Thu May 2 07:26:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094006 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="IXsZ9WJ2"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vn6S0ZGHz9s3l for ; Thu, 2 May 2019 17:32:48 +1000 (AEST) Received: from localhost ([127.0.0.1]:46558 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6D0-00072V-0V for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:32:46 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59579) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM69S-0004JF-VZ for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM69Q-0002SK-4V for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:05 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:36222) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM69G-000056-Nr for qemu-devel@nongnu.org; Thu, 02 May 2019 03:28:58 -0400 Received: by mail-wr1-x443.google.com with SMTP id o4so1817405wra.3 for ; Thu, 02 May 2019 00:27:02 -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=x82aHJMzl8f+PCXWhu2ZX9N8tzch1kuJG+XquT6URF0=; b=IXsZ9WJ2JUvn/1lBaWmCeiA/2YPQWM6O+Nm6TOnKRmip/j06SKj8Dcwe+IsigY2URw JNEnGKdDLE0XvN1FgaDjNq3Wolj3Q51MfKIUlixCl3pa3r8CYK0GGCiMx8Bf6+iQShZr jGHbQHquAU9R7yqOzxi5uGcWBA5WHYmtlb4xBs4BHlOvB8RRYrHiAJQmQl8sEIx9onpM vNNVkWxw+elHEuAaxr0rOvWQ+r4UhnfMwKqVj6B9vnIdkSzpY1AaKFbu2zBaTRK09zZD NR3IXNdMOjoqWgzbgG0iK/fb+RtQkCySdPKinjTiJgjLLOR49tDPaqEZeJPx5xqmmz2K cQsw== 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=x82aHJMzl8f+PCXWhu2ZX9N8tzch1kuJG+XquT6URF0=; b=nbzUA+q4oIZPqHCfeKRpaJMjYatxQr7K0RF8OR/62eEeClm5KzHw1apCjwfdUkdXbN umz6ugPlVjfZqgtFSMKmTnBMF4V1LejvTfArjlf9iGUJjY7dfvLXrAf3Rv5RUmxk5kEB 6Mv/CvRwDA1pXA2j7pxSU4HRwjNSEol5fqfowqghOgSdbWl7Uax83Gi8wbooEQtROk8q jF8wKwFkmg2M6JlMeLYAdOQ9PUtGV2fmrbc9/otJR7FasKqEIxsMEHTj07qHd2x92A+U znAFpxEda4IEnkavNVlJHHOmrBlVi6b7PKx4u9Hl6HQrZYLA0KAgzCpaC67sB+xz2Im8 dQZA== X-Gm-Message-State: APjAAAW/zoiuAklJodW4/fFkBuwIT8khheU+0fimmi5znUkO5J2+5XEc 99uXQRrEvKux8EmeGos0LMyZ2EcL X-Google-Smtp-Source: APXvYqxUBZk85K3lri+CL0t2ly9IsRUDNT6rE1c/lxK94AojZGezQEakGLVhSq53sifX7Qx/QsBfTA== X-Received: by 2002:adf:a28b:: with SMTP id s11mr1556815wra.16.1556782021544; Thu, 02 May 2019 00:27:01 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.26.59 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:00 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:19 +0300 Message-Id: <20190502072641.4667-6-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 05/27] 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 89f1ab6524..469aaeb875 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1532,6 +1532,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; @@ -1579,11 +1594,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 const GdbCmdParseEntry cont_with_sig_cmd_desc = { + .handler = handle_cont_with_sig, + .cmd = "C", + .cmd_startswith = 1, + .schema = "l0" + }; + cmd_parser = &cont_with_sig_cmd_desc; + } + break; case 'v': if (strncmp(p, "Cont", 4) == 0) { p += 4; From patchwork Thu May 2 07:26:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094010 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="eQ/edaK1"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vn9t4NKMz9s3l for ; Thu, 2 May 2019 17:35:46 +1000 (AEST) Received: from localhost ([127.0.0.1]:46582 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6Fs-0000wl-HZ for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:35:44 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59605) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM69W-0004PM-PI for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM69S-0002Ti-Ij for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:09 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:52791) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM69Q-0000C6-5i for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:04 -0400 Received: by mail-wm1-x344.google.com with SMTP id j13so1289062wmh.2 for ; Thu, 02 May 2019 00:27: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=8aM/3zkgxng0ie4nC212YmQwcdv5GpIX/biWiirdyy8=; b=eQ/edaK1etb9t/aFDrrIZckCBOywZy31sFgLmv4Q351QKNCJ4hIWoWzbf+/HPxeOxL hiR44+etH4JhjOvmI88tZWDk+wXP75FRPe23VeDlD9BOmWs16y1W2wB0vy7ZnQ0eJbit 59ciKL6+UI0h20xvmpL/5ximxbQ6AFARnMQRIqKcPlgAbc8nj8DAsNduzN9dG+O5mweJ z5NOfZNOR2NqmyzSqY/CAui3drYMsFW3qY1UVDampPl1ILHOrsy9krYadsK/r5Kbh/DQ B1lL42zZXEIPRwjhrn2GQ+p7BfdDFOqjnOiXMKk9AAZW5+zmwb9vcNNWx4Gx0OE2nF/1 sd+A== 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=8aM/3zkgxng0ie4nC212YmQwcdv5GpIX/biWiirdyy8=; b=P/9UQEZw+VFPyuqX/NGqMvn1/o21RTvf2x4hK4G9ikWP/gsOmc1nltv98amNb/Z9On q0wzPky3Z5D6+fn0+z2aQdraHVlGmbJvj5++38Pp1ifusMQkHm2+Q2s253/0c+u5l093 E4M/CNQ3ma1N7link6Z4LIfRo7Y659mPPcNBeej/o2UB4qmo0Ke7yo5yOfnt/l9rQRQg OOf1/BEGvHaPOkSFRkQj1aos/9EYCyAdf90XJA8AvWa88Ud6BZz+0+pAOkfEovJZU8EO KFqEhEXSXES7UzST3WaiWJcJ7gfuNp5i1kwia4J3WSvY26LJriu/6s9eDldm2jmh2MMy ugOw== X-Gm-Message-State: APjAAAXw6KS3m4ZItG80vHL+o81DubrJDYQx6LscQQ/vx/s/uBlWvi1e zLqfiPGvjnLoRF53eocrjspW70I8 X-Google-Smtp-Source: APXvYqzNs6/IRnoBRkViOSvynCggb4hjPDXfR5TkNPIRgJx1BTQ3XSHdP04A+Pc8p0/II8g7EBCKng== X-Received: by 2002:a1c:b705:: with SMTP id h5mr1212346wmf.75.1556782024491; Thu, 02 May 2019 00:27:04 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.27.01 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:03 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:20 +0300 Message-Id: <20190502072641.4667-7-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 06/27] 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 79 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 30 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 469aaeb875..21cdaf4678 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1547,6 +1547,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; @@ -1560,7 +1601,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; const GdbCmdParseEntry *cmd_parser = NULL; trace_gdbstub_io_command(line_buf); @@ -1823,35 +1863,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 const GdbCmdParseEntry set_thread_cmd_desc = { + .handler = handle_set_thread, + .cmd = "H", + .cmd_startswith = 1, + .schema = "o.t0" + }; + cmd_parser = &set_thread_cmd_desc; } break; case 'T': From patchwork Thu May 2 07:26:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094022 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="rNiBXRK/"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vnL94ks5z9s3l for ; Thu, 2 May 2019 17:42:57 +1000 (AEST) Received: from localhost ([127.0.0.1]:46714 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6Mp-000802-GK for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:42:55 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59629) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM69Z-0004SN-Bp for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM69X-0002XJ-7y for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:12 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:37728) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM69W-0000Kh-N5 for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:11 -0400 Received: by mail-wr1-x442.google.com with SMTP id k23so1805725wrd.4 for ; Thu, 02 May 2019 00:27:07 -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=y+n9UknESyjS5ywhVhGmu6RRpXVVQXSmReCo/GVxG50=; b=rNiBXRK/JKmMxNge07z+Bz2snfs84Xu5EFlo9W2mo/jzQnBli1lCECI8cwaX1VjAt+ 3w6SIu8wqm0fJZWx3jrox4wh2ChuvkA2gxQ8n5Nc7vDrU+wW4tGAGdXCkyuD6bI96/wB 3LoCMoYNR3KkoHhnM+9jpg8GC9LWSBKzYEsyz3K+xKRG5uM8DjADvrZcHsOcgI1uT2O0 siDLS2t9AtJEycA7orHGx9w65eHEm3GTwIVvVVlEQbm3eZsaVKw0/WPlDQYDYHlJewbG I18/7/aNzRLEvGEoDOeoo5BXbAyXgneDYOdUVP1ZpMDoUBRHmDIb5obNg0Vao53/9QE/ avcQ== 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=y+n9UknESyjS5ywhVhGmu6RRpXVVQXSmReCo/GVxG50=; b=lWHFOqjGlCEGRqIDUQp4+eGuREgza92uSo8g3W1wigv5vKfbGiC8rfBxYOlBdaI5fA S+w9L1LvROtsC3qf/fV6tIFbbz1g9hO8YHB8SZCIE4Zu3cxzKpfy4aiROsVcJME/i+51 LmZMQtxuj7AMo//wGbAnj0tLeGHRMqtUpj3EVZ3dT+xGwgvv9g7mmRSo4okbt6VuDvHk UWFIL6TxiW62pbFTr0x/dbQ80t6nmbdGUsNnZJ8ddmVTSxd054fCDDD0YtZYi+zWKsn5 GAwR3U7rzDyC83fOrXruH7DzpuRhu0Fa2RljFp9g0mdD1/ER1r9QuT9CdNoxrRG2rVYv uzrQ== X-Gm-Message-State: APjAAAVVJBxoX5xy4CRNvXxJQMifqIGCZaPeYcz6f9WkNt4geDHVATzX ScWKHaXX+h4BLhFHvVKGrc8P52cv X-Google-Smtp-Source: APXvYqy0Asze8qTxFPHUXqi46XiJ1cAvqzA0hMpd/dguu9gwzdt4ajcoXMVZLUJmHJU0w/XT/8HsaQ== X-Received: by 2002:adf:80c3:: with SMTP id 61mr1589717wrl.123.1556782026360; Thu, 02 May 2019 00:27:06 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.27.04 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:05 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:21 +0300 Message-Id: <20190502072641.4667-8-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 07/27] 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index 21cdaf4678..36c7353a22 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1588,6 +1588,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; @@ -1843,6 +1866,16 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) put_packet(s, "OK"); break; case 'Z': + { + static const GdbCmdParseEntry insert_bp_cmd_desc = { + .handler = handle_insert_bp, + .cmd = "Z", + .cmd_startswith = 1, + .schema = "l?L?L0" + }; + cmd_parser = &insert_bp_cmd_desc; + } + break; case 'z': type = strtoul(p, (char **)&p, 16); if (*p == ',') From patchwork Thu May 2 07:26:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094020 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="m5E9d2F9"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vnKp6CBtz9s3l for ; Thu, 2 May 2019 17:42:38 +1000 (AEST) Received: from localhost ([127.0.0.1]:46710 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6MW-0007WT-BM for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:42:36 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59784) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6A7-0004vx-2u for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM69x-0002rY-Vu for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:40 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:52790) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM69n-0000QI-4g for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:32 -0400 Received: by mail-wm1-x342.google.com with SMTP id j13so1289280wmh.2 for ; Thu, 02 May 2019 00:27: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=U4fLhEZHxeWF7Ph12MqOmpuk/185Eq0Ogcw/FW+Pwwg=; b=m5E9d2F9U4dYVg4+F0pH+UgqWgDvruGtc1VQ2n3bxtlKhHmufugUUBfjB0L3oJmn52 slZ46/s72SSxP80fOOcU0rMV2e8ACUpIGprCYUCDRL+Cxq3jKvp6IHvixfU9wZmmHN0j 1Ulx2gHtQdmsuGST8Rc1faMlXHjUPsc4vRUO2BnFN7rg4ycMWvoyIhlH1WNXIEUrIi1b 0tHlyk1nlNRW7dcj5kOyu1wdBZN4YoAGssgMe9Hi8k8rmnzBjWbO2adoyvI48AjJ00Oy pAt06ruO2AfUGB2d7TIB2ZGrZKW2yE7kNAAKcZxsEotqVnmK8pmfECAG6l90d7dpRH/b ySuA== 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=U4fLhEZHxeWF7Ph12MqOmpuk/185Eq0Ogcw/FW+Pwwg=; b=fDSNPUrOk7gz4XtlP1JlanKIzYyntrwou8H67sf8A2lPFUiS7JWu4tnRADHe9TuGZy iPP0td+n6IJWWKrD2uzhXjQ4Ay5EXuNzievKZqbCHsCdPvof3oTCE8FrtbFAZrCSWabH Qz0FIexAOS/Cz6rLlZ1WbE7r81zJymOWGIwWMl0hhARVhzz/DiINhgHSrN7xYdnUOhq6 dyr//Hh3waO7y+U/luRwUBolrU/Qs7TL7lUATYfbaUs7X6tJuHAFj+bY6VYTNtSXcDlq YaC2rhZcaMXmJACBxu6hpr2GbNdsaMeDZYgmBKHH/5WddCWgTa0QpD/bOGmgZ0jlAsCJ R5TA== X-Gm-Message-State: APjAAAXBOkGPyRvtVZV1v+xK9lAbdS93MlPESa3KSUmj1fGvHdWAPvt0 9BO51nEbk1A66ojdX056wvb2skZG X-Google-Smtp-Source: APXvYqxIRXLLiPe7S/zLl9FEA9jMPku6BOmrkhyGcDzgaAPpbklNMKOVc+N7O7DEvKyDY+fT8eCB8g== X-Received: by 2002:a7b:c5d6:: with SMTP id n22mr1148797wmk.112.1556782027997; Thu, 02 May 2019 00:27:07 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.27.06 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:07 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:22 +0300 Message-Id: <20190502072641.4667-9-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 08/27] 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 49 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 36c7353a22..b42425b24c 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1611,6 +1611,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; @@ -1877,23 +1900,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 const GdbCmdParseEntry remove_bp_cmd_desc = { + .handler = handle_remove_bp, + .cmd = "z", + .cmd_startswith = 1, + .schema = "l?L?L0" + }; + cmd_parser = &remove_bp_cmd_desc; + } break; case 'H': { From patchwork Thu May 2 07:26:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094002 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="tDqjqAFX"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vn380Jpyz9s9T for ; Thu, 2 May 2019 17:29:56 +1000 (AEST) Received: from localhost ([127.0.0.1]:46504 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6AE-0004Jo-0L for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:29:54 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59554) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM69Q-0004HE-Oe for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM69I-0002PW-FF for qemu-devel@nongnu.org; Thu, 02 May 2019 03:28:59 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:36224) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM696-0000UJ-NR for qemu-devel@nongnu.org; Thu, 02 May 2019 03:28:51 -0400 Received: by mail-wr1-x444.google.com with SMTP id o4so1817840wra.3 for ; Thu, 02 May 2019 00:27:10 -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=6OoH0VZvs5cN/77prjtAmvXUSegJODVLc//0yGYVjjY=; b=tDqjqAFXwJr68BnN19CzUaiRGs+6eVQxZeg0KU+JCTUutI7KNF+2Po56qQ4H9PaT4I qaANfnbhBz29d2axuBxmHzWgy7IHBVLU/ntm71NN5mT1bSgs+UuhFXgquuJLx57pywn0 5lXZ3E+s4vBilgYWc3wMnqxBn1VzRoQXNbk8qouC97/NFkNbHMsAlH1qLlNiuDZPLMYI WPUq5bs34+gWBt1lrr91CIt9FWa4atYFB8ORrbrIAd2RQm2eqxUczlRWqWt3fYkcrQLc HJcdGAc3hQ8iSYF8otUffX75xaZ0K35tzlrQPVUDhVom7arZCF7Ywkpsk27V53za7wb1 0XPg== 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=6OoH0VZvs5cN/77prjtAmvXUSegJODVLc//0yGYVjjY=; b=bS4i/mDzfC3PQ2xeCIIKNMGLdKTIk6aCyg2QBSsBsVabGTpna3/IH2IaFDZsoNPsae VWwxs6d4CYbK7nKn8RD39xewYaKfod6OXdQbVpfVjsHReGLdRK94JiX7DyMFYxrA+Au8 nIRacsGy5at/DtdL7fB1jHqZY/0wJaCNZ3Fp9+25oImG8RiLNjwXIRfMN3GKtnC6vkYI v08MfEuyEbY5GcxUXcIH32kIhHGO6sqHCxPXep4DUA7OJBNPw6+oWzA11NZVYZVNsqnt 2b9o1itA2AjsHMVK4GG7tL3pmjL0Dnp2IIqUzvcx9SaMB/w0DVo9xyU6AZK/ysAdgHLn wi5Q== X-Gm-Message-State: APjAAAU1T035m5uEtUgyDLHYYohpsBiQh7jCsRSgKVK9qsKehVyLSIg0 4VTZEgGm9asaWqKmHQSEtw/iRFnI X-Google-Smtp-Source: APXvYqxeEzx0VgqKgI2eb/SAxHFPVixrRbRUb1ej8qQsEqqt1nDyayPkx4Ou2ZHiquVv/H2FTLNHCg== X-Received: by 2002:a5d:52c6:: with SMTP id r6mr1599290wrv.131.1556782029808; Thu, 02 May 2019 00:27:09 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.27.08 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:08 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:23 +0300 Message-Id: <20190502072641.4667-10-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 09/27] 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index b42425b24c..10e3f12a68 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1634,6 +1634,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; @@ -1878,15 +1899,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 const GdbCmdParseEntry set_reg_cmd_desc = { + .handler = handle_set_reg, + .cmd = "P", + .cmd_startswith = 1, + .schema = "L?s0" + }; + cmd_parser = &set_reg_cmd_desc; + } break; case 'Z': { From patchwork Thu May 2 07:26:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094003 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="reTAzNSl"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vn4y5ZyKz9s3l for ; Thu, 2 May 2019 17:31:30 +1000 (AEST) Received: from localhost ([127.0.0.1]:46546 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6Bk-0005m9-Nk for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:31:28 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59463) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM68z-0003xb-As for qemu-devel@nongnu.org; Thu, 02 May 2019 03:28:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM68q-0001pg-VI for qemu-devel@nongnu.org; Thu, 02 May 2019 03:28:31 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:42674) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM68l-0000Vw-Bm for qemu-devel@nongnu.org; Thu, 02 May 2019 03:28:27 -0400 Received: by mail-wr1-x444.google.com with SMTP id l2so1783093wrb.9 for ; Thu, 02 May 2019 00:27:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=C5wVxSSu9B3yjrVL1kbdSqghY5biwyr5/S2ykkoUubY=; b=reTAzNSlqYQ9gK8vh9ByDodeF+2J6IsK4yx05FXlNRzYrSZlkig6Y7jFfqx4X7vKHC FtsmZcw6Kj0PN3DuFwlCF5IsnFSebqB3eigtZfEvnUOxA+Hwqo/wlLH28sedFHs4KHnS 6SiGyzyKEbZAizI2R0cHbefN8VSZjGB7U/KglAkg9UrNIhdHf3soP0WgGW6S0AyV6O7q AlUh9s+Dt8AYIsX0fjtiopv8UxMC5Obzro2pLdk8ywyg+WXBqBTzBfSCc+hCOr8N0U4R ZxpUOALkusN97UYPZt8jvtb+yL1Gf+BUL2FjP89Xm00aPMDCnCZRg8/EiXrmHhrtFtY6 Z04Q== 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=C5wVxSSu9B3yjrVL1kbdSqghY5biwyr5/S2ykkoUubY=; b=Jspa5kneHJ41MQ1EpfexlSWKDX2VQHsDVP0jqgopzIkj4rwR0a6yr+IGJtU8DKR3T6 23Ds75hbrixfTS00WSlM1YEmKGGictpNRuXU6PvkxyG48fXDI0kgqThsCfqYP8O8tgvg gVcosu9dk8A6mHCuxF7z0mNyFc3NoBEcfh4kZYflqw81hcw3Ci3FGsKKVlFPiMyjjQXk WhkaRL/4Lb79M82L9NiHRhINVdFmsORq6mxY6S4rpxy7GUIz4dWjYrFbhiCC8zCcDveJ xl+WUh4sFGflb16QhrVowGi2C7+FV98k3V/wMXggbFgyGEJFf6Rh7e1rHPKVotBJYqvU RC5A== X-Gm-Message-State: APjAAAXIx7kwhzDoTvIwjOdsEGdxkUrWQTGtvDdo7KbEYhwT4ZAAuXhW qzSSSnC8MsgxIeTUyq8B4vsJiYDI X-Google-Smtp-Source: APXvYqzqCjgiweov8PUsJPF41vd9UltaYGRZpU4E/NU4qWt70/qpbS/7N1X/KTGKKNHRnKbireFpCw== X-Received: by 2002:adf:ed4c:: with SMTP id u12mr1658364wro.245.1556782031511; Thu, 02 May 2019 00:27:11 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.27.09 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:10 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:24 +0300 Message-Id: <20190502072641.4667-11-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 10/27] 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 50 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 10e3f12a68..e9a3d0c2bc 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1655,6 +1655,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; @@ -1884,18 +1914,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 const GdbCmdParseEntry get_reg_cmd_desc = { + .handler = handle_get_reg, + .cmd = "p", + .cmd_startswith = 1, + .schema = "L0" + }; + cmd_parser = &get_reg_cmd_desc; } break; case 'P': From patchwork Thu May 2 07:26:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094025 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="dQviOb+S"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vnNW5GD7z9s9T for ; Thu, 2 May 2019 17:44:59 +1000 (AEST) Received: from localhost ([127.0.0.1]:46734 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6On-0001qW-Gk for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:44:57 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59728) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM69y-0004nl-Vx for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM69o-0002le-Rf for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:34 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:54406) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM69i-0000Wg-Az for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:23 -0400 Received: by mail-wm1-x343.google.com with SMTP id b10so1274932wmj.4 for ; Thu, 02 May 2019 00:27:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7xWdg5J6VC6HFdEkoiuvTsAB/KgJAJp/2excD9374G8=; b=dQviOb+SCs5MNGX57Qf4qTqLp91xrJAzjlGahjovPhrZCLy094ZyU0aVpaHj2ldxpX GfDuDxRRQFjXHFlI7REqyyvNDKY8kfIl7v+SOxTNsgQZET6APgGTXWiHiF6cv+OMkrxq 6VUCeeUEH0waRBjQU+tFHD7RNTzxyM6UyhAEYa+Lv/WfqOJAGfQdD1MrLTDx/yQ9Ol6H 4D9N3s0mfZFFWx93F5+R97MRMrcmpJw2jWrr7FDhDCzeweG8KOpTlbtKOmSC6vVIt8K0 2/jTWt/kTIGTs8hWMhdMojbk0Or8rKfYLFBnUhMVsaOpC0zzvco6u3GISo+CfjGudL9c 0Khw== 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=7xWdg5J6VC6HFdEkoiuvTsAB/KgJAJp/2excD9374G8=; b=p+FH3A5eaBf8y8dYd6edf4PsXKB7bT0sk9d3kFtQy2MlyO8WMN8v6vq16LjRcwJfD1 Oqp2Wgv3vShGAN++lxuL0J8Obb92slbFHqOEBUpRTyayUl/v67hc1JPcTNVvVDKbPyNs VODd46Ejsn8r0c/9/1SZgxGvIp2cftZyEqqP3kRtBXRdstKNag+pJPB7eZwCESsyyzhG njFp44pGpkTOEJ+Dgmg9lK4VP3BpQd2bw3oSqB8BQ/L15mCQ4FBSfk+gmSIzjuaz/+W4 wnjZDjkJH9Iq8tajz+BxdcGDBxeeYaqexnpgDBPkHCY+sqqvSMlqk6J5VyRoIqgb8LBl CiIg== X-Gm-Message-State: APjAAAVrpGV5sB718cEc00u9Sf8DpNtLKOm1Ja4rgNtenBhU3PteiiA0 4OaKqP+53Q5hJ0Sfs18kn0YpRxhq X-Google-Smtp-Source: APXvYqyN/k3ocepivdLQFjmB17xcclQKa67sESmX57WNLxzgotCOJUDPxee36+sPM0tHUBp44cnJ9Q== X-Received: by 2002:a1c:d181:: with SMTP id i123mr1228978wmg.33.1556782033095; Thu, 02 May 2019 00:27:13 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.27.11 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:12 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:25 +0300 Message-Id: <20190502072641.4667-12-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 11/27] 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 51 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index e9a3d0c2bc..8dc2e1d507 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1685,6 +1685,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; @@ -1893,24 +1918,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 const GdbCmdParseEntry write_mem_cmd_desc = { + .handler = handle_write_mem, + .cmd = "M", + .cmd_startswith = 1, + .schema = "L,L:s0" + }; + cmd_parser = &write_mem_cmd_desc; } break; case 'p': From patchwork Thu May 2 07:26:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094027 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="cx18xIgP"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vnR25S76z9s3l for ; Thu, 2 May 2019 17:47:10 +1000 (AEST) Received: from localhost ([127.0.0.1]:46779 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6Qu-0003lv-1t for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:47:08 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59843) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6AJ-00057t-Ec for qemu-devel@nongnu.org; Thu, 02 May 2019 03:30:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM6AH-00035N-AL for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:59 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:46035) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM6A8-0000Ye-5W for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:51 -0400 Received: by mail-wr1-x441.google.com with SMTP id s15so1759286wra.12 for ; Thu, 02 May 2019 00:27: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=WRCcpUzuoRAzUaN5uQCeSKLXRQ6/9wuQJBWFZBJ3jI8=; b=cx18xIgPOraRJ7MV0+4GVbbFdT0kB8MwxxbFPlFoTK7KJlugJyJpbdCHRl+IwGeJ4P h9B05YEGOvfAPcsqjA3+R1J+ucjjOdJSB0EIWQBW/e3owHr3aPBi32N15w3iSGEJ1CiC Isvch4rVAnEVnqnhw4QTaHR6LLENIlxQ6NFSOK2QZT9BfXTUuzZcFF7tzdWOamwBgVwJ aTdsbwbQHxed5OGje7USrc/KzXIobi0Eh+XS+2CHF2Y1EccQaFnwh0hdcAfYfz96hd5d rhWKG1tuXXLAtvSuB6aG+LDA3jdbtzS2mCML3Ff+lqi/SbADHjYBu6+Je0h5hIj4+Q/S qfSw== 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=WRCcpUzuoRAzUaN5uQCeSKLXRQ6/9wuQJBWFZBJ3jI8=; b=c4EVQ8nGSW5F0WAz/SJ+I3o0Td5ipE4/yoTWKQQWjawU1km7wVsgpZby5ueXo63pmj RwTnrR0GLDS4ynguudoXwaAywrzL89F4g8ROo86r2Ud4aO6O6Rlhnzoz6vu3ZJE9WNvw 4gYTdYzJRZDrmagudxaQms7Qk2HmDAxn4/k9fw+8B+LckFQQrR1Pur2fzEVIqzGrZYOv xJp7hdsoaYOvAqo9VrsBV78V4m+RUzjMl8SUHLkJj5jyHR1DjeiZpfCDTu6MoGvRBf1l 9+xJrnAA9wnxZD9vHFU/WEWfbRm8X402uUZDB++N0gBHemrxHWH1q6mrWQiTHzwgbSa/ MVbw== X-Gm-Message-State: APjAAAVgBmyj1QWRadtil2EzIXiD+vW8KQtG0is1np3fpv+P1Lrje3Fl VYKkpiUvhLn2AQNj44TlEe5Yh2Ke X-Google-Smtp-Source: APXvYqzpA8tS0XuMH46lwcOqQ2kMNgeJoNdC7tZdY8/Rw4P+Q4x9c7xcr0CMFSW4axekHglplY0A4g== X-Received: by 2002:adf:80c3:: with SMTP id 61mr1590133wrl.123.1556782034455; Thu, 02 May 2019 00:27:14 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.27.13 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:13 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:26 +0300 Message-Id: <20190502072641.4667-13-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 12/27] 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 48 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 8dc2e1d507..daa602edc3 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1710,6 +1710,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; @@ -1899,22 +1923,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 const GdbCmdParseEntry read_mem_cmd_desc = { + .handler = handle_read_mem, + .cmd = "m", + .cmd_startswith = 1, + .schema = "L,L0" + }; + cmd_parser = &read_mem_cmd_desc; } break; case 'M': From patchwork Thu May 2 07:26:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094007 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="AgOY6GPB"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vn8V17NXz9s3l for ; Thu, 2 May 2019 17:34:29 +1000 (AEST) Received: from localhost ([127.0.0.1]:46570 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6Eb-0008LS-T3 for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:34:25 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59464) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM68z-0003xc-Aq for qemu-devel@nongnu.org; Thu, 02 May 2019 03:28:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM68q-0001pT-SV for qemu-devel@nongnu.org; Thu, 02 May 2019 03:28:31 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:33810) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM68k-0000ZV-Dj for qemu-devel@nongnu.org; Thu, 02 May 2019 03:28:23 -0400 Received: by mail-wr1-x444.google.com with SMTP id e9so1827900wrc.1 for ; Thu, 02 May 2019 00:27:17 -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=brvpFyYDw1Z1o2sLMNd/sMXNZo4TYemLFYCJt79OgBg=; b=AgOY6GPBpz+eyDNfwQ74HA2RWIbVmmDB5s2mzrkY1fYlD95VHug66NfWm/FMIqQ1AI 79rLMKle5fDwg0pKHUJEe2f68EjrjXgcB/XcJf0TVtNDsI3WtjJirWYrBSG+mzCCz/9p yuIFlT94vRHSTVioJXwwxcKYnbaYhNrbk0Y60SxaHfecxuzGzEEXUH8JZuTLqdhxZ10z 2slev7N/vhA40yE0tWBxF11MUTj4k18OzVpFcnKFan+woKrCQvy9iAkZcaKfUu6X1tFA n0ijBBlqqXrIS4HNpVg1oikHsDvr5+ypDep1gJOVs759h+uzqrrQq0IRBEL7deN6D61C 9okQ== 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=brvpFyYDw1Z1o2sLMNd/sMXNZo4TYemLFYCJt79OgBg=; b=jTyfCHG5G0BXBaJx2gUQdOL/B6o4zLsGpuqUD5flct8+BEg3i9iP3ixSk2sLPgobcU tTDqoic3P57pChZaheHdrf5eMZMCnadTbcUfm1gXyauDjr1/eCMccUnFlb5YmpG1Tn9U 8rDpA5ZBmMnq1rBqpYfwLmmvCgAc3DYKHkZct5sEQr1+T97beXHesIUs+jzmDfpnGgtD 2mKtUDA4Qmv8/nBnSLhj14K8y5yDu2Tirp8owEfXuyRYjcBFVMraMjpM2BW6BN3B1hmJ 0PvIOQwQHYhdqq1dm04CNMGYjh1/GVjNfUwCXFqEgpROQEjdNWmquCyzm7oz34W8CaH8 TUqQ== X-Gm-Message-State: APjAAAW6Y5fQxIF0+jRaCDGqtmwArg51beiiIag3N/R+EFZ2hoJj/47S P3aYXSQ1KEQl21T84AIYpxWlSpWs X-Google-Smtp-Source: APXvYqzuex3njM3+X1wmDyI8kERIoHhELAqvL9kQ5JqNHK3+z+KN4zONPuWTr+aCSrAip82jtq/+mw== X-Received: by 2002:a05:6000:10:: with SMTP id h16mr1169408wrx.151.1556782036350; Thu, 02 May 2019 00:27:16 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.27.14 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:15 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:27 +0300 Message-Id: <20190502072641.4667-14-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 13/27] 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index daa602edc3..adfe39b3a3 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1734,6 +1734,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; @@ -1745,7 +1768,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; const GdbCmdParseEntry *cmd_parser = NULL; @@ -1911,16 +1933,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 const GdbCmdParseEntry write_all_regs_cmd_desc = { + .handler = handle_write_all_regs, + .cmd = "G", + .cmd_startswith = 1, + .schema = "s0" + }; + cmd_parser = &write_all_regs_cmd_desc; } - put_packet(s, "OK"); break; case 'm': { From patchwork Thu May 2 07:26:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094023 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="JlMWL/cd"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vnLL0HPPz9s3l for ; Thu, 2 May 2019 17:43:06 +1000 (AEST) Received: from localhost ([127.0.0.1]:46718 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6My-0008EC-0p for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:43:04 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59814) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6AE-000537-8E for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM6A5-0002vX-Ot for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:48 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:39148) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM69w-0000cj-PC for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:39 -0400 Received: by mail-wr1-x442.google.com with SMTP id a9so1793624wrp.6 for ; Thu, 02 May 2019 00:27:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=b1bpFqGwMibMAfq1pbDbHkF4Xk3yQKA0SG1CtWad0g4=; b=JlMWL/cdb/JdMWck4utPHKmKXZNMuVdtGzPl6moponzy9+h6WUnWE3eHDVxh6bP6C9 6CzngYtwwVoS4LKmVxufZIK3OaBl6CvL1lIXTuoFCDU1w1jrXMcJUrzKQAwl2LGP+mW9 Xhu/SfBaQlXc9ejQZA30cOwWN6V9p4+WJ8uBqZwVqXryS0olGhuEogQhhoO1ltmxmwER NVnXCLQbbS46gr5izAlqEz3NlaZD1SBerEvV8R7dNhoG4UtS5p8A4UQvfKNNf41HTEi2 VSfJakhsO+ewcd91qjY4y6CmGTTdi3G7f2o0j8RxRYY3TchW/nc5B8tR9bjzOSegfpNb WbfA== 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=b1bpFqGwMibMAfq1pbDbHkF4Xk3yQKA0SG1CtWad0g4=; b=NSAC2v0vCugOS32/7CsEczQEqXe2vRMzEg2cRPWNodalGlNIyxsys60Havpy7HG670 GTVqaSfhOrz5y926w8OccdOcLicn+8Iq0kzTX3Xh3NqFluIRLCFViD9LUVm5PORjBt31 Z9mkEEwuCFx9Lv9wVmI2mxhDqcDBDHo61oppPkKZ8Tx2vQNGyeTiFV84WOEjsScMhohZ B2jVWUMgG0LXJKADWmN7fOY5Oq4uacH7SipESzl9GF/xsfkv6GbfdjV1PUEx5roR/tpl rxXStws+ZYl85J40SiwLK1EdKi54Or6Ka5EXg+c3UOOyfE5g969rc7BDfLdrj7FILLSd Mztw== X-Gm-Message-State: APjAAAUWKxig/VI+I/xtC1LznXhvC00VOe2eBT1oPDTWUvGpFDW7njBM C3zjendT4dQFPgS6MvFQF2VkWTLZ X-Google-Smtp-Source: APXvYqxDajLgHlymwSlOWbfC2Qa+akH9rev2md+FNIJYyP8sSH18j6TXnoTaxA1OW4q8JKk8+rfITQ== X-Received: by 2002:a05:6000:ca:: with SMTP id q10mr1527382wrx.148.1556782039588; Thu, 02 May 2019 00:27:19 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.27.16 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:19 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:28 +0300 Message-Id: <20190502072641.4667-15-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 14/27] 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index adfe39b3a3..3478ac778d 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1757,6 +1757,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; @@ -1764,7 +1779,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]; @@ -1923,14 +1938,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 const GdbCmdParseEntry read_all_regs_cmd_desc = { + .handler = handle_read_all_regs, + .cmd = "g", + .cmd_startswith = 1 + }; + cmd_parser = &read_all_regs_cmd_desc; } - memtohex(buf, mem_buf, len); - put_packet(s, buf); break; case 'G': { From patchwork Thu May 2 07:26:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094015 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="RwBI31t8"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vnGv3Ptrz9s3l for ; Thu, 2 May 2019 17:40:06 +1000 (AEST) Received: from localhost ([127.0.0.1]:46652 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6K1-0004nr-R7 for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:40:01 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59783) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6A7-0004vw-2x for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM69x-0002rT-Vm for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:40 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:34590) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM69n-0000d5-4s for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:32 -0400 Received: by mail-wm1-x343.google.com with SMTP id b67so5964444wmg.1 for ; Thu, 02 May 2019 00:27:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/kC4Ra5FAbXCGpLaIRgx76fPd1eNM+Za2+9T+4B8JSs=; b=RwBI31t8OFRejI4t3acuDizKCkuymMwmCLrD1hF+TRwAPURb4qNgFmMR4VDWisk6x2 Wmwa7u5QfPpIdfVA7ilPAkkgoEYrp0Vp1Eu0mn7OoQu6RW+IXiTCLRlw+6kQVbtEIMIU OW8JDPsppTaX+gj1RsvIIT25pIvdiJEI+2YjOHyih8x7DGp/9aqpeAUPQv/0lwK+a9ON GBhstTKYAEEXnsqmEefr97tr0t03F1CUF26uewlGY9Itbv4QZc7yAy90ygL+ibwaUncu fGM3M0svH5PXbv7prB2bsal3317to9TfQWPm4fbnLW6T618S+Pv68CxSLxuxdddRzi0d cntg== 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=/kC4Ra5FAbXCGpLaIRgx76fPd1eNM+Za2+9T+4B8JSs=; b=sHu68MmbpbmDy5zc0UKUOjGvG9DkGhWdn0wtnN1m9Fv9+aTVUfCnMeK1ctcyyltOcI PC/h2QerMqA30FSdoFyxI1T5gHMwtXs32hbqENPiv6VvD4lAcKSDMCRniDDdlZ2QdK+x FgWbUGrpeKmD7xUC4C9lg5vBdOpUB+E4T4Z3Qyu5DwqBItPdyqnn9bQBVD5tjsgPgSDj iWYbtejvnr445Bpb+5R0N4x9Ic4seOaHeiuHHBexCwbInFdz1HyvNcoaSJ3lpO3Rhf/i LWiTNHEu9MEpOdn0mZyqyw5nD6JmRmimrBhOqZxgDjoQbgndH4cRVhLsjzAcKopCoxRQ KGhg== X-Gm-Message-State: APjAAAWCbEElklqVxhYeWf1nEiYgAEtjZoOPzX0V+PnwJ+orqH/JrCHY k+0XOO0ic4eirJDq9BI1NgzWsPGy X-Google-Smtp-Source: APXvYqwVtHKT50ty821HkFxqeDRM5NeSyszIczH5wIZ7gKCbx6uBE0FppFIxAIroT0uPlIp/QWPGWw== X-Received: by 2002:a1c:eb07:: with SMTP id j7mr1150958wmh.138.1556782041127; Thu, 02 May 2019 00:27:21 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.27.19 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:20 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:29 +0300 Message-Id: <20190502072641.4667-16-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 15/27] 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 62 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 3478ac778d..9fe130f30d 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1772,6 +1772,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; @@ -1913,28 +1946,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 const GdbCmdParseEntry file_io_cmd_desc = { + .handler = handle_file_io, + .cmd = "F", + .cmd_startswith = 1, + .schema = "s0" + }; + cmd_parser = &file_io_cmd_desc; } break; case 'g': From patchwork Thu May 2 07:26:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094012 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="d6Tl1moU"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vnD53pd8z9s3l for ; Thu, 2 May 2019 17:37:41 +1000 (AEST) Received: from localhost ([127.0.0.1]:46630 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6Hj-0002iT-DX for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:37:39 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59566) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM69R-0004I1-Mj for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM69L-0002QV-EF for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:04 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:46889) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM69D-0000da-Ez for qemu-devel@nongnu.org; Thu, 02 May 2019 03:28:54 -0400 Received: by mail-wr1-x442.google.com with SMTP id r7so1752238wrr.13 for ; Thu, 02 May 2019 00:27:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=EShIhnyclfVo57FnSdW5zX6W2mQ/1wfNmEis7PfWfkY=; b=d6Tl1moUDm3a0ILDdl9JL/Wjh7Gt04bZJpeAZWL+5jinMNPsbKJCjs3V0bRi0Tyt4h udn9sH1oV1TqTMnI65p3Ie3yk2uNIeaF88IaThARkm8L7pvSYGAZlqwr2+FS86HraXzr VzVV6GlKOsUI+ixbbyJj20fLEOCb24tIfJBgEwp3xcHCsr+9DciBr3V8zVm2+xSkHn9k I47Wa69+MoVXRNKnsTo0Btw6/JWZDfcUkO7OEHVkeYFaADLVWZMQprsFUMfo8GwGXANc vWoVyvC+qv/epwzGGMGR4oRDAyx4yVY3THCYaAMRuxPJfO0bULVMW7OeRi/Fyu9fnU1l J2sA== 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=EShIhnyclfVo57FnSdW5zX6W2mQ/1wfNmEis7PfWfkY=; b=eFZnae8qKmQDuSxPrFQdwnz+/POvMhoSRVho8Iyx5lMfU2kewT0Pv0eOSzn+dFGVO/ ItGrXyOccRvKJDJd7yFZk3oFosf/J1k6MbnsD9Ebx6aaUhZ1GnUgtU551XesayO5yw+q 2gwms51iyUsHPbIVls2JhQ0bOpgZWCpYvApJNC+HRWea07yMV0iNbaVmfwsdYKcV4pFf ZpMqu40Qs7rFO4X865i0vuAZoIVtDHELhWK7UWesRb0pAcRtWFgO6Z+cqw199agc7bF2 St6i4CEnK2JI8k3EsdPdI7t0oSeGnzc95c8MrXPg0jIH6dat7MUYw+BXKVRAat2AJ4Nv imlw== X-Gm-Message-State: APjAAAXYbPTWCtMN9jACDbM0aFvtHzvIwWRYYho3PEeyvkn1DOs3MMgs uiIF76/XZ2iCTNNWQ4HF0orH0Ias X-Google-Smtp-Source: APXvYqzNzeodl/noHVTersfyFO4OFGgz/0f6chq4x8cdR8Yc5svZD5lajj5nlSAtPoiDIUXgFcJSyg== X-Received: by 2002:a5d:6988:: with SMTP id g8mr1605893wru.117.1556782042747; Thu, 02 May 2019 00:27:22 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.27.21 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:22 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:30 +0300 Message-Id: <20190502072641.4667-17-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 16/27] 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 9fe130f30d..9b0556f8be 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1805,6 +1805,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; @@ -1937,13 +1947,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 const GdbCmdParseEntry step_cmd_desc = { + .handler = handle_step, + .cmd = "s", + .cmd_startswith = 1, + .schema = "L0" + }; + cmd_parser = &step_cmd_desc; } - cpu_single_step(s->c_cpu, sstep_flags); - gdb_continue(s); - return RS_IDLE; + break; case 'F': { static const GdbCmdParseEntry file_io_cmd_desc = { From patchwork Thu May 2 07:26:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094005 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="dxLBN2BZ"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vn5Z1DMxz9s3l for ; Thu, 2 May 2019 17:32:02 +1000 (AEST) Received: from localhost ([127.0.0.1]:46554 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6CG-0006Kw-3l for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:32:00 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59584) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM69V-0004My-Fd for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM69Q-0002SI-4a for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:05 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:44041) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM69G-0000fX-CL for qemu-devel@nongnu.org; Thu, 02 May 2019 03:28:58 -0400 Received: by mail-wr1-x442.google.com with SMTP id c5so1772998wrs.11 for ; Thu, 02 May 2019 00: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:in-reply-to:references :mime-version:content-transfer-encoding; bh=kKebEya2GiWvJfCSlb0vx4oLqKZ12SF6Am+XqCA7M8o=; b=dxLBN2BZgcehKKaiJmkaZDx1eULbYxZe8+coSIQSezuubnH2lq2xTg7SRKIXuVoar2 YYR80xhSgteY4XrdDibsYYOwg8E4ScGF69IboO8QfiBUygYxyXgsZ/Jx4aZ7YkFKR9ov MWibr8AaQdG/7JZqennHcv2bPEwUF2dv5e+WzpC9Dh5RqBbJN79bcjkGoUhzND+GxaWN SSLUnANfQappqiZ7w+eIETpTsZuytm7E+zBiJfDgZ4gXAjMU7ke1aoR4YFMGgokBjAnm /WbpCiFUuA2saDMRCD6WCCPzyHXnnMAb5zXOhbJfzS7Gkg6H6LnZXuwtSq9okoZKybUs 8HqA== 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=kKebEya2GiWvJfCSlb0vx4oLqKZ12SF6Am+XqCA7M8o=; b=M5SXCpWI4HyOV0lMSm2nxGjfBEGt8m6QvIKbaa0oO1L1CwE73ZNT6CulyxUjDPfq6g VpNtiF1+cWsIbKzp+RnqNPLOfCTvhMDmhMPDRTYFUXzBDXoZS+FkYxQJcmVuVZQOR5DJ ROS8lnQ4uAAGFnd573+crivrkZlfuNIouStntLvUVS4mRCqL2xM8XB2dhe8/DYDjoMVd SmidL5N8s/0pLxhRiQvvDGSN1sOiS82RHY9nzO5xz7861Aow1SqT/w+FXbYFdh1cd3sa bnM1USY74Sx3wP4Cb81dc0HUyPM+D0Djmvm6zMN5vDYkFLTvDC26CYcsXxpS2GiVaVOg APJw== X-Gm-Message-State: APjAAAVw0ntem5BnmARtmN9iTl0ZaL5jU9Gny+DJ9KD/Zoq2MyWkhlI9 1ZQzvyPebqQoEOM+G9dObDG1v77u X-Google-Smtp-Source: APXvYqxWJr8UZnSnuGJQ6SyMOdgw5mihaxt4r2IFagyrpPli9fRaOBBRIM9s9+NKdqO2y+HbXPBIEg== X-Received: by 2002:a5d:4b92:: with SMTP id b18mr1498527wrt.11.1556782044172; Thu, 02 May 2019 00:27:24 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.27.22 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:23 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:31 +0300 Message-Id: <20190502072641.4667-18-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 17/27] 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 170 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 110 insertions(+), 60 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 9b0556f8be..d56d0fd235 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1815,6 +1815,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; @@ -1822,7 +1922,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]; @@ -1871,66 +1971,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 const GdbCmdParseEntry v_cmd_desc = { + .handler = handle_v_commands, + .cmd = "v", + .cmd_startswith = 1, + .schema = "s0" + }; + cmd_parser = &v_cmd_desc; } + break; case 'k': /* Kill the target */ error_report("QEMU: Terminated via GDBstub"); From patchwork Thu May 2 07:26:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094029 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="H6DoNYR2"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vnSH1J29z9s3l for ; Thu, 2 May 2019 17:48:15 +1000 (AEST) Received: from localhost ([127.0.0.1]:46789 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6Rx-0004iE-4e for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:48:13 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59823) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6AF-00053z-7N for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM6A5-0002vd-P2 for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:50 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:42674) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM69w-0000g8-Gr for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:39 -0400 Received: by mail-wr1-x441.google.com with SMTP id l2so1784003wrb.9 for ; Thu, 02 May 2019 00: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=6XppYMRruE5laPQu4tuOEJD3R2TgHj9UJ0kj9FF2Z0o=; b=H6DoNYR23Sg2HlFwe2cz4i6Du6c+TyDg8gjQj0G885U/uVmHGKQSOazH8lnnyKK1sH QwV7VYOq9UbXFTKpBbM/2UNF+NK+8lcde34XJ6hNC2rC0ybTfPrGnzJTSl4Kcin5k/jh lQVRuwaKtGVnzQNOp0LODgQkm1EpCvdQwaCnnwlANqO2rjYTyFinBlmz+oE37RWqy9Ei 2hykb2nzf329Cz200tJ9SFy4yp27STdO1giye+1Wbpl1egCYV1IjKp/4uprM57m9Q4X5 EigczdW8OwS6BjW/h3uLku0/0qqXSdgg6tLCPlhJpwfJgwCSXERKwwSI8hg5FG7hrM6l kw/Q== 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=6XppYMRruE5laPQu4tuOEJD3R2TgHj9UJ0kj9FF2Z0o=; b=LPL0omm2LybUVMkF9Skf/IAvzIkcOMnmevQWfDrnW68V9dXsgATJQcCSg7uxzwYhFb 2RWo1XTKw3WiSVNsMtnlSvay7lfQMkhUEsXmvREnzlP1tEsuAUpKmocIyQq5DBGQ5Sfs 4VF+d4cgKNDHwpEqU0drWn3pjXn3nf1rIsHK+/DOss3KMyFiaJp7QYUG53bYr4N/QcKi li3BS1D3eC6wdzquRuGromZq5LkQngdayP1mgOXLYjPhlX7YkhpYeIS8uWh/W7svPiHt IkdH49Le43Y9JQ00J0kDjvp7ht8Tv79+5INA9cFD4dZx9OKWTuGXqZeLhV+ezh4UBxxw HisA== X-Gm-Message-State: APjAAAW+WJvrgZ1baFARfIbOfd0mveRvWuusQihGmZPsG5uvM4twMypu Xf9mFNER8PDEfgGrI1D5QiCbi7e7 X-Google-Smtp-Source: APXvYqwZVAXhrCHcHCcRODZ7PSkxAzjxLgsZYJYYdrPO34B5IlPquWxDjkho5l7MeuKuzV8nO+4OEw== X-Received: by 2002:adf:f2c5:: with SMTP id d5mr1499057wrp.293.1556782045555; Thu, 02 May 2019 00:27:25 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.27.24 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:24 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:32 +0300 Message-Id: <20190502072641.4667-19-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 18/27] 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 327 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 327 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index d56d0fd235..83ae8738cc 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1915,6 +1915,323 @@ 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", + }, + { + .handler = handle_query_qemu_sstep, + .cmd = "qemu.sstep", + }, + { + .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", + }, + { + .handler = handle_query_threads, + .cmd = "sThreadInfo", + }, + { + .handler = handle_query_first_threads, + .cmd = "fThreadInfo", + }, + { + .handler = handle_query_thread_extra, + .cmd = "ThreadExtraInfo,", + .cmd_startswith = 1, + .schema = "t0" + }, +#ifdef CONFIG_USER_ONLY + { + .handler = handle_query_offsets, + .cmd = "Offsets", + }, +#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", + .schema = "s0" + }, + { + .handler = handle_query_xfer_features, + .cmd = "Xfer:features:read:", + .cmd_startswith = 1, + .schema = "s:l,l0" + }, + { + .handler = handle_query_attached, + .cmd = "Attached:", + .cmd_startswith = 1 + }, + { + .handler = handle_query_attached, + .cmd = "Attached", + }, +}; + +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; @@ -2128,6 +2445,16 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) } break; case 'q': + { + static const GdbCmdParseEntry gen_query_cmd_desc = { + .handler = handle_gen_query, + .cmd = "q", + .cmd_startswith = 1, + .schema = "s0" + }; + cmd_parser = &gen_query_cmd_desc; + } + break; case 'Q': /* parse any 'q' packets here */ if (!strcmp(p,"qemu.sstepbits")) { From patchwork Thu May 2 07:26:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094024 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="aD/tO9fn"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vnNF0T62z9s3l for ; Thu, 2 May 2019 17:44:45 +1000 (AEST) Received: from localhost ([127.0.0.1]:46730 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6OZ-0001cb-0j for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:44:43 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59799) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6AA-0004zY-MO for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM69z-0002sB-0b for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:42 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:52792) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM69q-0000hl-Ey for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:34 -0400 Received: by mail-wm1-x342.google.com with SMTP id j13so1290451wmh.2 for ; Thu, 02 May 2019 00: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=9rzWu4duvgFxDEBnKAIuNQA/7quDWlJb65aR2J7JxiI=; b=aD/tO9fnFn5vpyoVkkFNAWJbWb/+OK4NwT9hIpgmw9CuxWE5aGiXpLRyqcgP03yOvS Xx3MgecrB5zZPQGazno/S5aZ3Mg39IFqaUaXpoxzlamidbauJSmHOP0334QKO2vbsXQV DZp1CBW+We8eY9qifNSJbfUt3OUs4My3MFVOTS5kr0TwFM0mi1c5mEDvTHrzLk9KeMTU xIn5IWyABn/W4Iu0yN41+7sW6DWnsAyBMuBjJZiQJZCwXSKHgEopYPyu99PCpkfxwCMT gmgtdcKc3NOmaB+ATMsyhbCcitqM5dw2S48oaI0wRNKpJ018nctOfbEotMjZ8jWCYqO0 n7Ug== 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=9rzWu4duvgFxDEBnKAIuNQA/7quDWlJb65aR2J7JxiI=; b=LXhE6CC12gwl1RCIGY2s6NF0Hj2SiFecdmfb1jfyeqi7uu+yZLpHBikf7hZf3Y4X2g MMa/DtyP7g1mby3jr7zWG/s+uzEgmdpqI77BLGxAp3f370vCoWi4Ai3muZMkxQyXNGXQ TXVJKEkFLtH3FGxRIsSR/0//hKS3qr53h15h8PEEqj4loFUruB569uNAniu9+Cnh6WoB v9aN+SRRaSGHMQUtZ0oJeT74vhbY34kpRQoKZtbV8MqFTTTcbY/g/IM1hLl6OMedWeR0 /pCNRdgbkrujq3ivvNIif1b+b7r6JNusWsG6ciMqiPxp4fFSr7bWJWfiigvhp1iQne/S tJZA== X-Gm-Message-State: APjAAAVlPw9PfSxuaG0hr7tkD9Ig8NaXRmaCY2yumghymy3TTWZtUJnu ZioQtHRl94md4YKojZ3qg0J52SFE X-Google-Smtp-Source: APXvYqyUZucFu52rYWjilqbA18+s6znGY7YfaLZVuZo/Qjia/VkrzmQDF7h7MIhDXeM+iO+bh3XYvA== X-Received: by 2002:a1c:dc85:: with SMTP id t127mr1171654wmg.14.1556782046894; Thu, 02 May 2019 00:27:26 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.27.25 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:26 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:33 +0300 Message-Id: <20190502072641.4667-20-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 19/27] 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 213 +++++++----------------------------------------------- 1 file changed, 25 insertions(+), 188 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 83ae8738cc..2fd0d66f4d 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 @@ -2232,18 +2224,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; const GdbCmdParseEntry *cmd_parser = NULL; trace_gdbstub_io_command(line_buf); @@ -2456,182 +2458,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 const GdbCmdParseEntry gen_set_cmd_desc = { + .handler = handle_gen_set, + .cmd = "Q", + .cmd_startswith = 1, + .schema = "s0" + }; + cmd_parser = &gen_set_cmd_desc; } - /* Unrecognised 'q' command. */ - goto unknown_command; - + break; default: - unknown_command: /* put empty packet */ buf[0] = '\0'; put_packet(s, buf); From patchwork Thu May 2 07:26:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094014 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="m+nkC1h+"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vnF45lBQz9s3l for ; Thu, 2 May 2019 17:38:32 +1000 (AEST) Received: from localhost ([127.0.0.1]:46638 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6IY-0003SU-Md for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:38:30 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59754) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6A3-0004sd-PC for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM69v-0002qp-Lx for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:37 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:46038) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM69k-0000iM-S2 for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:27 -0400 Received: by mail-wr1-x443.google.com with SMTP id s15so1760191wra.12 for ; Thu, 02 May 2019 00:27:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=NvRXYl/vjqrIbJL0BHzsmEe5eGi5MjJ6JeUBkCbtEUs=; b=m+nkC1h+s6FPaBKoal5QRKLqgRUd99htdq6izyeYZRFIV3vZ+2k9kGRI1/K232LjKK G8NPmFGyD6UyZ9fugffO3qOB3/eIOlJjTD582yrnUdHDiqYkCLv0LHcOad/J9pQLIOKo HZa+EEG9hhg8U/9aRm4ql7kO0e8illzlmlRzkA4ZSMBIPeAoqRqkP4ATB9BMxb6dzt5V KgOp7SnDigvAGzO8EZ6VyelcbJYRIsg3vOLpXQSV80n4l7ys799TM3FeS+EV5hidhOyB 5H2qfpjxwBhtlZyDHh8fzTfBlfePoHp+fOsK5jgLc7PFL3tNEDyxNX3LXDxfuJ0ooJC0 iOJg== 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=NvRXYl/vjqrIbJL0BHzsmEe5eGi5MjJ6JeUBkCbtEUs=; b=MB5VdFvpEinX/s1Zr/RAAW+IHCGQS2e8R5sOJDQIcEVOUn3d173Y5DU3o9qwLS0uha WrEJKGfzmzLqriwoQ3XO/XC/9fCD7SbP0ByApk4VOD4FTjvPpLsFPts7cn6Mm9EcpR0T oMBIwyW2s5OsV6ubDDgGmTJHUB6IRUX3BMaABkePFGwlPKia9GNsAXPoehtPHNyWJlz4 96NfoYJF9zEauu7BWDD4NRew/H8VAc0x5IeE1ntrqZrxmoRvjMh/4MyxPS0OFG9RVZvY xH1xqaUi221Z8P0GoGfq5YgBIVW7TuuSgUr4/dRmQh0N0fzqZ9V0vsWKRgMQikgnyvE0 Bt4Q== X-Gm-Message-State: APjAAAU+Y2g+TMEb8selWKJ5EyxTbJzApxiwNQ6h6QW+lS1aabsjL+73 2tTXAF3HSTOpGfLWIeEoIUIYQksD X-Google-Smtp-Source: APXvYqxmbzEIEnzdKYa1x9bbu1xT4cH937HYxQM5cz/7LW93yRQb4i3FZAsPbjyU03HhFnM4W1Uv9g== X-Received: by 2002:a5d:4b92:: with SMTP id b18mr1498756wrt.11.1556782048360; Thu, 02 May 2019 00:27:28 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.27.26 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:27 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:34 +0300 Message-Id: <20190502072641.4667-21-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 20/27] gdbstub: Implement target halted (? 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 2fd0d66f4d..d678191705 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -2239,13 +2239,30 @@ static void handle_gen_set(GdbCmdContext *gdb_ctx, void *user_ctx) put_packet(gdb_ctx->s, ""); } +static void handle_target_halt(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + 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 int gdb_handle_packet(GDBState *s, const char *line_buf) { const char *p; int ch; uint8_t mem_buf[MAX_PACKET_LENGTH]; char buf[sizeof(mem_buf) + 1 /* trailing NUL */]; - char thread_id[16]; const GdbCmdParseEntry *cmd_parser = NULL; trace_gdbstub_io_command(line_buf); @@ -2257,15 +2274,14 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) 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(); + { + static const GdbCmdParseEntry target_halted_cmd_desc = { + .handler = handle_target_halt, + .cmd = "?", + .cmd_startswith = 1 + }; + cmd_parser = &target_halted_cmd_desc; + } break; case 'c': { From patchwork Thu May 2 07:26:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094013 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="kpVOIu21"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vnDH6MKBz9s9T for ; Thu, 2 May 2019 17:37:51 +1000 (AEST) Received: from localhost ([127.0.0.1]:46634 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6Ht-0002sC-Op for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:37:49 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59686) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM69n-0004cd-4g for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM69g-0002c2-Re for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:22 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:33716) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM69Y-0000iz-DC for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:13 -0400 Received: by mail-wr1-x442.google.com with SMTP id e28so1840500wra.0 for ; Thu, 02 May 2019 00:27:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=PH0hXIwENcqo6TbPIzo2Qw9MFujZWmL0zJ/Tm+4JKGw=; b=kpVOIu21i7EpDcJi6Nl8sVXEHncvrWW6OCKkbD9Yuu+DZMexDzOFV4AcDu78pcs+PV VbWR9wfQLvkxzy/nomh3ns+pzwx5x87Xze5NSQfwQLIeyTs2QoMJxm6kt6JOa41Xn+vL Dhg+Kys8O0jyiS4NWKcvwBWTofVE2XbdIXPgZjUl4EM4vy7wRey7B4yeaVVZQ6Dxur1C yHxYdOWWV/6RWSJoSVYt/Ub+t8PZ1ezRMldvI/coCQINjHJafmQOaaqmeInAceXGGiLQ IMycADDA3SufctTc1xSsvBZAO51qsoFTGSzRhP9fZwdiBjGlZI8ikjA/XffXTZ638tXu D5gQ== 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=PH0hXIwENcqo6TbPIzo2Qw9MFujZWmL0zJ/Tm+4JKGw=; b=j3X5FVVDp/JUSFNwTjdPXyCVtbw/fxNrRRii7lw75+il4mOrQlSUFqDSXKy3gEygn+ EtEefSlKzOjrF5+rXc0wjpKMnDeYPw7tLdn3i5elnDV5K6tRmMluGOppkwLTVDzQ36Ow Fz/pFtXG76AUD8L9BYpqPqvbqCnJcACDs9m2Q54PpGaZ1pcwXFOz6O857Rv2ANbYqkyQ g3Rnq+iNQ2znMh5wJdYPVaSYxmympVmmXM7Rf7xjVYxSL/ML9r/ZLG+O91pkkeUqRA/4 aZYfM4d8VkwPqibpuWap226PgZAvFRPC5P+ZW4T2iq3Wl4lS7Ij83230xYWWMesSXg5j QjrQ== X-Gm-Message-State: APjAAAUlMMSo7+ujGcWI04UbQ30MFe6/o9R9mIYSKY41ghxKHK/TBY+c zaBFDusIIRhIqmgogJ1kmxsuwve2 X-Google-Smtp-Source: APXvYqzlBmjC8Auf5vqINEIq9BrMoPl4aqHnWxtc5QDl3XYrnfIRPW3Jrl/tjBjIOwV9MBWL1BmZMA== X-Received: by 2002:a05:6000:145:: with SMTP id r5mr1502846wrx.19.1556782049989; Thu, 02 May 2019 00:27:29 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.27.28 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:29 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:35 +0300 Message-Id: <20190502072641.4667-22-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 21/27] gdbstub: Clear unused variables in gdb_handle_packet 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index d678191705..8bdfae4b29 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -2259,17 +2259,11 @@ static void handle_target_halt(GdbCmdContext *gdb_ctx, void *user_ctx) static int gdb_handle_packet(GDBState *s, const char *line_buf) { - const char *p; - int ch; - uint8_t mem_buf[MAX_PACKET_LENGTH]; - char buf[sizeof(mem_buf) + 1 /* trailing NUL */]; const GdbCmdParseEntry *cmd_parser = NULL; trace_gdbstub_io_command(line_buf); - p = line_buf; - ch = *p++; - switch(ch) { + switch (line_buf[0]) { case '!': put_packet(s, "OK"); break; @@ -2486,8 +2480,7 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) break; default: /* put empty packet */ - buf[0] = '\0'; - put_packet(s, buf); + put_packet(s, ""); break; } From patchwork Thu May 2 07:26:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094017 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="W1f0oXW0"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vnHN2mZvz9s3l for ; Thu, 2 May 2019 17:40:32 +1000 (AEST) Received: from localhost ([127.0.0.1]:46660 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6KU-0005Dd-1g for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:40:30 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59809) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6AD-00052b-Rf for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM6A3-0002tl-Pz for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:47 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:34889) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM69v-0000jZ-Lo for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:37 -0400 Received: by mail-wr1-x444.google.com with SMTP id f7so1831542wrs.2 for ; Thu, 02 May 2019 00: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=0s6me8TS+YJwMJaLYgFa/gUYh4mdTLo/usW+gDFwuc4=; b=W1f0oXW0udUzCj6hVNoZMmevJaV+VXN2zc97NBTFTZO5+KUcwMeIM7WiWPWtGehVR5 AGIcqLKBHkpzlOcZVrl5/og1ebq8uNjso0UF4jdWvuLuluNZ9NzboTjsroyKMDBobdh8 d7kID+ZOtm/yflTE9BjytH7PvKAyklh3wTxH6h6mz5tJmMTAlIK9t7fLgG9tQeO3GPA3 1N5mELi8fjUHrDh7xHgvrCaatUJPZVBS/3GmXe8vQVT7YYXyucbzM8WlZas/g+LQHsVO xS4Ov0wg+AWvyoL/EyIJmBcloAH8/HHoqrEYyIVNhk9a8kQiqnliwwxM3g1HAFJkhK9C l2Fg== 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=0s6me8TS+YJwMJaLYgFa/gUYh4mdTLo/usW+gDFwuc4=; b=pXZGI4WfKiKlTWsMmFxPOnBqUWcDb7ApgO9v/CDOhtcgDMbeUvcPNmr4vYMDjCZzHW rCoaAVu3iMNlZYNBOTwX6qZ+T68E+ceO1k3SUkwEWsiXB3Efb9xQlfGBGG/r5j3HSxto mHkCzUttoESMohCB5oRontShDocI484O104/5Oi8egHHwIPS3xATpPP6knuMDma/jsPv kIh5sZn6VQFvRbMVKU5gD2CwaQMgFYjJZKGllqEQBB3ixHTEyjNA+e4hUOLvwcG8A7bV azfS6uuQtjNTpZT1BpnxGMfB/8y3e0egVHh8gDikRibLl9pn+kiG1sqY8kyqxPBdIhcP RQaA== X-Gm-Message-State: APjAAAWr2JhVtr9VF7TJ8slmqWJXyyzyLPe3q+I094Wjm7SZOsjmYljD RDGqtR26CN3GbjZGl962TYpUCXWF X-Google-Smtp-Source: APXvYqxTmvZKv/gl0fvdYLMxqRmA1kRBTHEoh21V/GelxquMuU/Tq4SWyenQ9qRCYKrqlKM/K5CXOg== X-Received: by 2002:a05:6000:1184:: with SMTP id g4mr8770wrx.70.1556782051771; Thu, 02 May 2019 00:27:31 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.27.30 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:31 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:36 +0300 Message-Id: <20190502072641.4667-23-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 22/27] gdbstub: Implement generic query qemu.Supported 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" qemu.Supported query reply back with the supported qemu query/set commands (commands are seperated with a semicolon from each other). gdb> maint packet qqemu.Supported Signed-off-by: Jon Doron --- gdbstub.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index 8bdfae4b29..00c07d6ec0 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -2127,6 +2127,11 @@ static void handle_query_attached(GdbCmdContext *gdb_ctx, void *user_ctx) put_packet(gdb_ctx->s, GDB_ATTACHED); } +static void handle_query_qemu_supported(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + put_packet(gdb_ctx->s, "sstepbits;sstep"); +} + static GdbCmdParseEntry gdb_gen_query_set_common_table[] = { /* Order is important if has same prefix */ { @@ -2203,6 +2208,10 @@ static GdbCmdParseEntry gdb_gen_query_table[] = { .handler = handle_query_attached, .cmd = "Attached", }, + { + .handler = handle_query_qemu_supported, + .cmd = "qemu.Supported", + }, }; static void handle_gen_query(GdbCmdContext *gdb_ctx, void *user_ctx) From patchwork Thu May 2 07:26:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094009 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="i5RvU9tb"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vn936wgtz9s9T for ; Thu, 2 May 2019 17:35:03 +1000 (AEST) Received: from localhost ([127.0.0.1]:46578 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6FB-0000M4-Sa for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:35:01 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59657) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM69i-0004an-Av for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM69Z-0002Z6-62 for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:19 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:54407) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM69X-0000jx-D6 for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:12 -0400 Received: by mail-wm1-x341.google.com with SMTP id b10so1276248wmj.4 for ; Thu, 02 May 2019 00: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=ezPihTnFxff66taoqz5itPBhvGaSIP4LZ9QfcTyLtvg=; b=i5RvU9tbgk1ad967z9+q7Ij40js3XRgLQW+Tgd18FnpFpEDAJpqo23qz0gS8Dhog0A 5RccKZ5ajlJstJ6aOH3Cyy0UatIFZm8ZWN0E4A4CzwfrRb+G6sm5cKrhGLR4d9aGzqjp 6Z7SnOtX9KeZ3HNSsdBRJDr+R2ex6+K3jc2R5p/HRh8Ro5vuOpzr4mAT6jRaYoqoEK+X Dmy66I0Wpo7wJw1hP3Rd8c/FTbwjExqyd71OwD/Tb1K0lalOlJr3RC2JeaYm6REV8NYt +f+OFBxy7dTtmHgV4cikTLS8s6xwb0gifyZzKef/Qqrr85tyqn7Qyrc7lD7qkO+ALLiw qxpw== 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=ezPihTnFxff66taoqz5itPBhvGaSIP4LZ9QfcTyLtvg=; b=h21UC04U0uyTQo8vqL/W3CSDn+nrWRrnGtYU/e0UWuTMhZdgRlp18Nnh+NNXnDF7fp iaQztzzWjOLWSXyOv6i2S3miir5kg8P4m3qTpg5wHD0kP+qQaTLdB+wK4vylEvj/qxXQ BHs9u4GDOYWC/gGwB+SjgcIdKKrjS8jPeq4Fmu1/qkJMEh2bfFdjaGvt3GzhIE8JkgK/ QlmrBF7fJG3bQfPrZWXzUYzS6jwv9u/aPmggsblqRBmzD0+IUagWkm4Xu/WeyUflqc2T JcXfC/oBvcT+1oJpQAZtqTliZRfwOpTyKOK6BabizblNE2ryayPZUHoh5sVg0HZeLsU4 45Kw== X-Gm-Message-State: APjAAAVONEqVrqtCff/FsULE5AAoCWGqLReHJ1Rat8x23hb9/p1jw9S+ 2a8sZ0FBYK2vgmJRjYHBXXlVM3H0 X-Google-Smtp-Source: APXvYqxgNu0Payw2IlQOkySP0YPSh4gItlN1MIi8W8P+uIJ3WwJxabmCJ62fZ6temkrx0N/mRPhchg== X-Received: by 2002:a1c:1a90:: with SMTP id a138mr1173501wma.81.1556782053057; Thu, 02 May 2019 00:27:33 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.27.31 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:32 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:37 +0300 Message-Id: <20190502072641.4667-24-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-1-arilou@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::341 Subject: [Qemu-devel] [PATCH v8 23/27] gdbstub: Implement qemu physical memory mode 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Add a new query/set which changes the memory GDB sees to physical memory only. gdb> maint packet qqemu.PhyMemMode will reply the current phy_mem_mode state (1 for enabled, 0 for disabled) gdb> maint packet Qqemu.PhyMemMode:1 Will make GDB read/write only to physical memory, set to 0 to disable Signed-off-by: Jon Doron --- gdbstub.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 00c07d6ec0..6daf779af4 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -46,11 +46,23 @@ #define GDB_ATTACHED "1" #endif +static int phy_memory_mode = 0; + static inline int target_memory_rw_debug(CPUState *cpu, target_ulong addr, uint8_t *buf, int len, bool is_write) { - CPUClass *cc = CPU_GET_CLASS(cpu); + CPUClass *cc; + if (phy_memory_mode) { + if (is_write) { + cpu_physical_memory_write(addr, buf, len); + } else { + cpu_physical_memory_read(addr, buf, len); + } + return 0; + } + + cc = CPU_GET_CLASS(cpu); if (cc->memory_rw_debug) { return cc->memory_rw_debug(cpu, addr, buf, len, is_write); } @@ -2129,7 +2141,29 @@ static void handle_query_attached(GdbCmdContext *gdb_ctx, void *user_ctx) static void handle_query_qemu_supported(GdbCmdContext *gdb_ctx, void *user_ctx) { - put_packet(gdb_ctx->s, "sstepbits;sstep"); + put_packet(gdb_ctx->s, "sstepbits;sstep;PhyMemMode"); +} + +static void handle_query_qemu_phy_mem_mode(GdbCmdContext *gdb_ctx, + void *user_ctx) +{ + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), "%d", phy_memory_mode); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} + +static void handle_set_qemu_phy_mem_mode(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + if (!gdb_ctx->num_params) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + if (!gdb_ctx->params[0].val_ul) { + phy_memory_mode = 0; + } else { + phy_memory_mode = 1; + } + put_packet(gdb_ctx->s, "OK"); } static GdbCmdParseEntry gdb_gen_query_set_common_table[] = { @@ -2212,6 +2246,20 @@ static GdbCmdParseEntry gdb_gen_query_table[] = { .handler = handle_query_qemu_supported, .cmd = "qemu.Supported", }, + { + .handler = handle_query_qemu_phy_mem_mode, + .cmd = "qemu.PhyMemMode", + }, +}; + +static GdbCmdParseEntry gdb_gen_set_table[] = { + /* Order is important if has same prefix */ + { + .handler = handle_set_qemu_phy_mem_mode, + .cmd = "qemu.PhyMemMode:", + .cmd_startswith = 1, + .schema = "l0" + }, }; static void handle_gen_query(GdbCmdContext *gdb_ctx, void *user_ctx) @@ -2245,7 +2293,11 @@ static void handle_gen_set(GdbCmdContext *gdb_ctx, void *user_ctx) return; } - put_packet(gdb_ctx->s, ""); + if (process_string_cmd(gdb_ctx->s, NULL, gdb_ctx->params[0].data, + gdb_gen_set_table, + ARRAY_SIZE(gdb_gen_set_table))) { + put_packet(gdb_ctx->s, ""); + } } static void handle_target_halt(GdbCmdContext *gdb_ctx, void *user_ctx) From patchwork Thu May 2 07:26:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094011 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="uogPEuQf"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vnCj75Frz9s3l for ; Thu, 2 May 2019 17:37:21 +1000 (AEST) Received: from localhost ([127.0.0.1]:46626 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6HP-0002Nr-RT for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:37:19 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59658) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM69i-0004ao-Au for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM69Z-0002ZP-Cq for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:19 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:41941) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM69X-0000kq-Kb for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:12 -0400 Received: by mail-wr1-x443.google.com with SMTP id c12so1794156wrt.8 for ; Thu, 02 May 2019 00:27:35 -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=h06aW5JcW7mzXhhScMAGWKdRj/JzawqBM+CXGjhR2Fc=; b=uogPEuQfE/huP8I5yfka02P/hV4lHVpCBuvx63JKgqmA6ROcBwPDY1qsjmRj8rwxwv OfTKmelGa13jRlk94oraX3AOMdzoXUiKoK2UofMmYNJAn+awpMNGmRPCy23D3InTnTqJ CJSPW664IKjUezsszD5k5Bm7IC6LtafWLCuYCa2J7YfKlROlj3yFwokneoIUOUBDX1n1 2HlN1uBiaGxqL5iP2f8WTxb424RtAYATjQxtWuq2HPgal/ozLWn52tndVW1zgL4QQkeV rgQnBxgagAxT8evlevpH2qGnNeFDRsAlVZlZcUq/bA5KlMQPImR4RR0alOSn5X9ZR4Si CiYw== 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=h06aW5JcW7mzXhhScMAGWKdRj/JzawqBM+CXGjhR2Fc=; b=MMat8vsaDqUZR4/mPmQ4NkKCJo7VUwEXu2u7baVxCQ1S5jlUQCvCAnN2Vp6GHBjTNi pRRwa8ObhtpQVE069MRFYtZPePuQRHSC4WVEPiZFlQgcZlBaCiAlCxq0tDxCtQNeeuJR 0gAN4jb7ZlgeBQ4kvHzKzZoPBkPwrTEUrV/m+/P3RGgJoN2KolratdZJwPmk/wvo3NM+ 8wAqfCONTfta96qBWo7pzk0IOF11amyEoJQQa6mkiSnPrizzJ/1TG/8/E4S0HxBbvD8A 353sRsqc29WfYtsZAnpKcCzTgBk4q2Oy9wYsBpN+lJpkKcaycFKA3E3U/Cy5fSdUTMTe R4Vw== X-Gm-Message-State: APjAAAXXBAJRER41cz+PjR2udOU+Sc6SERlRsKpt7rVNgKeGi0hm3LJ4 0JvkrmAjUOh1Ohss/bfLjwM7ShJu X-Google-Smtp-Source: APXvYqz7jAZX8WXJ835aIdOadtXzYwjuDcdR6dE8c9DVpIU4DDudFbLmaLWB4ux4EFOpL7y/I7Eaqw== X-Received: by 2002:a5d:4b92:: with SMTP id b18mr1499061wrt.11.1556782054601; Thu, 02 May 2019 00:27:34 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.27.33 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:34 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:38 +0300 Message-Id: <20190502072641.4667-25-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 24/27] gdbstub: Add another handler for setting qemu.sstep 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Follow GDB general query/set packet conventions, qemu.sstep can now be set with the following command as well: gdb> maint packet Qqemu.sstep:Value Signed-off-by: Jon Doron --- gdbstub.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index 6daf779af4..bceceeec57 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -2260,6 +2260,12 @@ static GdbCmdParseEntry gdb_gen_set_table[] = { .cmd_startswith = 1, .schema = "l0" }, + { + .handler = handle_set_qemu_sstep, + .cmd = "qemu.sstep:", + .cmd_startswith = 1, + .schema = "l0" + }, }; static void handle_gen_query(GdbCmdContext *gdb_ctx, void *user_ctx) From patchwork Thu May 2 07:26:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094016 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="M08Tkbow"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vnH80HRkz9s9y for ; Thu, 2 May 2019 17:40:20 +1000 (AEST) Received: from localhost ([127.0.0.1]:46656 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6KI-00052o-0U for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:40:18 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59596) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM69W-0004P3-HM for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM69R-0002TF-N9 for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:09 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:39151) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM69M-0000mD-3M for qemu-devel@nongnu.org; Thu, 02 May 2019 03:29:04 -0400 Received: by mail-wr1-x442.google.com with SMTP id a9so1794635wrp.6 for ; Thu, 02 May 2019 00:27:37 -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=Fq+y9Y8taPmtsyd8oOc7f9ZWDD3UWEkWOvqVLG/Lt40=; b=M08TkbowMNzKjXu92BROOswqomQg3jQWqbVYbvAvdoHrrKtXdFl0obLqqWyvJP5OoB 4qYoQbNTUN45z7e+KP8IfqAz+DGywmg8d4hv7q5VJKvRX2JuqaO0wzup4JpCT0v3nkfc rPgkEJH8qIea0F4daMLm9VRGLnJUF14vt7L3kPjG6ayI2+Q0mjpy5t0JL9HL60lcI4DC 0SmC0hLkAu7M0KFJcO2i51kJfZ6TsQh6rPf2P2TYpKDSMM1B3e4a4SABc9+DW5oSGWt6 hPELVUb69eZoAt0me0SvboRVXu1DsOdBuSsG3mc5st3d6ASLGCuHlg7+A33S2nFyjYne YOwg== 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=Fq+y9Y8taPmtsyd8oOc7f9ZWDD3UWEkWOvqVLG/Lt40=; b=AfNj4UUvkU29WHNyft/tg7g8ug7J1gEGX4z0Yx0RtqMb5s5feJqVvVBot3JZbgWqbl RFtKQM4Ue6TP4wtncjS8cMcuD5dqGvgmW08lahORqGz+Led50Q2AbV5ThW6Xt+XXi8Yr z//TUllDKOxRKnzwMJtn88mXk6LOeeVCZVp50wQQdT0hwOndo8Nrv7m49ZXrBGgid4ae pmy5fjdLh90VVfpUzoZDUn413jcGqlnyXLFBLp3aSXzjZbw8MUdSaqB5uMkQIlqykS2M vxVPc+Zz3CkDg/lREeObsgP90eptaLuLuOmnZR74FOnymL+WUgc6bIh1rcM3TrvKT/UL 5uyA== X-Gm-Message-State: APjAAAXpPrOeH1K0Wqu7S7lN7LLpmOocIWjq4n8kw3pcY/qDsh75R5Br 3VM8e+4y1up2VzwRodsYmBBfvRkc X-Google-Smtp-Source: APXvYqwQo9wX6s6DwDn0wXKvrFc9LVj12oKft45CJXj997Yt16iABIyk2dEv1BrFAhOzR5Q0jDusIA== X-Received: by 2002:a05:6000:45:: with SMTP id k5mr1575120wrx.261.1556782056515; Thu, 02 May 2019 00:27:36 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.27.34 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:35 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:39 +0300 Message-Id: <20190502072641.4667-26-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 25/27] kvm: Add API to read/write a CPU MSR value 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- accel/kvm/kvm-all.c | 39 +++++++++++++++++++++++++++++++++++++++ include/sysemu/kvm.h | 2 ++ 2 files changed, 41 insertions(+) diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index 524c4ddfbd..35207d910b 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -2444,6 +2444,45 @@ void kvm_remove_all_breakpoints(CPUState *cpu) } #endif /* !KVM_CAP_SET_GUEST_DEBUG */ +int kvm_arch_read_msr(CPUState *cpu, uint32_t index, uint64_t *value) +{ + struct { + struct kvm_msrs info; + struct kvm_msr_entry entries[1]; + } msr_data; + int ret; + + msr_data.info.nmsrs = 1; + msr_data.entries[0].index = index; + ret = kvm_vcpu_ioctl(cpu, KVM_GET_MSRS, &msr_data); + if (ret < 0) { + return ret; + } + + *value = msr_data.entries[0].data; + return 0; +} + +int kvm_arch_write_msr(CPUState *cpu, uint32_t index, uint64_t value) +{ + struct { + struct kvm_msrs info; + struct kvm_msr_entry entries[1]; + } msr_data; + int ret; + + msr_data.info.nmsrs = 1; + msr_data.entries[0].index = index; + msr_data.entries[0].reserved = 0; + msr_data.entries[0].data = value; + ret = kvm_vcpu_ioctl(cpu, KVM_SET_MSRS, &msr_data); + if (ret < 0) { + return ret; + } + + return 0; +} + static int kvm_set_signal_mask(CPUState *cpu, const sigset_t *sigset) { KVMState *s = kvm_state; diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h index a6d1cd190f..409b1a5444 100644 --- a/include/sysemu/kvm.h +++ b/include/sysemu/kvm.h @@ -462,6 +462,8 @@ int kvm_vm_check_extension(KVMState *s, unsigned int extension); uint32_t kvm_arch_get_supported_cpuid(KVMState *env, uint32_t function, uint32_t index, int reg); uint32_t kvm_arch_get_supported_msr_feature(KVMState *s, uint32_t index); +int kvm_arch_read_msr(CPUState *cpu, uint32_t index, uint64_t *value); +int kvm_arch_write_msr(CPUState *cpu, uint32_t index, uint64_t value); void kvm_set_sigmask_len(KVMState *s, unsigned int sigmask_len); From patchwork Thu May 2 07:26:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094026 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="onkV/oMY"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vnNk6KBkz9s3l for ; Thu, 2 May 2019 17:45:09 +1000 (AEST) Received: from localhost ([127.0.0.1]:46739 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6Ow-0001yN-5A for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:45:06 -0400 Received: from eggs.gnu.org ([209.51.188.92]:60027) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6B2-0005rt-Ht for qemu-devel@nongnu.org; Thu, 02 May 2019 03:30:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM6Ay-0004b2-K2 for qemu-devel@nongnu.org; Thu, 02 May 2019 03:30:42 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:39151) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM6Ap-0000pG-Cr for qemu-devel@nongnu.org; Thu, 02 May 2019 03:30:36 -0400 Received: by mail-wr1-x441.google.com with SMTP id a9so1794753wrp.6 for ; Thu, 02 May 2019 00: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=J6AQ6ezpQ7lzWuL7dF/ov14egOgbuG1nkSc0nfJNR5A=; b=onkV/oMYuUx9EPWQh14cvasyM5TasZjH0us5VPZKdOVq2HCX/LVSZqL0buFOTgnIBg 12qFcWg9YlO3A5FlpwZkSAC/b8WgvsahWw7yi0YzhukSCQLvusDtCOPLOB/WEkYw/g/5 m2CFvAK0/DZkMHjHQtKLm+t/jZ9r9ctFcMVXMItMw1qCQwA7hluTy9Y6msm2W80RlOxc 2rLcW4t4mKYBcb7shNIaeQRteKTXM4v/5tSv3S6X9SVCEaA1nAR3uyLX7u7qdwriawf2 x07XPHhW9m/aDk7x8mWqIDFHHamzc+jblqWBwKzIQE24M83VkrJSE8/gdr37mEDotQxZ RyLg== 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=J6AQ6ezpQ7lzWuL7dF/ov14egOgbuG1nkSc0nfJNR5A=; b=c3byWmR7czUqrZk0BOiawheQdvljAjfF9DPbwJd0c2NJFTTQLN27PFZJlXcXnlPSpB xJJI9t/AiDl169Ku95s0Eb2SNTK/tBK3X1/ik91zdbWtaRVxv+JkdyDZ8laQ28QB1qTP WqmHDdhLnTZzOcUnS1tfaQSHpS4jWdnOqnnQmmxhkLcY3WndNCGbDLHNBUhjnB6ApDQv HBv/a4Wiu89FtmhfdSvWkRrjKr/p5so/WSI2XP9M5nT2NQaiqclWDZzGCdGbY+QdPWi3 RcE3IgFo8hKz0Ky8CM/lTB5OcgqqkzXIlVRAePBfYsGaiE5stToYZxbluL+X1OUMrp/E HIWw== X-Gm-Message-State: APjAAAWz/YevAxcukatHqrRN/+SmPC1nhBvtbA7QmXmTh2wGIU+jJPaP q0Je09/bYgeiFYKD+48KcBl+zPZO X-Google-Smtp-Source: APXvYqxtKPze9H7ztAXdhsvCr0awYsAyA5abtl1chlljGYhc1b4NEEUZdatzv//jQ8WQDDfjQpdB7Q== X-Received: by 2002:a5d:52ce:: with SMTP id r14mr1633429wrv.224.1556782058331; Thu, 02 May 2019 00:27:38 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.27.36 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:37 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:40 +0300 Message-Id: <20190502072641.4667-27-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 26/27] gdbstub: Add support to read a MSR for KVM target 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" gdb> maint packet qqemu.kvm.Rdmsr:MsrIndex Signed-off-by: Jon Doron --- gdbstub.c | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/gdbstub.c b/gdbstub.c index bceceeec57..d5cdda190a 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -2141,7 +2141,14 @@ static void handle_query_attached(GdbCmdContext *gdb_ctx, void *user_ctx) static void handle_query_qemu_supported(GdbCmdContext *gdb_ctx, void *user_ctx) { - put_packet(gdb_ctx->s, "sstepbits;sstep;PhyMemMode"); + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), + "sstepbits;sstep;PhyMemMode"); + + if (kvm_enabled()) { + pstrcat(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), ";kvm.Rdmsr"); + } + + put_packet(gdb_ctx->s, gdb_ctx->str_buf); } static void handle_query_qemu_phy_mem_mode(GdbCmdContext *gdb_ctx, @@ -2166,6 +2173,29 @@ static void handle_set_qemu_phy_mem_mode(GdbCmdContext *gdb_ctx, void *user_ctx) put_packet(gdb_ctx->s, "OK"); } +static void handle_query_kvm_read_msr(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + uint64_t msr_val; + + if (!kvm_enabled()) { + return; + } + + if (!gdb_ctx->num_params) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + if (kvm_arch_read_msr(gdbserver_state->c_cpu, gdb_ctx->params[0].val_ul, + &msr_val)) { + put_packet(gdb_ctx->s, "E00"); + return; + } + + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), "0x%" PRIx64, msr_val); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} + static GdbCmdParseEntry gdb_gen_query_set_common_table[] = { /* Order is important if has same prefix */ { @@ -2250,6 +2280,12 @@ static GdbCmdParseEntry gdb_gen_query_table[] = { .handler = handle_query_qemu_phy_mem_mode, .cmd = "qemu.PhyMemMode", }, + { + .handler = handle_query_kvm_read_msr, + .cmd = "qemu.kvm.Rdmsr:", + .cmd_startswith = 1, + .schema = "l0" + }, }; static GdbCmdParseEntry gdb_gen_set_table[] = { From patchwork Thu May 2 07:26:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1094008 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="ux+L8GQg"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 44vn8m3R9Jz9s3l for ; Thu, 2 May 2019 17:34:48 +1000 (AEST) Received: from localhost ([127.0.0.1]:46574 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM6Ew-0000Bx-BB for incoming@patchwork.ozlabs.org; Thu, 02 May 2019 03:34:46 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59523) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hM69I-0004B1-EO for qemu-devel@nongnu.org; Thu, 02 May 2019 03:28:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hM694-0002DK-HW for qemu-devel@nongnu.org; Thu, 02 May 2019 03:28:51 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:39152) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hM68u-0000sd-IW for qemu-devel@nongnu.org; Thu, 02 May 2019 03:28:36 -0400 Received: by mail-wr1-x442.google.com with SMTP id a9so1794839wrp.6 for ; Thu, 02 May 2019 00:27:41 -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=ty2WlLmKhHN0xnYND6EVRTn/Wsczm2UvDdzQfmaxB4Y=; b=ux+L8GQgnopXTu3TP26b4++71aIr9NIckByUeOW+wTLaJ56ZSyCfX98ug48WuOCnQz 6EUKdaN+kgRDcJVsNdKpNthGU3iMwvVUioM9AatYEVdHtaRKxLf+rdRYjtoA82G39pDr TpNUTL/v08hxQeA1v8pd77Byv8u2BqG9NFU9+UQonE3cdl/rAU+P0im4vSgjwTVZZsfH Z62ASqBQXsJDjk+zwOa//GFC+WdQsncrBDqXJv4DubGVjWsDVvPxoEUFxKyDmcG+q/43 a2mPrWrX8Ar0QONQy1eS+V9EfHhtNP6xLUdej1/oEUgyf5il1qUfiT+wdP3p6jB1k4U9 4wfg== 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=ty2WlLmKhHN0xnYND6EVRTn/Wsczm2UvDdzQfmaxB4Y=; b=co6FB/8jSS8Q7fVQuXVI9VGBj2QtlY1Ee8LuFFzGd4dCSKry6GJSrX/0boIufxM1fx UR0DsLqse6y0PnI0hvsX31Scn1exDja3anTKpBFkmgnYFhxT7KAUWg7MQTbNG5xm7uRR X/6Jg1+T0r6to5Dq+jnU78lctSlGQCDr6siUjhDAVPZ/9CN0tlpeAZhEqkTah7N1ogQ5 c+/yrE42+forAMRzFwekYrwnH7T9pkiWOWEeODmkhGLx6ux1RKI/+OqxVZbIlKRwx02D J/ai4G0/7QS26h/KRcnzQMYHTJ23UYKwai3vnt4D1AbjLG72iynxa7QZdGHreLsckOKH jqlA== X-Gm-Message-State: APjAAAX6gjHFZtXe7b+Kp5pDXpCyX+YziCyvsGd1n9doZLpWNgkLg7u7 L+7utHrWB/2JTIpi3xUYZTPRzIsb X-Google-Smtp-Source: APXvYqysx6Tbo41fJ4NHVozYIuea8JDuurYREkL+KnbNiqgc9OCmp332RJy1CkYjqXgTSTRbatP7Ow== X-Received: by 2002:adf:b645:: with SMTP id i5mr1590986wre.272.1556782060139; Thu, 02 May 2019 00:27:40 -0700 (PDT) Received: from localhost.localdomain ([176.230.64.186]) by smtp.gmail.com with ESMTPSA id z5sm8769289wre.70.2019.05.02.00.27.38 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 May 2019 00:27:39 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Thu, 2 May 2019 10:26:41 +0300 Message-Id: <20190502072641.4667-28-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190502072641.4667-1-arilou@gmail.com> References: <20190502072641.4667-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 v8 27/27] gdbstub: Add support to write a MSR for KVM target 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: liran.alon@oracle.com, alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" gdb> maint packet Qqemu.kvm.Wrmsr:MsrIndex,Value Signed-off-by: Jon Doron --- gdbstub.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/gdbstub.c b/gdbstub.c index d5cdda190a..2d9a8e6942 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -2145,7 +2145,8 @@ static void handle_query_qemu_supported(GdbCmdContext *gdb_ctx, void *user_ctx) "sstepbits;sstep;PhyMemMode"); if (kvm_enabled()) { - pstrcat(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), ";kvm.Rdmsr"); + pstrcat(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), + ";kvm.Rdmsr;kvm.Wrmsr"); } put_packet(gdb_ctx->s, gdb_ctx->str_buf); @@ -2196,6 +2197,26 @@ static void handle_query_kvm_read_msr(GdbCmdContext *gdb_ctx, void *user_ctx) put_packet(gdb_ctx->s, gdb_ctx->str_buf); } +static void handle_set_kvm_write_msr(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + if (!kvm_enabled()) { + return; + } + + if (gdb_ctx->num_params < 2) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + if (kvm_arch_write_msr(gdbserver_state->c_cpu, gdb_ctx->params[0].val_ul, + gdb_ctx->params[1].val_ull)) { + put_packet(gdb_ctx->s, "E00"); + return; + } + + put_packet(gdb_ctx->s, "OK"); +} + static GdbCmdParseEntry gdb_gen_query_set_common_table[] = { /* Order is important if has same prefix */ { @@ -2302,6 +2323,12 @@ static GdbCmdParseEntry gdb_gen_set_table[] = { .cmd_startswith = 1, .schema = "l0" }, + { + .handler = handle_set_kvm_write_msr, + .cmd = "qemu.kvm.Wrmsr:", + .cmd_startswith = 1, + .schema = "l,L0" + }, }; static void handle_gen_query(GdbCmdContext *gdb_ctx, void *user_ctx)