From patchwork Fri Apr 26 04:35: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: 1091275 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="kLtpBCmR"; 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 44r20s1H71z9s47 for ; Fri, 26 Apr 2019 14:59:57 +1000 (AEST) Received: from localhost ([127.0.0.1]:39271 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsxn-00040W-4h for incoming@patchwork.ozlabs.org; Fri, 26 Apr 2019 00:59:55 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45586) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsmp-00012o-Q6 for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:48:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJsap-0004Ci-L8 for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:13 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:45149) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJsao-0004Az-7r for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:11 -0400 Received: by mail-wr1-x444.google.com with SMTP id s15so2393810wra.12 for ; Thu, 25 Apr 2019 21:36: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=9gs1pjZcHlRiuvyF89Xf0dDUFOI/nZh6LcrIM/HDQRg=; b=kLtpBCmRDU9fZaZ4u+zfnDq2IYGmpuz8pRjP9UzKFSjxVYtfyQ1twqL9mSlCGwZ/7I NmN7NAMvQe8QqQz9R+TADR30oh4pk3Cko5t2qZaPf3Xqz9UbxksCgUS6OBEKBWn7G55Z h/oUFGNHE7a2Nghh0kyr4JhSW03JEYDe0fSv9rZ+KZ/6sN90LWAy5upKbrlyCDIk3QmK 7lxdZtaTc8v9ICwTI4BLWFweNPjCac65uK5fWFoz/0rFJTKTD4iGlU+nppQsqJKG6fT2 u2qVVILTAaiDGJKWDRGZKMM/HOeU1HciYDgm9VCQrKjr+Qj3VmtXdCfgPK4XmXA71UVP Aavg== 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=bFtbv2ZWhGGpX0Jh/8pl+vTeRXOqea1msuAgN3nXt1LIwvjsQGo92va70D2cUgjSAu O144KTNOhvaeJATQNGUUd5HyGTATLltcyouiz2wOdrZ7rmQBGpJoLyBp151RCMagPV3E kbGWWaGUXFwGoEHIwPah1ac8UzvgyF3bq9zbWp0h4CHL+Gp/oYZSOVKduLxLo2clNFBy 16y7NP2P2WfI4Nd1VNGJppgJA2tt6gbJBqUpY/Mw7cMbDXA7Hz8ZLyKIynY1fbot4KYC Zg00av+YVzncvpHQS0/R40OmesW79KbE8u23om8G6mRVJv5miKeR8YBOkBMIcZp4fAkY Ntng== X-Gm-Message-State: APjAAAXasrrFML1e5D1GCcGu2qxex90HTIVouHCrazG+s6W6aem9nSwV 1nyqNnxv0aoqp2VyL/oPeEYoZqQ1 X-Google-Smtp-Source: APXvYqw5ZK+DjJi4ZuSsE7jlnPCnrsBG0mciDgRXXh+ASVEqj+9Zv9ybYi8kv4WdPWu0iNHw33ikTg== X-Received: by 2002:a05:6000:11cf:: with SMTP id i15mr27500648wrx.287.1556253368768; Thu, 25 Apr 2019 21:36:08 -0700 (PDT) Received: from localhost.localdomain (bzq-79-178-247-46.red.bezeqint.net. [79.178.247.46]) by smtp.gmail.com with ESMTPSA id h5sm3467088wmf.38.2019.04.25.21.36.07 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 21:36:07 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Fri, 26 Apr 2019 07:35:38 +0300 Message-Id: <20190426043558.6888-2-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426043558.6888-1-arilou@gmail.com> References: <20190426043558.6888-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 v7 01/21] 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: 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 Fri Apr 26 04:35: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: 1091272 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="ed8ZoRcp"; 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 44r1xs6FLqz9s47 for ; Fri, 26 Apr 2019 14:57:21 +1000 (AEST) Received: from localhost ([127.0.0.1]:39247 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsvH-0001Wq-Nd for incoming@patchwork.ozlabs.org; Fri, 26 Apr 2019 00:57:19 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45317) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsmn-0000dE-Ur for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:48:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJsar-0004Du-Ho for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:15 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:41405) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJsap-0004CV-Vj for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:13 -0400 Received: by mail-wr1-x444.google.com with SMTP id c12so2424813wrt.8 for ; Thu, 25 Apr 2019 21:36:11 -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=ed8ZoRcprNxGRyN50dgEXFK6upOUMA19AsUfWamwRpdE7qA+3SFCx/tZyNPPWC21wD 2FDvY6SCgxfTdAvehMjKZLR5X4Tuu9YLnrI4EzvCXMihKtV4Vv29sAq1iQasJoyQlouZ mBHfPYleRDND41NzPGs1O+M3QpSbIEl1ySnZoAVOhci+sqnWYUA7R91m6rf8GgQ/UtYo fA+I+ve3K3Y798TW3awfjETUU5FG3RMtT0WT56xzHlwREy3F5/UtNSkJl85MD3Fdj6+4 As1TDpjoXz+mqDqdAxgHzqbHEwCOf3aaiJtkVfgCqt/JiKxMbdYRiJmTHngtisuf5+ke EJsA== 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=Mg0b/6f1C8finEcAHw/jHqo97eN9BUdUGFQAMGM1Pk2OE/Ri+32/CSa77P3eaRM3HM XqX9LLA4JKj+cfwuq7WqP7Q+QmaTJ6V++PSBqI3cmUbmZj/3Bf3pzuBU2Js5ZwEDNp4s WYowfj0r4iChfajn1ciqveo3TdoP7S4YnTai/IKNYuvxa7YTJt4Ri6gtl8eQNeNf2ZFO PkuFZYF7QPYxzdy534Y00gtXPZ+e3EjGN3/qjsp4ZZ9PCJ/gD3eTUnVR8ySeQkY3ueVp geheKvty+Jwvvc3NO3bKHsX2fcQeD3MpDBsnoAdb6wkGKtXYBSw42rd0bKIuKWNDkxZA 0jTw== X-Gm-Message-State: APjAAAXO87GEaQw/yswAuPlNq9xK8d1loCek1Us1LLBA+7UE02fYBH2r GLV2SZaYiaBIwPQYJ8i3/iuYXgYa X-Google-Smtp-Source: APXvYqwc6/qPUoqs5jAyuzXvR9bumJDVCv9gma9ByBlM++ygXthng2BLyO9rKZP7VzpNidpvy/kxCA== X-Received: by 2002:adf:f64f:: with SMTP id x15mr8687595wrp.202.1556253370427; Thu, 25 Apr 2019 21:36:10 -0700 (PDT) Received: from localhost.localdomain (bzq-79-178-247-46.red.bezeqint.net. [79.178.247.46]) by smtp.gmail.com with ESMTPSA id h5sm3467088wmf.38.2019.04.25.21.36.08 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 21:36:09 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Fri, 26 Apr 2019 07:35:39 +0300 Message-Id: <20190426043558.6888-3-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426043558.6888-1-arilou@gmail.com> References: <20190426043558.6888-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 v7 02/21] 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: 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 Fri Apr 26 04:35: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: 1091271 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="GuxftqfD"; 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 44r1xn75N3z9s47 for ; Fri, 26 Apr 2019 14:57:17 +1000 (AEST) Received: from localhost ([127.0.0.1]:39243 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsvD-0001Uj-UB for incoming@patchwork.ozlabs.org; Fri, 26 Apr 2019 00:57:15 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45320) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsmm-0000dG-1v for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:48:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJsat-0004GT-C9 for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:17 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:35593) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJsar-0004DS-Ta for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:14 -0400 Received: by mail-wm1-x344.google.com with SMTP id y197so2376235wmd.0 for ; Thu, 25 Apr 2019 21:36:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lYm7IhGBrxn52sVAeIC90HrrQ0q55SD5y2VdGObDHgY=; b=GuxftqfDBOC6Gh/IgmEfBv1W4NhNRan/qGK3Dw5MJKzDR69QPEUivIShut7Q7Axv5d LKh7QfQq9c6M60hcAgxOMxUeyjEjwAuVFqR9j6MYmF06zjoJT2KFjxHqViZmXJp/ZL01 xP8wxFFZwHm0XjXTyMgO++xCRLbZhYdFCmaJSPeQlGOOETRqQQ/4gM53bFpeCsZOxFG4 z2rkIs+OWj5DdwLn1nzt3xAQgo0jKiUpkaDmJwkizn2FaTzezdh7IvGXF/TWJJV/tw25 hUUeYx/fSkksiQd32hwBEXvT/T8loySXGKbUvr4xRhcDK0LPNH93hcQLAAlg3MXTeIhu pUoQ== 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=CMbpIzFDYj3nbA1E9aKA/K7yCB75hlD271s/rnQVKcNAMhVGFsDbcuwqsGrR4r8GMX QnjyfklMsA0n7mI8oG1uWIBY6qL8QMeYECzajjdcKF0SSoBkwhcFTkI0Ecm3D96/Plah v+ceHwtznwqvtb/7+cm6bFhd15AqpBAlniEV/EgRj0uW3nEvQTlCiQhu9zWU4aj5Cbwf NNLABiHbavsMEW3ZO/Oii2IOf91EaO/mfnGxsporgIRFNuNBC763DaASJ4baZB8Lh8bS ctz3rEqBtFfsrlQJEpVZ4BPRQveTfwyMbBX2Kf+5+OBLorzRLQM6YL54lzRzudWjN7N0 TFFA== X-Gm-Message-State: APjAAAXOFwAKEmJOMYhtnQbRmHbH0fZmLQoCM8R49p+B9Giu1zaxMgDH BaP/3RYEA7gUAF41WfSmD9omLZol X-Google-Smtp-Source: APXvYqwifvW1CP6iF7M4v4S4Du7nNXfC0gtBqNcSoi3t0MIFYMiTlpYu6iA2UttVNjJeMUSrhdCVuA== X-Received: by 2002:a1c:a103:: with SMTP id k3mr6221401wme.8.1556253372530; Thu, 25 Apr 2019 21:36:12 -0700 (PDT) Received: from localhost.localdomain (bzq-79-178-247-46.red.bezeqint.net. [79.178.247.46]) by smtp.gmail.com with ESMTPSA id h5sm3467088wmf.38.2019.04.25.21.36.10 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 21:36:11 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Fri, 26 Apr 2019 07:35:40 +0300 Message-Id: <20190426043558.6888-4-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426043558.6888-1-arilou@gmail.com> References: <20190426043558.6888-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 v7 03/21] 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: 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 Fri Apr 26 04:35: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: 1091288 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="HLKvgcbY"; 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 44r2854XsYz9s47 for ; Fri, 26 Apr 2019 15:06:13 +1000 (AEST) Received: from localhost ([127.0.0.1]:39392 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJt3r-0001ow-Je for incoming@patchwork.ozlabs.org; Fri, 26 Apr 2019 01:06:11 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45317) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsmm-0000dE-1d for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:48:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJsax-0004Ma-3v for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:20 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:35593) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJsav-0004Fx-6v for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:18 -0400 Received: by mail-wm1-x342.google.com with SMTP id y197so2376291wmd.0 for ; Thu, 25 Apr 2019 21:36: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=9IF4rsqYBB5CcGAeM/Zis8CV+HM8l1BP4iU1qHaXB5E=; b=HLKvgcbYz5oBPXP2GpJ5HgTkUYRiZAg/mFOG7RjmjJcSr+ZHJCK7Bw4ohI57lQPO9N bPGcPJO0L0O/Fzd39NMxWQTvT954J0z6NjZrOjrX+EQOyIAHmNS4oj4m7yBlsuW1Mh8b G47styCjvpgzioz8hNLhS7qqZhJQRCgwJ5M5Q90dZz7DkeAk90OmXNmbz3/SeZkKcyIx 33ckdLYbmHoGUnieYXPylSgJw4AvbMbF1EoWEhkyOhz/+0kLhumDhKG6Iegyfc1q1Dar 0l03EuLJtfbzUES5P42U+vAlkpfv+TasV4tEuqxImDI8FOTZn6WFz/Unzss8b+pYSeIp 8tzA== 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=BYC4orNQ9lph/jhLdFGs4J0QgXzHT+SmWqY8wlQS0g6KfSoAEx13eP3kYRmYGkuatS sNmK2LF4QBoFknFzdkJtddeg0j/Q1VJjqFl2tvVA1DSdPBndO5wLAf8D2ubxvKNmZ4vB iA/iLBiyJQ8TLcqBLeJoodCSYT8cGPNSKC5v00bX459eAXfyTUtJl5q2mKuL0Rz5IxjG NV8JtXRv6OUf6mrWPXBOfUcPDbOiCLpQ4qOA8Di4eyG0THH4y5aXGGPpsCyIret0Tiu1 nL9ZsZ1+A8ItNWKqsPjaDvrJQg5kvmZHsapN8bCNDzbjUKHQc3y42Uye7IwIJETcSlZ8 BhkQ== X-Gm-Message-State: APjAAAUEQ6nZP0KWbWE439429fFSrW2uYB/veoOtj9CE++gehVL3TMfd CyMdKN8PucnQSeY7p8/tde7ECBqb X-Google-Smtp-Source: APXvYqz8m2Sr6cGpDFTo6ikiMamPTXHa/khDgLP5rjt9APzij6a3FmxuNdU9CQ+0kLgH3VASc7joQA== X-Received: by 2002:a1c:6783:: with SMTP id b125mr5815868wmc.79.1556253374335; Thu, 25 Apr 2019 21:36:14 -0700 (PDT) Received: from localhost.localdomain (bzq-79-178-247-46.red.bezeqint.net. [79.178.247.46]) by smtp.gmail.com with ESMTPSA id h5sm3467088wmf.38.2019.04.25.21.36.12 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 21:36:13 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Fri, 26 Apr 2019 07:35:41 +0300 Message-Id: <20190426043558.6888-5-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426043558.6888-1-arilou@gmail.com> References: <20190426043558.6888-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 v7 04/21] 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: 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 Fri Apr 26 04:35:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1091268 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="X/EmV8Bn"; 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 44r1tp4brNz9s5c for ; Fri, 26 Apr 2019 14:54:42 +1000 (AEST) Received: from localhost ([127.0.0.1]:39188 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJssi-0006dK-FA for incoming@patchwork.ozlabs.org; Fri, 26 Apr 2019 00:54:40 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45320) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsmh-0000dG-JA for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:48:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJsax-0004Mg-3w for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:22 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:40450) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJsav-0004Ja-9L for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:18 -0400 Received: by mail-wm1-x342.google.com with SMTP id h11so2330683wmb.5 for ; Thu, 25 Apr 2019 21:36: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=x82aHJMzl8f+PCXWhu2ZX9N8tzch1kuJG+XquT6URF0=; b=X/EmV8BnohzDcZAzuZYpw9Fpqq3xw/P9Oow6QaJb5e7+PBkDTcFBODxzk5+KVwD2Tw Utf6tgRDXDY5tEyT2eVXekd/pOe51QNmvLW/pu60xQGnIp5xY6n5qTFKi82tfYw2/Tgf h35I0PKtRIWi99+Bww9QAgnh+bf3wW6ejxUX230Up/Gb14FqxP2WSr/t8uQXZwaQNvBg KUE+2dMsMdullZ6l+miIUcIQHyKQTB6oOxkhUhpNV8wNpu7ZRd4gEYP9TEDxFzHYn6PL 0WdOk1i3OILpjyb0XjHbEzfPjFaGUbrqmN26b1fj5ttzYafpQe7EyeRa93zpi+qd9l5v 76Bw== 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=A8QpU5hAYUUnXXVHXEY1u4qpYI8z6jmYGgDBLdlEfqmWPXXcWYPPwDCbNHUMsQkQNM CiiQZMuuE+ZR7Y1iX5HJK5KAPTEQPcQt6V093cvxk1GnBqr85q81kjckPNWEqKFyOggb Gz0ZphlNlDfkhmQGXWYiEKL5IW649uIRtY8CvDfOjW3LaLoa1u/9I1dxvAv/d51prxVJ 6qqnu9nNDxYISKe9EPi8VwpEaIeIiaCfwXoHvajlm+M/bXXefpjAPpZvFLdF4otYKMnp a3JkWfLmafbUAq5rPZ2oDpRTIM9iyn9gw6K918Qdc3EX1AfORSgC5YS5j/AD8/AbPKo/ vUug== X-Gm-Message-State: APjAAAWKns/QfV6ifr8rHCYuZHe4JsWjzCZpO9/bT1u46RNUGELgv9x0 f2DVU+nJsiD7BUx1TuWcHzBIMb6d X-Google-Smtp-Source: APXvYqxGZiRKnKcU5bToSN1Hl4A9I9F7jFpeCwG/sFUsWIRbf0c+uT7EjVVbF4SpbAXHuRqASEDRHQ== X-Received: by 2002:a1c:2e8c:: with SMTP id u134mr5996302wmu.146.1556253375826; Thu, 25 Apr 2019 21:36:15 -0700 (PDT) Received: from localhost.localdomain (bzq-79-178-247-46.red.bezeqint.net. [79.178.247.46]) by smtp.gmail.com with ESMTPSA id h5sm3467088wmf.38.2019.04.25.21.36.14 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 21:36:15 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Fri, 26 Apr 2019 07:35:42 +0300 Message-Id: <20190426043558.6888-6-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426043558.6888-1-arilou@gmail.com> References: <20190426043558.6888-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 v7 05/21] 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: 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 Fri Apr 26 04:35:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1091264 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="KGbEXiLP"; 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 44r1qj31gVz9s47 for ; Fri, 26 Apr 2019 14:52:01 +1000 (AEST) Received: from localhost ([127.0.0.1]:39163 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsq7-00040M-AL for incoming@patchwork.ozlabs.org; Fri, 26 Apr 2019 00:51:59 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45317) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsmh-0000dE-D7 for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:48:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJsb0-0004Ob-U1 for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:24 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:33956) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJsay-0004Lu-Ut for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:21 -0400 Received: by mail-wr1-x441.google.com with SMTP id v16so47489wrp.1 for ; Thu, 25 Apr 2019 21:36:19 -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=KGbEXiLPfQg4s5jB4sqLPP82dDGcNOvJV+RW0BP++zjdqT4OB1t3qIx6lWcP5Uis6g Dy9yKW8dICYrklUt41pPMTNCuU+zeMtLcCzUcz0e5rkUd4CgonUy/fW3t/zG2dQ3Cu3s zTJADuOocE7RC1983PVOCsnD7BuE3nMt2TCS8OgLkI+SKiSzD5nOIfEmQEYFgdQNF0Qj tLw5WVXA9tzD5ZAOvsqAWBIJ6DFTb7c1fplz3fVutbtSvfOxttBHxo6LBRXkEC7wSmj9 yG2vNRJ8RJPXk3GVpe2Fg4FY9g+ZQSJusvb3xFUYES3JaptCwZ3DsTL3H+v7zqPPZGE+ 018g== 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=TRgA7pqm2gkUN6kigsgUeggSaoOv4YovdVBb7tR7R8pbA2phrlOd3orgv4K2xZucHH g5Nfjzxg74ntZm4TM35yr3DnxGTH80ZjVz54eM2yp6X+x7Gpjj1zoqBu5KmrzGWD+zSM DTCwFSC1pCEao/7ZWaDDZb7AdNiwqU9m9eoOcHDNi9v4nRQ4+r/fL8X8JoupEbMq5zsE wFPetZyZKBWzKZAQbL7XJKJTPdv9quz60c4/oExbfW4R+3JWRZh4yaChkLDTs0l5l6M3 KgUqEw63GE5FlWe6htq8fn2QJ8rwvd3ejkeWpvtd5vPrSfSwKerIChQ3cAJv7BNxEIjX tlOQ== X-Gm-Message-State: APjAAAU1oq2j6dTCenWTUnJVp0PYUj+Xdc9J7SkdEsguNjP4DkAgBbag y5lUA59O9HfReFqmXBKlUML1wED8 X-Google-Smtp-Source: APXvYqydeYydcqyuKzHlwa6rxkw4O1ZsYKyfstn6LejLsHAd24ZnMma8MUBOSF24nbMglKH0RdXquQ== X-Received: by 2002:a5d:6352:: with SMTP id b18mr13745445wrw.24.1556253377723; Thu, 25 Apr 2019 21:36:17 -0700 (PDT) Received: from localhost.localdomain (bzq-79-178-247-46.red.bezeqint.net. [79.178.247.46]) by smtp.gmail.com with ESMTPSA id h5sm3467088wmf.38.2019.04.25.21.36.15 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 21:36:16 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Fri, 26 Apr 2019 07:35:43 +0300 Message-Id: <20190426043558.6888-7-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426043558.6888-1-arilou@gmail.com> References: <20190426043558.6888-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 v7 06/21] 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: 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 Fri Apr 26 04:35:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1091269 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="qGDYhWj9"; 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 44r1xR5xV2z9s47 for ; Fri, 26 Apr 2019 14:56:59 +1000 (AEST) Received: from localhost ([127.0.0.1]:39231 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsuv-0001BZ-NT for incoming@patchwork.ozlabs.org; Fri, 26 Apr 2019 00:56:57 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45317) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsmg-0000dE-DN for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:48:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJsb0-0004Oe-U6 for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:24 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:35593) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJsaz-0004NO-0I for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:21 -0400 Received: by mail-wm1-x341.google.com with SMTP id y197so2376521wmd.0 for ; Thu, 25 Apr 2019 21:36: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=y+n9UknESyjS5ywhVhGmu6RRpXVVQXSmReCo/GVxG50=; b=qGDYhWj9lBc82LHk4Qri4cyJU0bvMri/6+6D6fXFkAu53qm+vCFAFcBZ1p2RZEFGVO UtNWA0DDm8PemTfiS1QhLQ7RnhIIS5+MD9LUwSH6VLbOB/x98ryfg9uqiOaMSI56CsWj vKKxEqbxQLzr7dsZ0MovmlfMX6V9RFf1Hsvvvj1zZWJvo9q14VkKFElBKrZWOi1/Y7Os bG9NH3JW2qNO+AGbOFnLa4QUkIg4xao9suJ99oo1/4ZQGhndOWN4CeULP3g49MFP1jD4 b0CztFS8+g74eO4oOXCqM+2wneYuRyRzwhO0po6KbWCRgQ/FY5anc2YR1w7IWi5C2Yja zj1Q== 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=ielAHswK25R23ooIC9WBkeJHbX+KlX+XLwtFzsz3lgbtTE7LxUSSwkBbdZZ+M5YLBR Hgnn1dinpQZvLAeIgy/G+IjVcJuH6zcUxKmZYXynA0rJnEngHPV2OghmgrexcNRzXNLi x5JDftqBa8+GsnrW9F6uQig4k50XAigLQexlz8ZBuyMRMwDNUBlS24YReEFNGemJPvQX eZSWY1iSR2KsH5kpVvphGz9M0r65Bfk9bpJaYpAc97lRjNXvzedmDsN5oZZ7flMA85d0 j8Cs7PCZZWRNGtAdSKn6MNhtWoIMZ1pV3YrIF6roEupuqMlLRty69pE8GfS9SOSJjPF1 lD+g== X-Gm-Message-State: APjAAAWkEJJTlhHWVYpf27bo6LcZVeox+HJPpEPJt7rVLV1tp6cQi0d5 C52CvabMJhhpGv7adlkkY/2LpBOK X-Google-Smtp-Source: APXvYqwybX5Y8lEgXbq2BwyG2q9Gpr7ghO9UMM50U9/KRbFCw04GoLwRx2WYmT2sBLEjhT3jPzMT9Q== X-Received: by 2002:a05:600c:28b:: with SMTP id 11mr5725252wmk.129.1556253379444; Thu, 25 Apr 2019 21:36:19 -0700 (PDT) Received: from localhost.localdomain (bzq-79-178-247-46.red.bezeqint.net. [79.178.247.46]) by smtp.gmail.com with ESMTPSA id h5sm3467088wmf.38.2019.04.25.21.36.17 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 21:36:18 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Fri, 26 Apr 2019 07:35:44 +0300 Message-Id: <20190426043558.6888-8-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426043558.6888-1-arilou@gmail.com> References: <20190426043558.6888-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 v7 07/21] 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: 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 Fri Apr 26 04:35:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1091287 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="Dr7LuTEp"; 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 44r26M0cHZz9s47 for ; Fri, 26 Apr 2019 15:04:43 +1000 (AEST) Received: from localhost ([127.0.0.1]:39346 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJt2O-0000JG-WC for incoming@patchwork.ozlabs.org; Fri, 26 Apr 2019 01:04:41 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45320) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsmg-0000dG-CG for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:48:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJsb2-0004QU-R0 for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:25 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:39837) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJsb0-0004O0-T5 for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:23 -0400 Received: by mail-wr1-x444.google.com with SMTP id a9so2450279wrp.6 for ; Thu, 25 Apr 2019 21:36: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=U4fLhEZHxeWF7Ph12MqOmpuk/185Eq0Ogcw/FW+Pwwg=; b=Dr7LuTEp2/fDoRkLxFMZxphChvNFuBUshR8Fy8eNpE7AxQKfDJJdT2YcTEoNlA2ml+ +cW5z6JRGUT3UgWBSdc9pyJHrb79Y2Tamqc8lBGZoYgaxkZOL3rufHcRgO+OLz7/Xq97 TOBADuVyPPslF5ox3/P7KLRXx1XDzb6+Lk5uqICA4OxnomqBTl//gZvKNQqFUxTUJ/a3 v4cslLh1gkI/91qDk/wNnsSUQJZoBnjbeJrc2SM31YlAvqqds6HWPm2RDhBq6ck14u1o Cd96Qdt6PL49aAWVW7gjlFHJWvDuU9uoorYxs2zRJknCpp+/e/sESYK4pJNh2GrrELm1 1Pjg== 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=rqVlKU6iXp/5o+uDhqxWvNErQmTPImo+68PCu59guAcHIv7/9epeADPxEL39Ekzyok BYR0GVd26yjZVG/YE7qvWuXKgQrPa9J2IUPuE65Qe7gnD0uy1mO9Bile0SAzybMFXAQu NFfKpbwqF3Vxz62uTOLEG4wo/wnrvHjo4+afmAkdeGMtJy9ppBMXCQ/apXiFu+7xaBrL NaRJJmeya8ahz6nfwCwa3JNMJSTAJi9h8LpdVF8p/ZgPUYM0HNzTEz0854HeNc/Cxv4B oTXAILLWLCeBrkA4o6RcgTr8DumZ0XK7RznhLrf4q8mcnXTn+vIPUXX3udTpHtwqJyNN Rf6w== X-Gm-Message-State: APjAAAX5vjCHyXOuuPSrh3F9iuZbJJAFlOhfcMt8+rPm7fSNda3BKkYC 8X8qlcy8CUhsz5NnnKBEydy+m2Es X-Google-Smtp-Source: APXvYqxl15YLF/OFQ2bp8VCORUiQIpV0uUxg6nbtaHPAfZ0PXpyPhI7lRRK39cssODK7tuduJ8aF2A== X-Received: by 2002:adf:8062:: with SMTP id 89mr1807933wrk.107.1556253381069; Thu, 25 Apr 2019 21:36:21 -0700 (PDT) Received: from localhost.localdomain (bzq-79-178-247-46.red.bezeqint.net. [79.178.247.46]) by smtp.gmail.com with ESMTPSA id h5sm3467088wmf.38.2019.04.25.21.36.19 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 21:36:20 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Fri, 26 Apr 2019 07:35:45 +0300 Message-Id: <20190426043558.6888-9-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426043558.6888-1-arilou@gmail.com> References: <20190426043558.6888-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 v7 08/21] 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: 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 Fri Apr 26 04:35:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1091267 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="uwg1RQYs"; 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 44r1tn14v7z9s5c for ; Fri, 26 Apr 2019 14:54:41 +1000 (AEST) Received: from localhost ([127.0.0.1]:39186 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJssh-0006bu-2e for incoming@patchwork.ozlabs.org; Fri, 26 Apr 2019 00:54:39 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45317) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsmf-0000dE-E5 for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:48:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJsb3-0004Rr-Fl for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:26 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:40707) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJsb3-0004Q5-9U for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:25 -0400 Received: by mail-wr1-x444.google.com with SMTP id h4so2438658wre.7 for ; Thu, 25 Apr 2019 21:36: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=6OoH0VZvs5cN/77prjtAmvXUSegJODVLc//0yGYVjjY=; b=uwg1RQYsgwBPEOxFTvFOaDqh6ZEi2lTBJyr+fRp43kx+QeD/E0S9N4UfiFgLfrL9ty vSLK160mzxUZE6ULWZfQi1sHyAjFGRWkhYQDPKGk+mF3MiirK3XqbVCTSIsUoGOaCISW QixASgsdtwMG0jaIp7ZYtfvwSDvL8JuiCD6gcE8//S3tXhziW2KKzY+Wylsv/UK8kFl/ BdqLYgNlXqnRebdxU4oxO6RuJNNWESfPsBoI73GbhrOB4jelr5nMeOYgab5l9ce5+dcK spajNVfD5cgR/P9HoKY+cYr+BABTYK5avc9x+4q82M8l5ndjzZAHBjq/QxtqMi1W2z+N frZw== 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=PqE9AMNPiAkpUtyJuBnEmjuTBTF6WqGTSHvxKC/Djkb4gjvvvXjpudt0NQIqrYmsDZ iFmPxGee4WXgHz0fwFgqfMe/5xc7NJtq83m2BXmUcJ1Jr2ymDwmTEOlUTtStASgfSkho Tj/vlElM+LRATJn34aKJ6nPGmSD1AQAZ9jYwtFavI2UFfFsf23y5ck5r4XTgV9HZjARG VbA3C5cZ+D1bJW814Pcj99KI2tE8cd7Zk+TBYSanJHlRSSxEUThoOrvZejfzvU09BXxT egi2VwPKzBbB+otD8ELZBkUqKYdLsIOM3H6gLjVYcxFkxAjuWb2gF4WJiwM0GrYITqyR eFSg== X-Gm-Message-State: APjAAAV7WNUKxXpOkxzTzid9N6m5ffdI4pZHxNAX/K7YGNkpUJCRSaeT 7OdjOZkaq4lyJRDLWZNoxl7ztV0z X-Google-Smtp-Source: APXvYqyDOwg9VcXu3GWfwvVg4nX+8CwandTAo9p4prMmapUow+j7CPrCT/E5eDL5+I4Q47WPX17Nfg== X-Received: by 2002:adf:ec4e:: with SMTP id w14mr5479137wrn.53.1556253383464; Thu, 25 Apr 2019 21:36:23 -0700 (PDT) Received: from localhost.localdomain (bzq-79-178-247-46.red.bezeqint.net. [79.178.247.46]) by smtp.gmail.com with ESMTPSA id h5sm3467088wmf.38.2019.04.25.21.36.21 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 21:36:22 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Fri, 26 Apr 2019 07:35:46 +0300 Message-Id: <20190426043558.6888-10-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426043558.6888-1-arilou@gmail.com> References: <20190426043558.6888-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 v7 09/21] 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: 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 Fri Apr 26 04:35:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1091280 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="kgmoqyCI"; 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 44r23N2wpvz9s47 for ; Fri, 26 Apr 2019 15:02:08 +1000 (AEST) Received: from localhost ([127.0.0.1]:39322 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJszu-0006QD-7O for incoming@patchwork.ozlabs.org; Fri, 26 Apr 2019 01:02:06 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45320) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsmf-0000dG-Bz for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:48:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJsb6-0004WP-Db for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:29 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:43048) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJsb6-0004Vy-7S for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:28 -0400 Received: by mail-wr1-x441.google.com with SMTP id a12so2410826wrq.10 for ; Thu, 25 Apr 2019 21:36: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=C5wVxSSu9B3yjrVL1kbdSqghY5biwyr5/S2ykkoUubY=; b=kgmoqyCIYRjiJsanjHfvhXOXnK9d/A+YXxNeDoiohUdikM5ponc+AdUmcqfFV0d9Lg wXhed/bbYuy4xwLvftaNx6EnFeVvc6oEnvdPRd3Y7HZX18CN2BpyU1DEw379xd3JMmg1 IGEeYM7fAFj2x4xKY7gKDli7mNC5WktvIZSnrzp85E0/d+pLsP7Kfzna/PhkmnUK2hix gTZf9nP4UFExxdIPi8edUKmRf9ghY3p0ZMKtmYCsJh5Wv/KXWBoZIISCilrogmYfr8hA +jmTPHmVqXHGl2RsJPWyUIakReK9aLJKXhBS4o+cEb1/fUsG3Fgmlk5BG5cJYHsPd2CY /Y1w== 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=ucJZAnULqCkGZPcxuPQZo+JvQHJEawa8+fGQLTwH/QPN6EPG/yxLKwY4Q5zANjC5Wg VV33oCAblT6WQtVL5bNUtHU1VSQUVY/tdoskJolsCMgmO3Mh2qXrZhj5lXS1zcm8JrKQ pyARvtnThfgsSd7lGEeN/+JMr9bdj5hLDOzgC42JJA16JnN80n0TAKV/mHIi2LFOkiaU /wSvYKHfdVc4y8l4b2+mlo3bGNvxFgvg5G/RfBCCpPB8BuO6VAqDg7NOJYLL32Mf6bzY JYdiByYM3vSaMwkF+K+11FcltnpetO6s0IdPNB9T0v+5W5d5hMHsjdfTed/JOQPTmwni bDjA== X-Gm-Message-State: APjAAAW9KeNbRIrQajgRYztiP8Z8wnTsuLoSxd2ExeO+pTSwz7UYdGcY FQe2ul9+DVOMMhvlXqqp6+v/SpiU X-Google-Smtp-Source: APXvYqx+6F/TJJBApYN5dKwOVuVNDH6IEpPXTv0lzsS6nGUEOONWZJwyF8rXeknJGbQrgFfAV+oeGQ== X-Received: by 2002:a5d:5542:: with SMTP id g2mr6028705wrw.58.1556253386319; Thu, 25 Apr 2019 21:36:26 -0700 (PDT) Received: from localhost.localdomain (bzq-79-178-247-46.red.bezeqint.net. [79.178.247.46]) by smtp.gmail.com with ESMTPSA id h5sm3467088wmf.38.2019.04.25.21.36.23 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 21:36:24 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Fri, 26 Apr 2019 07:35:47 +0300 Message-Id: <20190426043558.6888-11-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426043558.6888-1-arilou@gmail.com> References: <20190426043558.6888-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 v7 10/21] 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: 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 Fri Apr 26 04:35:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1091265 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="kQG8rNwv"; 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 44r1tT0R6Jz9s5c for ; Fri, 26 Apr 2019 14:54:23 +1000 (AEST) Received: from localhost ([127.0.0.1]:39178 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJssN-0006Ik-Qd for incoming@patchwork.ozlabs.org; Fri, 26 Apr 2019 00:54:19 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45317) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsme-0000dE-B3 for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:48:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJsb9-0004Z9-Fi for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:32 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:37174) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJsb9-0004YQ-9b for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:31 -0400 Received: by mail-wr1-x443.google.com with SMTP id r6so2467610wrm.4 for ; Thu, 25 Apr 2019 21:36: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=7xWdg5J6VC6HFdEkoiuvTsAB/KgJAJp/2excD9374G8=; b=kQG8rNwvX5+JSjdSd7ULxS5P7o8KX15sYOC37obpqWq8Eo17WNd7qZT6PQTJIIcLCi YDFb64zcNqlB8FsBfVNA2k/CLOTTu+wEs5+b8qdYL/nnf9VjvAcWz9CkV+plImk59BPt T6zn4Be4KMAzQrLRveyqxaxqcStg9JDzUyMcyAdhIec8EC0lrCZaSGTYaED4F87QSqr+ TqiJovdJZpwlqY5KcHuXOQM4wt4P4j0KXeURwDVqDM3VrBQEcqBWSfIyHQJrDSB2C5gh +AOSBdz+cCmgo1xiPCYe10Mw1qqPIA+0c83JzcN1inrUBXx80SiZ5Atw/kbkrO2SG5uf tvAA== 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=Qw2swhT6fOfvPT2yQAPVq74VnkmQJunRO6V7o4/x1cT4pXZsqigQu8N0ho6pGZNIr0 IRyc+DZIr/JKQgt0GvFoY4xg0co1ONOL8nnoEwB2IyVaQeGLEvV/86FOqrMtJL0dwQeC 3wNE8sXrGu1e/c0TI5Qh4ACDUnfFQZtdjKbkuluSEcGisJ/8w72EZe3ye7lK6xDYJoq6 kp4CdZw5Vi+26FCb0LNCDDaDVL+x2QI9RZno4CmSuSIgVeiSR87hlyE5SZisCyBbvY36 xPNvwVG6JrojTR5theedxVPp7V8y5iEyhDR6oSoZc03zvsIO8Km0f9xkZ6kHBssevcQi F/jA== X-Gm-Message-State: APjAAAWscQGelzJJ92eIoZ1XsE0lJxc09t/sdQ9r/CaFeYKMCtfoS6xM KsHdusDAEY2peAiKlFycY7d1uC8H X-Google-Smtp-Source: APXvYqyFGUmKiTaEjpdDocJzPC/cygweHiSyXbDHhGf2fqS/TiEbK4E7l/NLcU1kZ+VTXfzXMmjevQ== X-Received: by 2002:a5d:5382:: with SMTP id d2mr17099333wrv.78.1556253389471; Thu, 25 Apr 2019 21:36:29 -0700 (PDT) Received: from localhost.localdomain (bzq-79-178-247-46.red.bezeqint.net. [79.178.247.46]) by smtp.gmail.com with ESMTPSA id h5sm3467088wmf.38.2019.04.25.21.36.26 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 21:36:27 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Fri, 26 Apr 2019 07:35:48 +0300 Message-Id: <20190426043558.6888-12-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426043558.6888-1-arilou@gmail.com> References: <20190426043558.6888-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 v7 11/21] 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: 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 Fri Apr 26 04:35:49 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1091263 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="vUaSGe+M"; 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 44r1qg5CsKz9s5c for ; Fri, 26 Apr 2019 14:51:59 +1000 (AEST) Received: from localhost ([127.0.0.1]:39160 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsq5-0003wn-JY for incoming@patchwork.ozlabs.org; Fri, 26 Apr 2019 00:51:57 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45320) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsme-0000dG-Ac for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:48:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJsbC-0004bb-MD for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:35 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:41406) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJsbC-0004bG-GM for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:34 -0400 Received: by mail-wr1-x443.google.com with SMTP id c12so2425687wrt.8 for ; Thu, 25 Apr 2019 21:36: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=WRCcpUzuoRAzUaN5uQCeSKLXRQ6/9wuQJBWFZBJ3jI8=; b=vUaSGe+MhCI7l5636Bm8JfibJnq1VOcnhKNBqSPMVPPP4D53QiKe+15sR9DRDo24iM xcH8aie2UA//L/m28rj4WOO6803l4S5FVcvZGMzkl5X2PYxrZvgvQ0kcdpNn1xd9eb3t vYy1Dd4vizlzXfntIo50OsD4QL1b+Ik97w9VBk3qWxyD7cLIKa/AlV/tsbKKXGxjRiWL QqoME/GFyF/k4dJCJflMtAvjMOC0CBlu8a38KsSAiT9rwQTa2V+UgGtMw5NxUcs+YWNW jUEBqFbl64W3zg3ftOOzS+YLa6EKvwVoDuxt2Z7pN+/pnIxY5PYOFju38MqT2X6Ch53T ezvQ== 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=S1tZlbkHQTlFS0Z+mqNn9Bv0DY7y1MhcP5qeI2inH4sji3gazaUt6qAQgxVTr6w4/V Eu+LZtbEhzmluFPsueL5wIt2w1F+oIeikHQtaYIPAwejC2vCZa4aLzE+3IC+G3mfzEre vkjmzOlcqOw4OiM/KXe326SbKzLdKhmmIHW+PVbn3+ZqHmlh0ptj7HRHRc+xlNxXfHTA F1pLcE7H1PvWbN6tmd/8C6nPkYMlzjwn4R9Qo7gVzYypJNDSwtMqOu7OKpfJsMHqlB/h gpdCbLlHmS9vFaAjBN1GtcbbykWiZ4srMIc+hoKyi55oOmlGPWrBNBeq+uBRtftXTO5X hUfw== X-Gm-Message-State: APjAAAW7WTDsKtJhHqdR12wrp2oSBeuqmPDHLw7U6VfkzKJB4yJijIUh pG/VTvPM25+CspPRLQ11RiX6yAWO X-Google-Smtp-Source: APXvYqxUmc5v841MWHF4hhQA8hqXvhX2YJjjeDx13MkLjzzwO1XPyXUIJSoIhbv5wD9J7XJms8f8Kg== X-Received: by 2002:a5d:4684:: with SMTP id u4mr5228849wrq.33.1556253392657; Thu, 25 Apr 2019 21:36:32 -0700 (PDT) Received: from localhost.localdomain (bzq-79-178-247-46.red.bezeqint.net. [79.178.247.46]) by smtp.gmail.com with ESMTPSA id h5sm3467088wmf.38.2019.04.25.21.36.29 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 21:36:30 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Fri, 26 Apr 2019 07:35:49 +0300 Message-Id: <20190426043558.6888-13-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426043558.6888-1-arilou@gmail.com> References: <20190426043558.6888-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 v7 12/21] 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: 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 Fri Apr 26 04:35:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1091261 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="FXTZ8XPV"; 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 44r1qJ5BGrz9s47 for ; Fri, 26 Apr 2019 14:51:40 +1000 (AEST) Received: from localhost ([127.0.0.1]:39148 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJspm-0003Ns-ID for incoming@patchwork.ozlabs.org; Fri, 26 Apr 2019 00:51:38 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45317) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsmc-0000dE-Bq for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:48:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJsbG-0004hO-6t for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:39 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:39838) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJsbG-0004ff-0X for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:38 -0400 Received: by mail-wr1-x444.google.com with SMTP id a9so2450912wrp.6 for ; Thu, 25 Apr 2019 21:36: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=brvpFyYDw1Z1o2sLMNd/sMXNZo4TYemLFYCJt79OgBg=; b=FXTZ8XPVS8D4pT7Cl+s3Qv6byaZMDwBpVhPZgTsGh72pNVfM+xxTBxYu9c/o0gGG6b rpoyn2liujoAXU5N+9jRcCz0YkHKWprYwYt0+VS7BvykmyEoRkU5bsYy28vxMuRrHBx5 7c6mRui8gUJRRwDnLBG7WqxKD0NY9w7C/0bPL55o9aMdBDXMZv2d+sKtEKnjPhp2pz57 ow3DC1hCMN7BCBM8aJQ5aQbmZV299OJ1JVJGp4yhLDCCDXv3c/AirwajsRZ2q1D4yEGj JX0Lgc9796msTOf7VyLADLRaajQdbGPa/L5KUbJjinCIBTWTIhpXjTdvsTqO4rgQ7/H3 C0nQ== 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=kX+ODuAvCyCN5lL7kJnO08q/0nfQifyOvUVLTAKvQbeU3vWjPIeWiuuY1iOaH5PguL hueBLqDVvAiPuiddR7bmByxjMnFiZpdDah4rJ2f9Pqkz/oV4CmAb370S6yAOaedgYxLr IyMCiO0RI11uV29cEwpvengrIe9SQVplKNYj3GF90kYBsQvBQ/td6Semzid97w7/SrCR ElWu6nj8szY/Umx5I3kG6vbgiFo3y0CydlMKAiw7fv7OY5CH+v0we7/uLzWvMqgZKrgM zJNR8/3QkxVYdE+xd4+ZHtTUziUOlloj89OlvY2tE4UvDHF8FaGejmXq2TRPqK7lWlED /AMw== X-Gm-Message-State: APjAAAUak/1kGt3XcoUsfMm32W8O1ny58Gd3okQjkMqIyRdTCTe3Y7xW 4WtYXAedqkOQxKmmaf0rkC+xUOJi X-Google-Smtp-Source: APXvYqypD/bXasoSh60qqJm5uUQRcOsU0iDBc6IOBVQYCDPCSdNt/12J9JMDUfLi8MTU+t/FfbEHXA== X-Received: by 2002:adf:e591:: with SMTP id l17mr2252727wrm.238.1556253396328; Thu, 25 Apr 2019 21:36:36 -0700 (PDT) Received: from localhost.localdomain (bzq-79-178-247-46.red.bezeqint.net. [79.178.247.46]) by smtp.gmail.com with ESMTPSA id h5sm3467088wmf.38.2019.04.25.21.36.32 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 21:36:34 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Fri, 26 Apr 2019 07:35:50 +0300 Message-Id: <20190426043558.6888-14-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426043558.6888-1-arilou@gmail.com> References: <20190426043558.6888-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 v7 13/21] 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: 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 Fri Apr 26 04:35:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1091258 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="SF69tbtu"; 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 44r1m539bsz9s47 for ; Fri, 26 Apr 2019 14:48:53 +1000 (AEST) Received: from localhost ([127.0.0.1]:39092 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsn5-0000fw-5R for incoming@patchwork.ozlabs.org; Fri, 26 Apr 2019 00:48:51 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45317) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsmG-0000dE-8i for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:48:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJsbJ-0004lK-11 for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:41 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:37710) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJsbI-0004k6-R4 for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:40 -0400 Received: by mail-wm1-x344.google.com with SMTP id y5so1351800wma.2 for ; Thu, 25 Apr 2019 21:36:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=b1bpFqGwMibMAfq1pbDbHkF4Xk3yQKA0SG1CtWad0g4=; b=SF69tbtuEDfg+zVkwn3CyXSc7922uL/xeUTg2YwU2RWtPLiahhSeWdg7vTicTpoF/C lFxvg6MxTz1aqgpaTj+RlrkdR4pj96d+ja1btTuhI4xri/WdAiBTYaVksB90lfYsyREJ pYMZRK532vLySjDfA1ok8oH6wePv7eb7VlNLJuraxhOaPo8PGTSB/HEMx5OakAFBWhV1 gZifn50K8LG6hRMt7s1dfHzN13fVh+hGVC3ABmp83w+buVz8eWfiKGlUMFpL7miTyQnb irU1W1V/D1ah0ExcRFy2wxHKOsQ9qY7Ps+iOAPEZhG1nrn0hs0iULJLJ+OrGKbKEl3sY SAYQ== 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=OpdbUNzst2os4Hzpas2y7O2+n/k6EG6Nuw9UPazw3UykTaufn5jsN5l8bYFVG8CJsM HTTwvlKX9vvbBZdQVC3D3yHhlUn8+BZk8ZN3ClBaFLnIHa4ECQCn0rzjCsQsjSHOT8vF VrEGhsJ1ekgzXXKmlSbb09jdpve8+8ImS64QJN/f8Qijr9UtPFt+vf6AsimMRbEwglhn Ksxcwvszj6LXtG+XS1AFPVhVZXEMiLl/MZ/09cueySHhywm7EULBl1K+i6/ZxwJQfZFX uhA4xeBnJrLB8VQROgvlnsNdkTpkUfTh4LlUXvjnFtO1rJVjdtwI/SoaIMPK72Pzy0Xn YRhA== X-Gm-Message-State: APjAAAU9c20FOZHZooQ7J2rpeHTv3E0Ry4MN3m5b7kVymRERyP9X13+8 laatLTXt42UxdXiw5hezvR2CU5g6 X-Google-Smtp-Source: APXvYqzOaBgVLX8/6c8SKgeDQv7EqNAdkemjvAZwCtNWrHPqkDAuRhldM4ZoW3o3pM8xqqdHv5qdFw== X-Received: by 2002:a7b:cd93:: with SMTP id y19mr5830979wmj.113.1556253399095; Thu, 25 Apr 2019 21:36:39 -0700 (PDT) Received: from localhost.localdomain (bzq-79-178-247-46.red.bezeqint.net. [79.178.247.46]) by smtp.gmail.com with ESMTPSA id h5sm3467088wmf.38.2019.04.25.21.36.36 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 21:36:37 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Fri, 26 Apr 2019 07:35:51 +0300 Message-Id: <20190426043558.6888-15-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426043558.6888-1-arilou@gmail.com> References: <20190426043558.6888-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 v7 14/21] 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: 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 Fri Apr 26 04:35:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1091273 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="V1fCA0Bw"; 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 44r20l6k3Tz9s47 for ; Fri, 26 Apr 2019 14:59:50 +1000 (AEST) Received: from localhost ([127.0.0.1]:39263 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsxf-0003qJ-08 for incoming@patchwork.ozlabs.org; Fri, 26 Apr 2019 00:59:47 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45320) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsmc-0000dG-BY for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:48:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJsbL-0004oQ-R5 for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:44 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:55978) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJsbL-0004nU-Kc for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:43 -0400 Received: by mail-wm1-x344.google.com with SMTP id o25so1976540wmf.5 for ; Thu, 25 Apr 2019 21:36:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/kC4Ra5FAbXCGpLaIRgx76fPd1eNM+Za2+9T+4B8JSs=; b=V1fCA0Bw1g4Dz9vUtQafDvpP7JuDbXhFc3NII9oIvvMmtcoYEBKuE+KmkGBVAVHuoo Zyls/3mCeWTTPOIhdz1HvqJni7ogQu3Pfhv24zapUH+4tjcSR1aFvQoCzafWqquxmozo CgPtN6qpgAzMiziNQZh9IVHPgB19HbRrga6V1/d6galA9Yi9PrDbc1fOYaRe4BNQtAk6 0eedBz6qGs6y820AQFxeJkmYHM5Q/jJzn7qdcH1Foe91hDNbJXIz7gShjarvIaZgFH72 /5ppw7PUdx2xh/977GnZscytTC+9R7XcBr/ChKWW6uyk1MA2a+fFNKIYFwAXPefd/a/U 7TaA== 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=NabG8ykqLev5ccwiUBGE8NUXAf7F0u74NU56mhcDSl9GcsU7HDZrTxxm9iqYjjUx0q 3K+ItY4FDmFNGMrCkmfzzSv2B1Q9StvpQvuQ5o14bJzKnfmb8TtvUkWWSusRzORTWox6 Q7v8NtLdhDkjbf3IPl6mNy3q4ulBnZeetts2wox7B+qEUzeFsMe7bxlfv1L7MOY4AoRl os1oQQEwYzijkfBri0d/tcW3x+MxV9deHNXzK3BoVIr271P9TaO47TSZs+9OewAYE+wh jujUgluQvZWQNO9qz2sMs9lrNFlcoFoN65/+bf+N0jTJJZtoWDorRsDZprs8w/+Udu5x GKhA== X-Gm-Message-State: APjAAAUD+irlWSkq6tAGrto1ihNN7R7Gek+Pw4ChU4sHNvW+swh2WIuq 66+YG/vLinUaqTbYfjWpzEo+FGoH X-Google-Smtp-Source: APXvYqyVKwdmOpdMPQCkcOfjIZ7TmSxXjCL+f/4OkwfFvPQ9OEPqA1pfBEs9uSMSvzp8Rw20ZkkfHA== X-Received: by 2002:a1c:a00a:: with SMTP id j10mr6071987wme.15.1556253401965; Thu, 25 Apr 2019 21:36:41 -0700 (PDT) Received: from localhost.localdomain (bzq-79-178-247-46.red.bezeqint.net. [79.178.247.46]) by smtp.gmail.com with ESMTPSA id h5sm3467088wmf.38.2019.04.25.21.36.39 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 21:36:40 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Fri, 26 Apr 2019 07:35:52 +0300 Message-Id: <20190426043558.6888-16-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426043558.6888-1-arilou@gmail.com> References: <20190426043558.6888-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 v7 15/21] 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: 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 Fri Apr 26 04:35:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1091260 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="HNzEwa2N"; 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 44r1mX09Gyz9s47 for ; Fri, 26 Apr 2019 14:49:16 +1000 (AEST) Received: from localhost ([127.0.0.1]:39098 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsnR-0000uL-Sc for incoming@patchwork.ozlabs.org; Fri, 26 Apr 2019 00:49:13 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45320) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsma-0000dG-DV for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:48:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJsbO-0004pp-1H for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:46 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:40454) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJsbN-0004ph-Rg for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:45 -0400 Received: by mail-wm1-x344.google.com with SMTP id h11so2331908wmb.5 for ; Thu, 25 Apr 2019 21:36:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=EShIhnyclfVo57FnSdW5zX6W2mQ/1wfNmEis7PfWfkY=; b=HNzEwa2Nxqpej16GQ5d2qNjgFjBlQH0uqqIPgcirFaL34jxlcAFZ/bLLU/zT3LDq4u JuYTXWUGL8yTCXyTPLD9WnFyRxSCEgEL2K7w23ZkzwhJ9YdL/n++xMLWoTIr209QVdol 3W2F6jg+7iL45iSxs+4SBW2FoH8D2IdXW5i5awh1P3RcX9Q527ccXw5dlB52gWIGZy/M pyauS1V7RDC3hCum1SenQb9UI9c/ga5eP9RFF1sVR/XGCZlhgOqY49fDktQfYdcWDlpb yjTWR5Cv1ie+udoGodF3VWdef7dPd7isa1d7T7jpA6XOx/jbLIrheP2PCn+V9VcsJniq ZVGQ== 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=CkfHkmLdS5bAJrW2yiqXi3bxc0gNq7DK7IbKF4bn6+T9Cp5IOTiIpBE8tSMQZko4sE 7AKP6frMMWvX+l7UMMMYtdJSGtI2LCOk00t99Ig0Qh3GZhSTPK6VsON6eOM/9P5TJTwp TxcSW2xtFAGlqCxtTZ1OfnupNFFJ2Gh/0H8WWY9IOdjIevkyhNMvCAV5KyFrdR/RAGws CKmegzDQZlvWgiGXFJ0jcP3iAYbHfr23Xo32OaurZggChwVveQhNQGkO5GBdPRRyirly pyqKm81i4pleoXcP1wo1fJDkMb7RIiLcnhf0fV1XVDIunUqii+9oBDgG7WOhCA3zT2/b yTNA== X-Gm-Message-State: APjAAAWtqwHS9qEAhprhR4S4MxUHFD1041QRoJsz8+r2i9cxZPke15pA okuLpQuSZPVamDNrGwx6sPeYrXSz X-Google-Smtp-Source: APXvYqwBLp/t7BAGM6ZRRHdjlu3iJYxA4T1kyxdub4rArJXGfgUbmy5XS7EH4JHyaFaOv8AmHls8Tg== X-Received: by 2002:a1c:1903:: with SMTP id 3mr5959439wmz.103.1556253404373; Thu, 25 Apr 2019 21:36:44 -0700 (PDT) Received: from localhost.localdomain (bzq-79-178-247-46.red.bezeqint.net. [79.178.247.46]) by smtp.gmail.com with ESMTPSA id h5sm3467088wmf.38.2019.04.25.21.36.42 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 21:36:43 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Fri, 26 Apr 2019 07:35:53 +0300 Message-Id: <20190426043558.6888-17-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426043558.6888-1-arilou@gmail.com> References: <20190426043558.6888-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 v7 16/21] 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: 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 Fri Apr 26 04:35:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1091257 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="JlZ4n1Wp"; 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 44r1m3686wz9s47 for ; Fri, 26 Apr 2019 14:48:48 +1000 (AEST) Received: from localhost ([127.0.0.1]:39090 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsmy-0000do-Bz for incoming@patchwork.ozlabs.org; Fri, 26 Apr 2019 00:48:44 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45320) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsmG-0000dG-DU for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:48:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJsbQ-0004w9-HL for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:49 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:41407) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJsbQ-0004tm-AY for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:48 -0400 Received: by mail-wr1-x442.google.com with SMTP id c12so2426329wrt.8 for ; Thu, 25 Apr 2019 21:36:48 -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=JlZ4n1WpFODLSq81e4QfOT9kqk5GGHSTvRCYDIIP9SNXVESXET8lU6++oPTq+YbpmG Di43CkmW6KORChFLgZ2DWRs9sCwhGbgsS8A7Qres+3YvLoVlV1y7bAAxOxA4INzM1zhC GRmpBXHZvq3P5esqDiR7VtX9P6oeAdW63L7OOyQta78Ufk8euitH0yyoFFqOqTBva1vz OfgwQkJmvu7mh9ttNb/BBXQeo0q/xbb5SCdj0jhC3+jkTHPnR62/kUL+i+yAd+sOA67a JUmqw0wJolj/YHMtZchlkMmqd/RTtVH8LbCcbNsYWDPIg01qyMGe4+JvBlfkxYRAHmtG x7Ag== 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=SIFYnPewSq3WVHsNHfpiQR9mu9yzBDd4Cpczi0Q38vPJT/xMAY6Mhj48sG81aK2HEb TtzVZsx/2G7QC0nzrAPY7iZqTChCSWafh3QjRkxqKLbMWVNwO9RHw5f5obia1aIXXsZ5 hWRCKSKujCs0oO/iE8KGqk5IV0+R7sBxFfakkx4LjyRpsb/o09TAin7BqD2mKJt9tLzu aTNgR2oyQ+qutpk1uRMu5mT596+prWyilyWxivrAz/Q1XECyOwEjT+7cZ0CKdIxaukCh VApRoyrsvTUvkWHxdd4u9irqqV1PdVp8vIS+eQ0b8lMYe5Zs7NhZQ423HmX/WoJ2VrC1 vjBg== X-Gm-Message-State: APjAAAX+6lSMrVPA/ZvMrkdCwj+zK9yeYXff43hjz49xHiaxpfbl4gCS NL4pXlWdsXtE8TR3rKtVsjDoZSW+ X-Google-Smtp-Source: APXvYqxkav1dQsrKH3H1MdJIaTMXAuvYUrLscxe80SRO+xPUgHT/1mgxxrcPIwvn6R5ymRw/mqpNgA== X-Received: by 2002:adf:f64f:: with SMTP id x15mr8689045wrp.202.1556253406489; Thu, 25 Apr 2019 21:36:46 -0700 (PDT) Received: from localhost.localdomain (bzq-79-178-247-46.red.bezeqint.net. [79.178.247.46]) by smtp.gmail.com with ESMTPSA id h5sm3467088wmf.38.2019.04.25.21.36.44 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 21:36:45 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Fri, 26 Apr 2019 07:35:54 +0300 Message-Id: <20190426043558.6888-18-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426043558.6888-1-arilou@gmail.com> References: <20190426043558.6888-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 v7 17/21] 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: 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 Fri Apr 26 04:35:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1091270 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="jMXsBnl+"; 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 44r1xf2LHrz9s47 for ; Fri, 26 Apr 2019 14:57:10 +1000 (AEST) Received: from localhost ([127.0.0.1]:39237 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsv6-0001M3-36 for incoming@patchwork.ozlabs.org; Fri, 26 Apr 2019 00:57:08 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45317) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsmU-0000dE-Ol for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:48:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJsbV-00051a-V5 for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:55 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:33960) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJsbV-0004yY-KG for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:53 -0400 Received: by mail-wr1-x442.google.com with SMTP id v16so48715wrp.1 for ; Thu, 25 Apr 2019 21:36:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=6XppYMRruE5laPQu4tuOEJD3R2TgHj9UJ0kj9FF2Z0o=; b=jMXsBnl+4g9ieIMeI1wF6yCnGHkButhGSRgzUCs1ac3irgzEgQVyJD+ahFRnZSMEXE EXOoEN5DZNrv62j0CGkJjtK1qxnSi2ozvbaOxPFsLUfE3X0dDj3Wts/gKakP9E66CqsH zdDW8peeg8XpRYtRXiXnVp7Lu2slUqje5nbBFhUxM3tWXPQWwgDGAFVkiPfERv4tnOjA grZ+3G0+7OlWx7ZbRq4bQUokRHNKQhxdsfJ+VNusWAu8inNV8L035sBFqoAdWC9Bu/zF p/bfpB+GZa+aD5BJDY4nyuX7mWiHDEjHCXCmXEp3R4T31XYDInPI4Atn2vAjxrSs7G8k KERA== 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=qwXmFEHe71N9vsA5vMWfi6NwwThWsYBYghmuhvQPvO1SGhiJOekzjAweeWvSgu9Ghb qR3OEsQqDzYmSvgErEkbJWDRhaOvP+ech8raqbwuGzDXhDeT6sw4Q8yC8xK7/DxCHQN+ t+SbMj2N1/z8E+fzGo2iB2UDmU1JLTBwI2MqvKGMclPWs/0hKzuvnHEEYd5B6XRTuTwb uVj7Bc3n6pfalH8PR2gqOgN/YtvX9L/vzx/BuSBB4EMtb+O2qYcZ9D4IJjT+pHxfST+p JfznVSKUHx65O3XD2ywt7lRfdzu86HWsJhrC9B11O+L5SQOMHqbrCxuO12/8PkXn0Ube V0Hg== X-Gm-Message-State: APjAAAWVZnv0kT5qD24yJWsspkQagTiAR575uwEqgLnkRevTrSID0Qlp vG0J7OH/sPzyvWYW7XEB5RlFNWu/ X-Google-Smtp-Source: APXvYqzHrX3GsopZlujSXtz6MwB9UnqchUMgsG8IBCrXpFQZD6ugmkoW58zYcNR8AMUOdua9aXDBjg== X-Received: by 2002:a05:6000:104:: with SMTP id o4mr901979wrx.106.1556253408737; Thu, 25 Apr 2019 21:36:48 -0700 (PDT) Received: from localhost.localdomain (bzq-79-178-247-46.red.bezeqint.net. [79.178.247.46]) by smtp.gmail.com with ESMTPSA id h5sm3467088wmf.38.2019.04.25.21.36.46 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 21:36:47 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Fri, 26 Apr 2019 07:35:55 +0300 Message-Id: <20190426043558.6888-19-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426043558.6888-1-arilou@gmail.com> References: <20190426043558.6888-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 v7 18/21] 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: 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 Fri Apr 26 04:35:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1091266 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="RfWqfyN/"; 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 44r1tW6jN3z9s5c for ; Fri, 26 Apr 2019 14:54:27 +1000 (AEST) Received: from localhost ([127.0.0.1]:39180 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJssT-0006MI-QP for incoming@patchwork.ozlabs.org; Fri, 26 Apr 2019 00:54:25 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45320) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsmQ-0000dG-Ls for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:48:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJsbV-00051f-Vb for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:55 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:55978) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJsbV-000500-KW for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:53 -0400 Received: by mail-wm1-x342.google.com with SMTP id o25so1976920wmf.5 for ; Thu, 25 Apr 2019 21:36:52 -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=RfWqfyN/Cw7pOgOhJ/VJ07jo2awjYfHJZ1SJdCxvaOfilMh7iKmJA3zEidiBwH2K7l DDokAraT/ykto/txQIn27XiLRh3LmTp6J6Zrd05ubejeclwPBCSC71FLNvAkpA8YbfjC HB/dwEsFZw0ZUFuhmoWHnxez3sZ/j+xBYkNZqvsG9yjEdpHkfI7fIYWE47Fv2l4EsgYy h4Uaw9/d7pjxVddGFNQyR7wQscYtERvaUnM78vTg5/vHX1pBZN7Jx40YYvWAKPBcaVMl Cj13eUjPJ4n+OeJAbv+GRngqVW/naJGIAakF0oIpCSErF35r/u3RnZ/dONrSELO+x0xU dYLg== 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=sGETZ5yOD78hKbiv0C6SZmL6KNwkJ+MMR6akgcUXmFpmHgkeh15vXr7COtT5tDpJ7O MNfMWK9S8Vn2stijk9vF++zcaeXQdiUnIaRF7BdkOP38D5sMe9MUemq4EQ6HULDg7L5n FdP5LHKcMp0ulfyK8ftVFhfw6A5lhgWypIESt1x3taS3gZ3DtFr72YOiQbnK9E/fv4Zi kh+1r2DzW4wLNJrzwTW4eFtnvyQ/uoKJ/dwn7BnturwSYVHkI1ol9a5/6H/eGeG4sNM0 qKynLV3cNwksvfB5qd8TZh95KtWMbJmumPKzE8ScvYcggft0VaFWUM1V9zX3EuaxaLoc Y7hQ== X-Gm-Message-State: APjAAAUMofQ8kZETNs4I/V9gp2CmdfEu19IUrh1G1bBbfUGI7HK8reYm YnGjpWfXh2iZkWRsW/hhCuypylrS X-Google-Smtp-Source: APXvYqxLcg57tph2cT0oxYCCYdu9XwBkgHtNQHh+glHXPLyNxgmKqfX+3A4FGey6Qq8TPQr7hgPEPg== X-Received: by 2002:a05:600c:d7:: with SMTP id u23mr6411802wmm.30.1556253410716; Thu, 25 Apr 2019 21:36:50 -0700 (PDT) Received: from localhost.localdomain (bzq-79-178-247-46.red.bezeqint.net. [79.178.247.46]) by smtp.gmail.com with ESMTPSA id h5sm3467088wmf.38.2019.04.25.21.36.48 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 21:36:49 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Fri, 26 Apr 2019 07:35:56 +0300 Message-Id: <20190426043558.6888-20-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426043558.6888-1-arilou@gmail.com> References: <20190426043558.6888-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 v7 19/21] 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: 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 Fri Apr 26 04:35:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1091259 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="o8jtLmGM"; 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 44r1mQ72Hnz9s5c for ; Fri, 26 Apr 2019 14:49:10 +1000 (AEST) Received: from localhost ([127.0.0.1]:39094 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsnM-0000oL-SH for incoming@patchwork.ozlabs.org; Fri, 26 Apr 2019 00:49:08 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45317) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsmS-0000dE-Ss for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:48:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJsbW-00051t-5E for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:55 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:37711) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJsbV-00050J-VC for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:54 -0400 Received: by mail-wm1-x343.google.com with SMTP id y5so1352434wma.2 for ; Thu, 25 Apr 2019 21:36:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=NvRXYl/vjqrIbJL0BHzsmEe5eGi5MjJ6JeUBkCbtEUs=; b=o8jtLmGMTg/j6FrH5qMGrYRokarNWfduHVYdcA4l3xtFrJBSYzcinmoONSD8seG9QB wuXP+t/2XlqehNvAYQouCzK4pzKeKriAVJ1y/zkVbCy20DQFmu2W81ZOxPcKcfqQ4nvp 5fokp5lUhWW51b21kUDLpdFh6aKM1/yYMPGxTuMZmAIIOzQO7E0GaosfQHcoB8laTKwO sfJ7StEZxVMPZNLBpbT5bqLltehh0cOy/Q64kWxwNQjgHI53xHcNaH+38W7AqGKIlgKQ IjdYboGyD8uYDBGJwLKrZl84x267f5EwjiERroq5m0tqyZa61AxSpvtsAHdq7IxTZDUo ngaQ== 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=q+Gr+gAOgLcv04i27QOs8yn8XQ7JvXWTAe7Y1xSh1HTbOqYkBnBAMrKDYKTfy7MKL4 BwCaEJmy1PXu6RJSluZftV6Z2cpIcuFDk7eTUMSjLjtBDAzAS3HbcJ4NaJoJuD3Wx80g kor8h98Hyhx2KABLywv+rEzgToPYQeM2xrrZ02VLJwJMTCkn4f+88lxfbSuyPoDZs7vi wRFjXt4aXTSl47HRudRxyfot/wf7mn0BIGYQMPxZ0NGmO34MCORgCtWlp1EsSJxoY075 yT/7At01eNcF7m57ZlXzngpwGSD3IS1LATCI+wJ0xfcpXXq2GqkE0rPDo9eDA9Vokd+i CCAg== X-Gm-Message-State: APjAAAUSMKIvhdagi/Otal9VfA+R3NtgbizDXC0h1Z/IdTpVnhJxafOI Vc5dsITO3FSLBe5u+TTwWg2/FTZq X-Google-Smtp-Source: APXvYqz0YHwHacXZGEZGCrgf/kWATQGqcMYEDMdTRX8XT/4inL2vVcroUITGoNCf3bA1lcuLqizuNg== X-Received: by 2002:a1c:7e10:: with SMTP id z16mr6298258wmc.117.1556253412396; Thu, 25 Apr 2019 21:36:52 -0700 (PDT) Received: from localhost.localdomain (bzq-79-178-247-46.red.bezeqint.net. [79.178.247.46]) by smtp.gmail.com with ESMTPSA id h5sm3467088wmf.38.2019.04.25.21.36.50 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 21:36:51 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Fri, 26 Apr 2019 07:35:57 +0300 Message-Id: <20190426043558.6888-21-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426043558.6888-1-arilou@gmail.com> References: <20190426043558.6888-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 v7 20/21] 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: 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 Fri Apr 26 04:35:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1091262 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="L8SqferM"; 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 44r1qL1zWLz9s47 for ; Fri, 26 Apr 2019 14:51:42 +1000 (AEST) Received: from localhost ([127.0.0.1]:39150 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJspo-0003P9-3x for incoming@patchwork.ozlabs.org; Fri, 26 Apr 2019 00:51:40 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45320) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJsmP-0000dG-OG for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:48:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJsbY-00053Z-3D for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:56 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:47041) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJsbX-00052f-SA for qemu-devel@nongnu.org; Fri, 26 Apr 2019 00:36:56 -0400 Received: by mail-wr1-x442.google.com with SMTP id t17so2384999wrw.13 for ; Thu, 25 Apr 2019 21:36: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=PH0hXIwENcqo6TbPIzo2Qw9MFujZWmL0zJ/Tm+4JKGw=; b=L8SqferM1OaybvHivFyxMdAcLXm6Ly9CslZy5z0WQh73gVa9cE/40wyMv4ExL789RK 5WtaSzQrcFMVS2xfj709tWlcG89LAh9qawTg3PvUiwNMwA4skqkApLj5dlFomHB2DJUK vByG2IZ3o1U8Dm/+QYOJTZnDlfXr2TflFmBJ/wO0niQQc9HlbmlqFwrUJ8X3PXmqrmSn qsUottbKJ69i0Oe+AFhp/JyUS9Y/1gJJCNH4CTTWQe4eh3J/yNrPlDsk5VnuAEOLiOXf XGmUuLN912cJCxcW0NdX0cTahspk6SWTTpA/m7ywVndtwNyDnC8WWRjlTX7aBu8iGrpU +uvQ== 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=hoCsnMO0jg+/WmxNTNfbV/duExjbtNtQPWWziLS4opGr6af46qtYTUBNIHvQ6btg+D ++QA3IWxOrDrMTsO1ICn4smZ1P3Ht8U0norVFcsP9hmDwRVuZy7xJDagcxYAnTmLX1AL onCpOf6sO3zMLcKQEMDZ4BWMrI19nu8peGIHavdnKnlSTcVCSwrwzeIKEc+INCNjthO5 g0sRM6/4utt5CBtYIiCacWaAe8mTQa6N35KclgLOQUUL9rQF3lrLWggSADREFi+Y5efT 2SvjZLeLoxKnf6QThn5rbWigOnBa85ztN2LE8EvEE3m2RfCxj5wUbk8tz7E1T/hDWQRC mg2A== X-Gm-Message-State: APjAAAWocVvGKQWmEUHo/HC8G9Ay9Nolae/kPaacprSHNC10LrOQv/lk URhDYdIFDNrP1nCG1h2gpWbV4Nry X-Google-Smtp-Source: APXvYqxjlLyO7t3TccronAZXmuQoA/WHnxB5Hhpw7M+Y9dB7HrxfHYlMSI1Vn0Xc8VlASZQAyWOvxA== X-Received: by 2002:adf:c993:: with SMTP id f19mr2810001wrh.246.1556253414370; Thu, 25 Apr 2019 21:36:54 -0700 (PDT) Received: from localhost.localdomain (bzq-79-178-247-46.red.bezeqint.net. [79.178.247.46]) by smtp.gmail.com with ESMTPSA id h5sm3467088wmf.38.2019.04.25.21.36.52 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 21:36:53 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Fri, 26 Apr 2019 07:35:58 +0300 Message-Id: <20190426043558.6888-22-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426043558.6888-1-arilou@gmail.com> References: <20190426043558.6888-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 v7 21/21] 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: 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; }