From patchwork Tue May 21 09:59:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1102648 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="CL+qgFoD"; 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 457WVt719gz9s7h for ; Tue, 21 May 2019 20:01:10 +1000 (AEST) Received: from localhost ([127.0.0.1]:50450 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1Zu-0005c4-R9 for incoming@patchwork.ozlabs.org; Tue, 21 May 2019 06:01:02 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44680) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1Z2-0005aW-2u for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hT1Z0-0007Ix-Sf for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:08 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:39511) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hT1Z0-0007I7-Km for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:06 -0400 Received: by mail-wr1-x442.google.com with SMTP id w8so17869713wrl.6 for ; Tue, 21 May 2019 03:00:06 -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=HeXxp6ZNbxAIS6ohiuhHmI98E5YPqRc//oGZBvyGF5Q=; b=CL+qgFoDDsCC3mCFauqacZsD9WNXyAFdVIrCwaKpL7zlA2Z1M2DQmBCnPmW0SLY4Jd mgSqb9Cm8szdNjOn3BSjZyITNovXLFZwFhOYZLuaVnbX/Gtpeisb+F7uaxfkK8f02aN5 eQvUITNZg9kQsGTFcqcgfs45dqEMnPcBMnuaVs1xx1C8Df7UuD8/RxM7hjzTvxmefbBz 8RsPlsEbaOdYISpEs2MkEFG44U0wzSDrdz5HyK+E95xbH2mpMcRDvOKO5DGj8cykZUZC mI1RLwSNTD0RpVog5g++wZUUxbCp68qyZDfWHgBel4CjWuGipBEmGLuQqer/ZysftI9w CSeg== 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=HeXxp6ZNbxAIS6ohiuhHmI98E5YPqRc//oGZBvyGF5Q=; b=TOT40CRVJDLF+doBAwRVM6QjeH0+DfK7STit5PmFE7zHFsZYj75auXQbVUsb0T39F4 i5yUF+rsVcOO0CMFOAUGXOGkQb3l3W3a9bgMyHF7gHwGEb0UQEBJ/C4Gfk/ucqkHPGns lLvvDxFwcD/KZDTU9qWvNseYxyQ+Ac5wDK+IxwcZHFde4MyGlw6o+3+RRnsEYt+ByKwd acjFHzgFTtykC4pxHM0jvxT0LJkUsy1cHcSXARvlBPoA687e7/ADIrq9ioSWJmMkQX3K JMo2FfU3G6Wok78yuiN1jv2KJ2uYWbx4trOhVE3E30bpaRitWC4OWISZF4WQAkWT4uad 16tQ== X-Gm-Message-State: APjAAAUeK8Tt4QmrgymjMRuS882yqU9gZSxl1rcDPqmZ5TYSuTlUnuAP cC6LZIQ6RGZZ2bNszxF68OMv58Ga X-Google-Smtp-Source: APXvYqy/SBkO48+OsP2hJ5E6ACi2NqxCXs73UMnI+BkNeBYFBWBUmMCKMPsCpEk3H1JiAWG+cDnf4w== X-Received: by 2002:a5d:4e09:: with SMTP id p9mr5133683wrt.218.1558432805342; Tue, 21 May 2019 03:00:05 -0700 (PDT) Received: from jondnuc.lan ([176.230.64.64]) by smtp.gmail.com with ESMTPSA id 65sm3080257wro.85.2019.05.21.03.00.04 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 21 May 2019 03:00:04 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Tue, 21 May 2019 12:59:29 +0300 Message-Id: <20190521095948.8204-2-arilou@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190521095948.8204-1-arilou@gmail.com> References: <20190521095948.8204-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 v10 01/20] gdbstub: Add infrastructure to parse cmd packets X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 | 195 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 195 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index d54abd17cc..e6d895177b 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1268,6 +1268,201 @@ 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; + bool cmd_startswith; + 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 Tue May 21 09:59:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1102649 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="qcEbibqL"; 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 457WVx18DVz9s6w for ; Tue, 21 May 2019 20:01:13 +1000 (AEST) Received: from localhost ([127.0.0.1]:50454 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1a3-0005gN-3u for incoming@patchwork.ozlabs.org; Tue, 21 May 2019 06:01:11 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44693) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1Z3-0005aY-6Z for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hT1Z2-0007KQ-4D for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:09 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:40034) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hT1Z1-0007JN-U6 for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:08 -0400 Received: by mail-wm1-x341.google.com with SMTP id 15so2206319wmg.5 for ; Tue, 21 May 2019 03:00:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=6XN5MsYgNBFqRM18LfTzbFvP6RUmyaslbyqEQV3oSuw=; b=qcEbibqLgJM1XmOrSFCX2fveXbfG6og8M8RMiqCaUEtrXhcu2Jae/OniZa0w/MztGO 8xMILjaMXmLuM/Plo3sxHAVvVOW2/Pgl+6KMir6UYXS+xCWKrEt0CTxOTCbtG//fp34r zjBxhIObtnqEw7JR3YaAwVg/3VfZuJKknvB7xjXmlVWesMr5VqLCCT8TWse0zWYVEOOv iBlzf+LeNutNeLF5E5CycM47Ur57vjKpYBU25bC1T13Wqnk66DXvpWn46/YEQBuaXHtx VSy99aTodNR4NvKG9A8sj4ZwkF89qIz4BRlMWvW4/WKkvV1KhWobUJ1gqgIPAAEo+rm1 fI2w== 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=6XN5MsYgNBFqRM18LfTzbFvP6RUmyaslbyqEQV3oSuw=; b=sJbPIFcZvM0j73rkCabtPEhdJ8ZktT6lW2BCnO8vpsJheUGxLA7b2S0QMZpdsoLB0V odb8e6IzgSOiXWSxFzbdSp9dNvvocAJzN/XL8JAnR0+RtgNDoZdd/Engd4z2PEvjsBSP uOS+qUSk/RXJT0SYkZFsTLUciG+8+ku6vtBUcT7/LQL+uLmMZMV8eBff3UFy1A4YO90o PvNhEg4idBsoKMSASL0Jy2Gtdf3cizJF3yORauwPFYb12b9OVYq3lyhB6I7l/2HABD+8 U2jAYVmXBipYUhogAiXsFuusy7CWY5GgPqbE7yvX8gwINK5K9NlVBpqFyimFf1WEICiw 1ymA== X-Gm-Message-State: APjAAAXCVQ0XhiggDO0dVfJGGLtpR77qMzrv6QSqrwj/MUCA82Ytq8OL kFBIgWz04aW09nx2vvOJAfeGnCHG X-Google-Smtp-Source: APXvYqy/oJvvQ75uTlyvMBPHImWfjkFFpWq1L+BamBfTIn36znicfw0zX3OAJWDfJUU+6bD58M7vpQ== X-Received: by 2002:a1c:b743:: with SMTP id h64mr2905756wmf.16.1558432806673; Tue, 21 May 2019 03:00:06 -0700 (PDT) Received: from jondnuc.lan ([176.230.64.64]) by smtp.gmail.com with ESMTPSA id 65sm3080257wro.85.2019.05.21.03.00.05 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 21 May 2019 03:00:06 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Tue, 21 May 2019 12:59:30 +0300 Message-Id: <20190521095948.8204-3-arilou@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190521095948.8204-1-arilou@gmail.com> References: <20190521095948.8204-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 v10 02/20] gdbstub: Implement deatch (D pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 | 93 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 53 insertions(+), 40 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index e6d895177b..307366b250 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1413,11 +1413,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) { @@ -1463,6 +1458,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; @@ -1477,6 +1507,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); @@ -1577,42 +1608,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') { @@ -1985,6 +1989,15 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) put_packet(s, buf); break; } + + if (cmd_parser) { + /* helper will respond */ + process_string_cmd(s, NULL, line_buf, cmd_parser, 1); + } else { + /* unknown command, empty respone */ + put_packet(s, ""); + } + return RS_IDLE; } From patchwork Tue May 21 09:59:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1102654 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="higoBbmH"; 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 457WbG5P67z9s9y for ; Tue, 21 May 2019 20:04:58 +1000 (AEST) Received: from localhost ([127.0.0.1]:50478 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1dg-0008LQ-Ns for incoming@patchwork.ozlabs.org; Tue, 21 May 2019 06:04:56 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44702) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1Z4-0005aw-2n for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hT1Z3-0007LS-06 for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:10 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:33176) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hT1Z2-0007KY-Q5 for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:08 -0400 Received: by mail-wr1-x441.google.com with SMTP id d9so4894488wrx.0 for ; Tue, 21 May 2019 03:00:08 -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=wCPlNOOjuBj+Z7/fbZOhYxVCeolCa7FpcLlxWgYcW2g=; b=higoBbmHXlVx/oWfq92/jaRyfYiJAH7jlRIrLfbnsbLr8s9CcewhWZd3vQwR2ddTY+ NRWpuhkyVS6fm5hBL4FM/t83rX+2Yb40sZn3f/IBIWvdRdo2CqQb6ofjQlz9TPP5E2d3 QIE1TfQvczd8G1gg5j5w8Sy93bPu/1hns+oL2vZDQnPu5BGHg951ElCdbdSBtcBjnxnV rzoZhkyrMzWsSQPLzMW8XZBdAY4RGxqwxZC2gNkElW77nTofy+nfxYwBTHUe+n/3e2wZ KCSdgNHAJ7nkhPrS/qeq3Rpsdta59Tn8gFc9LI5iHlXpNumyndKREYzllgxaplDHivgE qS8Q== 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=wCPlNOOjuBj+Z7/fbZOhYxVCeolCa7FpcLlxWgYcW2g=; b=j85WSquWhdYeWOf8Q/KO8tYCMTpXR/sgyUGfF5oMlhpzOnU06vVlq7K0otmir+SQDi k9CVVGaDPNs4rdLJV/BEmTTFqmBaXLrQemmdSq9x/DtKCNT0XCIXAtlKiW0oFOn7lXxh I3ZDcIUJbB9Mmd/duyP6TPsrh+3BZSQ39Pn2imbh4x7ip7m1ldbBhdBZKsPM1YPgO40k GC5FgsPKnnN0OKgK4p1l7Ao9z0TSdyR+nGwG0iK83Wgao1nxwu7yH1/wMkmkb7JhYp1c emmIja43c6wXLGGSCRQOtjlaMNSLYNjak+WxXneIXPIWrlL2KMJtRwaUKsxnkMt47YIO WcTA== X-Gm-Message-State: APjAAAVLoFOFqt+5vFmmc9gLMIVASfgQvLn6xuPMI3xXaXBvq0a9qwba Fl9MUGAJ6CySmty/flMrv9tZsVMl X-Google-Smtp-Source: APXvYqxdnamLLFUAM9E3yEif5e0AKN1O52c6Pi5/4qrLR6rNrVWRKqvPOOa3DazwSm46Izks9XCijg== X-Received: by 2002:adf:f408:: with SMTP id g8mr21159821wro.264.1558432807727; Tue, 21 May 2019 03:00:07 -0700 (PDT) Received: from jondnuc.lan ([176.230.64.64]) by smtp.gmail.com with ESMTPSA id 65sm3080257wro.85.2019.05.21.03.00.06 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 21 May 2019 03:00:07 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Tue, 21 May 2019 12:59:31 +0300 Message-Id: <20190521095948.8204-4-arilou@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190521095948.8204-1-arilou@gmail.com> References: <20190521095948.8204-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 v10 03/20] gdbstub: Implement thread_alive (T pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 307366b250..b4c4bd4b08 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1493,6 +1493,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; @@ -1793,17 +1817,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 Tue May 21 09:59:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1102651 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="VgIbbfyr"; 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 457WVy3kNjz9s7h for ; Tue, 21 May 2019 20:01:14 +1000 (AEST) Received: from localhost ([127.0.0.1]:50458 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1a4-0005j4-EB for incoming@patchwork.ozlabs.org; Tue, 21 May 2019 06:01:12 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44721) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1Z5-0005dc-Nx for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hT1Z4-0007Pi-OG for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:11 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:36061) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hT1Z4-0007Mh-FY for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:10 -0400 Received: by mail-wm1-x343.google.com with SMTP id j187so2217608wmj.1 for ; Tue, 21 May 2019 03:00: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=qklBCnoRnFW8d5mbXepUI9O+2lO3CfVGL56paMeE7+g=; b=VgIbbfyrDnIJPFd+xQe49cMh1U2jh2HqZaHCol74FI+SkaPtrx+INjJUw71Vob9iq7 uJ2ZH5T7TqAIuM9z5Z+IDDhPXrYTPVVRvcxQql4qs7RbW3NpxjzAIMkh/pZyDSnrKoFf TtXK56YNUmAzi5vsPD3dca6dCCmji9v+Sxj5UZlFtoefFI9tp8PMQUL7uLYi3AhBRSyB DHFlLO2FuaK+yBUhItckGJL+U6c3DNZs1d+trrcWPgrNTxQ62I1eWoMD0EyO6JzKDwcE 3xEag3qHMwhLaibiHEHxr+ayVb44XORlu/xUCJpoTiTrrzlPsxASTT23wD97pUpoKfmc gB5Q== 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=qklBCnoRnFW8d5mbXepUI9O+2lO3CfVGL56paMeE7+g=; b=jrBuE6YiPuvJM2caXqMtDaza0U+Otuvx0xmj+QAzPbu22GopL8A0WFvnjBDRV0zTtc KqZ8yAhc01Ocn+oeHS+cyZltU9Uzs365ivZhWcR7WLVwmB96VZif7zdJngk9OcjW7Ptk kWg7KFcV+ZpkjLJSwGVU+4uMoIzL85n83gTR8VHLDDH28Gx6DCQECcYzShieo9/+w7zC H9Qa6k2A0VOwIener7sNPUKcIAVLbxovtd97Z6RnqveqGyXfbRcy/EmPSq+9sXE0CT4d Lg6QqWHs7UVadEJj4XevHAYMTP6r6DN/sC565Ou2eofsCAd8XyXwY5PePnPANete/mMG u3Uw== X-Gm-Message-State: APjAAAWBzmotBqJ95CFJI7efZQSnfjCd9KN+hTRuh8xka/M7UFQsAo1G KEW6+C3Ni7wnL1btFYdmFC1C4lqx X-Google-Smtp-Source: APXvYqxUZmTUi9wVtWRd69z/nWrmGR5J+i2Zp8ofhlrgzs5R0qHcB8kWR649gnQgXIsyLWegZ2txOA== X-Received: by 2002:a1c:c1c8:: with SMTP id r191mr2462922wmf.99.1558432809360; Tue, 21 May 2019 03:00:09 -0700 (PDT) Received: from jondnuc.lan ([176.230.64.64]) by smtp.gmail.com with ESMTPSA id 65sm3080257wro.85.2019.05.21.03.00.08 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 21 May 2019 03:00:08 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Tue, 21 May 2019 12:59:32 +0300 Message-Id: <20190521095948.8204-5-arilou@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190521095948.8204-1-arilou@gmail.com> References: <20190521095948.8204-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 v10 04/20] gdbstub: Implement continue (c pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 b4c4bd4b08..698d6f558a 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1517,6 +1517,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; @@ -1553,13 +1563,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 Tue May 21 09:59:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1102657 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="rZuzxbkh"; 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 457Wd82J7Bz9s6w for ; Tue, 21 May 2019 20:06:36 +1000 (AEST) Received: from localhost ([127.0.0.1]:50520 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1fG-0000x3-8P for incoming@patchwork.ozlabs.org; Tue, 21 May 2019 06:06:34 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44732) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1Z6-0005gX-Ta for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hT1Z5-0007S5-UU for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:12 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:39809) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hT1Z5-0007QR-Mj for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:11 -0400 Received: by mail-wm1-x342.google.com with SMTP id n25so386447wmk.4 for ; Tue, 21 May 2019 03:00: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=xXa3Ieic116CoIniryuXry26xPia1X82hROPrELVOA8=; b=rZuzxbkhZnXv/Y5//FTd4yQTcFQYWr7ck6UDBDrbx7SOYSy81JW6NoWFyBE2HMCbRp U6dVHNSjZioaVhl7Su/x/pWLIKLeJUo5c0s5BhSiO281faEDyJgzAjLtgLeHAixtYCNW lk+o7N+c0b2Dy1kjP/yCmcr34XuYsCsk/F6jOxehp1vN/37bVnpd8MByt6eCDBbdWZ7Q yrBTxj9JChXV7VzxWsCm1NvKa6FaJEatQM5fHohY6DqfmOiLNtV1qLMi6OreitQFrPwi AJzPjc69I0iPXQLAhk2EwotiOdtzWxZM3nk4YyVG8IuVE6wXSyG+mHsvNu5KL+FLPU1h C8PA== 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=xXa3Ieic116CoIniryuXry26xPia1X82hROPrELVOA8=; b=RQa5rzHniOHUuCDpYbup4AMzFVPZFezFgUG6w4ixH0N5vkMe2u44knuLdnADWb5t0y i9I+I7nOEiwjV3f2a0qmlSZ6BNTsNNkeC5yVI5+qKpUXaOTVw4MFDd/OFKIsiErR8K5S xbY1BkFFh7ITFT0Yqr3eR2dFgvPV01L6oH+9TyRi+8UAEzb5XVbmxBFfujwo8jYaaiRL ktBh6DLZcSObHTf7l7z+PDkL28OVQr2dxzv2aMgvZBNPXjNNvqx6sGDINdtVsE+P87Tb 3A5aYFWVInxipQIa4TdxxtLMEGP2O4q+vUss/JWnJqrGAMRcK8vVQP9/aDsHGkNYYyZo 5bqg== X-Gm-Message-State: APjAAAV6d87jF36voDMOkXNTZlDi0efi35swUAzIDjSKVMIUMOvTYZaY mTKhJFq0hyblFlx1ZvZx/k2KyiO4 X-Google-Smtp-Source: APXvYqwOK1SoVGCt39s+E/sT68wuVtmoTu1W37VZ/vtERt5NcngN7kX8u6FtqPIz9xYNloPF3N9wXA== X-Received: by 2002:a1c:9dc7:: with SMTP id g190mr2615714wme.121.1558432810458; Tue, 21 May 2019 03:00:10 -0700 (PDT) Received: from jondnuc.lan ([176.230.64.64]) by smtp.gmail.com with ESMTPSA id 65sm3080257wro.85.2019.05.21.03.00.09 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 21 May 2019 03:00:10 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Tue, 21 May 2019 12:59:33 +0300 Message-Id: <20190521095948.8204-6-arilou@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190521095948.8204-1-arilou@gmail.com> References: <20190521095948.8204-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 v10 05/20] gdbstub: Implement continue with signal (C pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 698d6f558a..f74a30da03 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1527,6 +1527,25 @@ 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; + + /* + * Note: C sig;[addr] is currently unsupported and we simply + * omit the addr parameter + */ + 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; @@ -1574,11 +1593,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 Tue May 21 09:59:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1102656 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="DrsbVFhP"; 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 457WbV6dv7z9s6w for ; Tue, 21 May 2019 20:05:10 +1000 (AEST) Received: from localhost ([127.0.0.1]:50486 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1ds-0008Qv-P9 for incoming@patchwork.ozlabs.org; Tue, 21 May 2019 06:05:08 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44744) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1Z8-0005iJ-66 for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hT1Z7-0007Ty-4O for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:14 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:51272) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hT1Z6-0007Sr-T7 for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:13 -0400 Received: by mail-wm1-x341.google.com with SMTP id c77so2299959wmd.1 for ; Tue, 21 May 2019 03:00:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=5vUrzsPbD2HsTVi8AVPvqq8W6f/IcWzSOuiw6zGUfXY=; b=DrsbVFhPhSJ2vvr3bvX2IxgGvos9E21VmEtyENu4Smf0Ve0ru5EX8VV0g2nSYaRgcm 4LmwJOCyID+tbhmjBKfw5dJa6b3EO7gT15h/X8FE71g3I6/aLrlpp2O0fpgvRawsAJZ6 ndlLEI8rrXcKCD0LkZzWIj+YmxnOgJUhDt/JOLZ7FQ3KxaUeBd7fOwkyQQcFkCx+NOip QXP4iRuenW8Pcx1h+CaR1Rauf9dMwb42iM1tXAyDwn/7TF3Luil8/Bq1FoWX6fOAB3ky NKHV2AUV1DYJuMfDYA4KxFS4tO1S+ZvEkVkqIWFmqPqDYjB4J50nVotPO76arUajXrD3 27WA== 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=5vUrzsPbD2HsTVi8AVPvqq8W6f/IcWzSOuiw6zGUfXY=; b=XqMtJ2ulqCoOnsZ4b4ri/f5VZVdanho0KgeTudjgtsIZDbJl1yffHwemzKE9Ul3WuV UQEJtMm0z+2eUe1ymPn0CVbM3de6mN4bIYzOW5hUwq5MimyECQulEzrpUrJujR6jk/wL ygy81uMxHrwwAPBCOH5UgCGI/fl/HnNYeFzB/v1qsMODYYXsRH3tuvDrVUi/yboW2Itx MJJedCczdylqgv/eJBsCmRsH+5UbS45rW4pr2y6UHon178ylXFUPsp6ghnrG+KPYWPE0 O3mZ9pROWkBk/Znwpcfbt5NtOO4Dv4eyOq0/LA7wgn5lBYKe+KisWA0lWB5R2NvsB+mM 0kbQ== X-Gm-Message-State: APjAAAWO8uKlcAxhZS4VkbfuP56+6BdrLc+r10XitVVzYsf/eRFkRen3 T6tXUFAzuYs3mSLSDQjhbCybV4Ok X-Google-Smtp-Source: APXvYqx/hb3CAJSyb7pHCyTHBmnvjhErnDlDgB+k6R0awCPOA46FeQTrlG9FBj8cQVlT4kRN7PMy8A== X-Received: by 2002:a7b:c549:: with SMTP id j9mr2654520wmk.114.1558432811827; Tue, 21 May 2019 03:00:11 -0700 (PDT) Received: from jondnuc.lan ([176.230.64.64]) by smtp.gmail.com with ESMTPSA id 65sm3080257wro.85.2019.05.21.03.00.10 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 21 May 2019 03:00:11 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Tue, 21 May 2019 12:59:34 +0300 Message-Id: <20190521095948.8204-7-arilou@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190521095948.8204-1-arilou@gmail.com> References: <20190521095948.8204-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 v10 06/20] gdbstub: Implement set_thread (H pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 | 83 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 30 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index f74a30da03..129a47230f 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1546,6 +1546,51 @@ 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; + } + + /* + * Note: This command is deprecated and modern gdb's will be using the + * vCont command instead. + */ + 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; @@ -1559,7 +1604,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); @@ -1822,35 +1866,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 Tue May 21 09:59:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1102661 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="br0E+9Cv"; 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 457WgX4VxKz9s6w for ; Tue, 21 May 2019 20:08:40 +1000 (AEST) Received: from localhost ([127.0.0.1]:50540 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1hG-0002RZ-I9 for incoming@patchwork.ozlabs.org; Tue, 21 May 2019 06:08:38 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44756) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1ZA-0005kc-4d for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hT1Z8-0007VM-6J for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:15 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:39809) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hT1Z7-0007UH-V1 for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:14 -0400 Received: by mail-wm1-x341.google.com with SMTP id n25so386645wmk.4 for ; Tue, 21 May 2019 03:00: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=JBP05yP+oKTHN0+qEMyIVDJm99TfFag3Xoa9AN/GQ0I=; b=br0E+9Cv/qFJClTAmxvpVAEG0K4lrlDsStfRHa3C47BBc740UUFsGSmVmK0fTYb8CH z5ScgCLvRXLTG5oV5iXXFt/T+9iuyssS/G71t2Ep6oet7s/wmknIs0UOyas78Y3lUMm1 dahPCvVFt8rSq7KvfJryTSIX+g+1Ea9Qr1iP11Cyu/kpnJsPfxb8CECdfIbvszxYjMwZ phuun1oefwSqVQaJz/Dj8ANSW17Z+5OQrJW6EfZul0oEL+Rbe7D46oTtJKi0uuQ/Nq/a QqHQnp/TQVL8QuEl3GqJyDP5ohCflCO/A0rDK6FvarZ16C/7WJHqtiIHwKYwcbb1pI6N CPOQ== 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=JBP05yP+oKTHN0+qEMyIVDJm99TfFag3Xoa9AN/GQ0I=; b=bKZflh/qe9KpJ0nyBAUTOPzwd2HhTcOK0WNjTc9rqvL41+EzE6IzX3zaTvt5YYjbIX XDWVeKULZ4zDxT7TZtICj+D6ke5cUuha5d7ML4YEirwuVv+8y/uBXBSB0SWRb+koefIA LD6M0dd/aBOVGyzJb2jZh7cur2a0lkrB/jBH6x5x9kzpIGuTLZayqyr0gK5GFz2XtuJK t48hqYyv1+2ze/wBu8kPPOxnn4vfVXrNz0Y/uNQle5c2GaQg1niiJd0a1DuKEg+21zV3 PwCt4kulgXqssV4a33d8xIpBfzsMKQ2TyDn9HdcLdsx6lGwpU1WxIBjPdskX4WBncEZq Rctg== X-Gm-Message-State: APjAAAUvcwVOaxluHk/geHfv3kzEOuid+V4Ym1GKxR6dYYerboSYDecD MBTtJuynG3o+QeRm9ZdRs/Ei2owj X-Google-Smtp-Source: APXvYqy+qD+hD1ljcry6sX3jwcynDMz3iXZq+BifOi3dtWBR5W05UJqaRu1CXEXOkMAPLiO7253SSA== X-Received: by 2002:a1c:a7cc:: with SMTP id q195mr2785399wme.53.1558432812906; Tue, 21 May 2019 03:00:12 -0700 (PDT) Received: from jondnuc.lan ([176.230.64.64]) by smtp.gmail.com with ESMTPSA id 65sm3080257wro.85.2019.05.21.03.00.11 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 21 May 2019 03:00:12 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Tue, 21 May 2019 12:59:35 +0300 Message-Id: <20190521095948.8204-8-arilou@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190521095948.8204-1-arilou@gmail.com> References: <20190521095948.8204-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 v10 07/20] gdbstub: Implement breakpoint commands (Z/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 | 84 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 66 insertions(+), 18 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 129a47230f..c59a6765cd 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -950,7 +950,7 @@ static inline int xlat_gdb_type(CPUState *cpu, int gdbtype) } #endif -static int gdb_breakpoint_insert(target_ulong addr, target_ulong len, int type) +static int gdb_breakpoint_insert(int type, target_ulong addr, target_ulong len) { CPUState *cpu; int err = 0; @@ -1591,6 +1591,52 @@ 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[0].val_ul, + gdb_ctx->params[1].val_ull, + gdb_ctx->params[2].val_ull); + 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 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[0].val_ul, + gdb_ctx->params[1].val_ull, + gdb_ctx->params[2].val_ull); + 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; @@ -1846,24 +1892,26 @@ 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 == ',') - 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 Tue May 21 09:59:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1102668 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="YrdPF8Pl"; 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 457Wl843Ztz9s6w for ; Tue, 21 May 2019 20:11:48 +1000 (AEST) Received: from localhost ([127.0.0.1]:50611 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1kI-00058K-C1 for incoming@patchwork.ozlabs.org; Tue, 21 May 2019 06:11:46 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44775) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1ZC-0005lV-4b for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hT1ZA-0007Za-7c for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:18 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:41507) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hT1ZA-0007WB-1S for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:16 -0400 Received: by mail-wr1-x442.google.com with SMTP id g12so17568063wro.8 for ; Tue, 21 May 2019 03:00: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=CctE0zTJnEU25JB3cn3PPMbvqOEdGic49XPgJHQGWnY=; b=YrdPF8PliS9s5JYhwNFYHFvT5KIgys3HchqYGIx7RLg6N26WLvQtZAGobSgfT8TeyU nxKkCEfpwKjAXYRS2sNF2yac3yiKHk9/djX2yYK73R+bwz3L1nXaSdndM4toOucAtwgS kSYVFFOWSj56bNy+jGK97ok+Dq1m9CbPLIsG6IopNTe9E+PBR0lm8RE2LYOjsrE9gdOl d2MXhiGGPKBy5vWU9d391D/YFSfLUevjlSSrA+cAkIHqRgMxczGf1fQnhaH0KJwTwjXG hs0zgtS02nw1eufo8nTsO6a09gmLcFaEMWNcHkFzA/Wt6gjuCOqbfG+KfuBiWnknhIfw QVrw== 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=CctE0zTJnEU25JB3cn3PPMbvqOEdGic49XPgJHQGWnY=; b=PRjw02gZ9aasxU6VlQ48dcRhR4XnFPRUDIfDfAU3rHlaOTxE/VPgjIlrU1Zc1GpUVr wj+2qcbf7SNjazZGiY/Wgi7S9gMAmmVznrcfUdeA+CGWsSKyQKm03yY25EqprAjZgEwj MDkM7/rv8/dr/rkW3pvGqjq4zND/nfN017Qw9Lx/vrODBFZgI2IWKpLOlapckH3o0u+c hTjWoXyC9L0tkOwKJLIsTNWMVgTRj8omLjpnTcOG/RxlGFlnKL472QCt/sxavDBqivlT WWG123/eXiNXXg2QpCj/ihkl/1ttXrFQ7xbooWPIcj6Sf4kfuu7VlCxKcqHVn+Yg/XuG Q8wQ== X-Gm-Message-State: APjAAAVEww2VRDxVePsKIMweUeVrprQclmPTM4wK6Cimj6y3Ww8TgCWr iinqZQTxq93IbWXFAg5d40HypmTI X-Google-Smtp-Source: APXvYqzTJGEfkiXUIEEGRWsk9Cr5H9IfkL2uC3r1SnjGOji49poKC4bLGc1GIu84YrLBrDgAeaZH7A== X-Received: by 2002:a5d:5283:: with SMTP id c3mr10548303wrv.268.1558432814428; Tue, 21 May 2019 03:00:14 -0700 (PDT) Received: from jondnuc.lan ([176.230.64.64]) by smtp.gmail.com with ESMTPSA id 65sm3080257wro.85.2019.05.21.03.00.12 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 21 May 2019 03:00:13 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Tue, 21 May 2019 12:59:36 +0300 Message-Id: <20190521095948.8204-9-arilou@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190521095948.8204-1-arilou@gmail.com> References: <20190521095948.8204-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 v10 08/20] gdbstub: Implement set register (P pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 c59a6765cd..1c210d671a 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1637,6 +1637,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, "E00"); + return; + } + + if (gdb_ctx->num_params != 2) { + put_packet(gdb_ctx->s, "E22"); + 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; @@ -1881,15 +1902,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 Tue May 21 09:59:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1102670 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="oAxb1BrA"; 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 457WpV63K8z9s1c for ; Tue, 21 May 2019 20:14:42 +1000 (AEST) Received: from localhost ([127.0.0.1]:50649 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1n6-00082z-Q6 for incoming@patchwork.ozlabs.org; Tue, 21 May 2019 06:14:40 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44801) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1ZE-0005mx-3m for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hT1ZC-0007cA-Bo for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:20 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:39515) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hT1ZC-0007Zv-3F for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:18 -0400 Received: by mail-wr1-x444.google.com with SMTP id w8so17870586wrl.6 for ; Tue, 21 May 2019 03:00: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=V1QVJ4HRbWCoEeLavvf/S+Qb9vILZOoid3DZnX3FkwE=; b=oAxb1BrAE6KTFqNW4wbh1u16wJ5p4bIGaSWxJpmnpaAr2xEDfCsuFzGyILD7ktpcYG QahWobmPPPjDcWPIbkVTuggKxLxfQoUqib/AuHdpIIWYc4OiiVkoLTplu3KdTGfKLfQC F39w8VVMs/yobNdp6DwjD3Wv7TIWF5Tod55zUBMkD5jregix1EvNGVciH3+OYoYqxxAE 4xZT/cWtY/oaw8xQ9NAUVQwBZz93sCi844q5Tj8kqIC0yyIr0M/QxvE3tsun/zHHbvmx c3Vm33nvx4nxP1pIoF11hrB/wzfFEHNejNeQc76lJIIFrSpftrPw94FOHask6Bs5JmrT M+9w== 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=V1QVJ4HRbWCoEeLavvf/S+Qb9vILZOoid3DZnX3FkwE=; b=T5VFAg58/X/Arbjbgv8p9pD4lY0XRzSv7uGyrfuwvJgE/fJCGFbDBoCli6584CfZw0 GlKpt+IHoyXcJO2Z8FdvI7qhPEqVs2JJT/FVdIZWq9C1U8NAMba7inPdAxv/ygLg3qNf pSRC5fEpS/9kYFAGP6ga3q6HAiYmklZdsz+S4IPaaMpLw5OkvRMTrtzf06gRzNrB58CC gZqH4orIAEPpzy1UV35RkPF4pbNwLKSPrtwV+oxKbVWNOjaBqzqxTOI3aG2mdJHbkWjV kFrF3I8iXWFBFoovXauQ+ADa6LvEk1VXz+AQPM9/ggO8CFmcPdGkozNNeEjAabtFHPH2 djXg== X-Gm-Message-State: APjAAAXCZxorf/5nFhAl2x4UkVkai7ULfQtqrLV9bA+ppBrkmPskJx4I v55GfEF77Sdn79EYwGkuUxD4Skjr X-Google-Smtp-Source: APXvYqxmDuhVfySEZhkAzcIcGPpjZp5QUUl5K7yuEzEIPTAyEHCynUv9+7fiaWsFmK/HB82bqJM+hA== X-Received: by 2002:adf:ef83:: with SMTP id d3mr38294993wro.253.1558432816048; Tue, 21 May 2019 03:00:16 -0700 (PDT) Received: from jondnuc.lan ([176.230.64.64]) by smtp.gmail.com with ESMTPSA id 65sm3080257wro.85.2019.05.21.03.00.14 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 21 May 2019 03:00:15 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Tue, 21 May 2019 12:59:37 +0300 Message-Id: <20190521095948.8204-10-arilou@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190521095948.8204-1-arilou@gmail.com> References: <20190521095948.8204-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 v10 09/20] gdbstub: Implement get register (p pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 1c210d671a..3284b3e01d 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1658,6 +1658,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; @@ -1887,18 +1917,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 Tue May 21 09:59: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: 1102673 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="iAOW+6JW"; 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 457WtD6YY8z9s6w for ; Tue, 21 May 2019 20:17:51 +1000 (AEST) Received: from localhost ([127.0.0.1]:50707 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1q5-0003Kb-Oh for incoming@patchwork.ozlabs.org; Tue, 21 May 2019 06:17:45 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44822) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1ZG-0005ow-4M for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hT1ZE-0007eu-4w for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:21 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:39514) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hT1ZC-0007bi-N8 for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:20 -0400 Received: by mail-wr1-x442.google.com with SMTP id w8so17870703wrl.6 for ; Tue, 21 May 2019 03:00:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/sbmzo79XaCZQwqH+f+jq/WsDe+pAivhYNl3QyPcKVE=; b=iAOW+6JWvQXcMi5oKvyrtBFcxzfEydkHs1kcbT6j00DBTq5Haf964UqHc9DN/Oq1ua nu02FSI/bcgRr3Aw7HRHB2ABPhxuxNbkbEtmG3331icx5Ncf4m7suaTgBQglTmXdYoX5 S31JemcIANlZd7GDBbUw+PAK3Tr1qP3WpXnE0bh8/7QenwcxeMFuHB3yKt9MLKAlT+yn XGq+cCPxpYcxB6c3cwao+duBaf8AXDDi51tyIVsveOwR9YmAtSqE17P2BDmuhJuzkrgK iDpLM/dGj27H7PiXMfOxm3DBLVRUfCfHS6PExBDAENPbPgNQzbu6ceAeOynNY8a/mrdJ gl+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/sbmzo79XaCZQwqH+f+jq/WsDe+pAivhYNl3QyPcKVE=; b=OpTX+9pMwHp5ALb+T84an+rug6Qg7L2lRzjUSdYSUl45fZrPfGiTpGe3VYfDkUN/oK 8hYltSo6zLO4lRydcXi2EvVze8Guy9pTYGSKtw46lFXCqFB3tqmR52MC14E77hsWxGx5 f/6JEMqmGViQopH1h46d6vfuKUbYKuoFUVLOrtgbc805i9szJIK3IsNRrBNmaLL5OwSs oN+1GVeYtI+TcltQxlCfqmFjLZpFhbSDdDfBThTepswb4X89sNpt26n6UYkp3m7xSpv3 +7rpvBOmBMJ4keIHtsq5rTeh6TnmAKThTei4M/sY1G6qWuo+grRCZadcXrkyE63j2lFi XZfw== X-Gm-Message-State: APjAAAVdumLT5PPLABD5Gr4XjffXmPjNAx4y89TgA7nMhkfosXXj98PL hRSBbjFCtWxp1cg6bhkmGRbcOiRr X-Google-Smtp-Source: APXvYqz5TNxuJHN7hmHj5TZcG4aAuagh2rAcFi+QvVnVbqgLNtxrT947khhe5cEqds+/OthVdO4ZcA== X-Received: by 2002:adf:e649:: with SMTP id b9mr3926104wrn.195.1558432817704; Tue, 21 May 2019 03:00:17 -0700 (PDT) Received: from jondnuc.lan ([176.230.64.64]) by smtp.gmail.com with ESMTPSA id 65sm3080257wro.85.2019.05.21.03.00.16 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 21 May 2019 03:00:17 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Tue, 21 May 2019 12:59:38 +0300 Message-Id: <20190521095948.8204-11-arilou@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190521095948.8204-1-arilou@gmail.com> References: <20190521095948.8204-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 v10 10/20] gdbstub: Implement write memory (M pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 3284b3e01d..c798d93e22 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1688,6 +1688,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; @@ -1896,24 +1921,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 Tue May 21 09:59: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: 1102655 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="Vbwk7DxE"; 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 457WbT3p9yz9s6w for ; Tue, 21 May 2019 20:05:09 +1000 (AEST) Received: from localhost ([127.0.0.1]:50484 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1dr-0008PD-HY for incoming@patchwork.ozlabs.org; Tue, 21 May 2019 06:05:07 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44848) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1ZI-0005rF-2i for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hT1ZG-0007hB-4c for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:24 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:45785) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hT1ZE-0007d7-4Z for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:22 -0400 Received: by mail-wr1-x442.google.com with SMTP id b18so17800829wrq.12 for ; Tue, 21 May 2019 03:00: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=E6Aj38nujfg7uAklKeVMuJbgjPP11bdHJyXK/OOB26o=; b=Vbwk7DxEuELDnfexJV3Wpuwy8W4+3mykVAhGDD6XR/zzlrFsGqAh2umr/4LHBBtVOt B8zeRfGrwMAxrnwknBbrhFptptr4mbk+FO/tHvZRazOKlev496P/YMWiJe8wcOVK65Ys dSImT08GJYoe9zL3Cy55Pb9QfI777G/DbRLh8432Pn1OVAHNzlXj6bcq8PMh4JjR5Z5K 4BWhvpMdqVWcCo1dtBz7HQrskCgHaLu1ewkWxVzxNO8oiFR4RacwXTLHIK2pTmjimTQO +RcYUEsa2b6R6YyRXWem1D+B+Igh/jytN5pIY0itLm8tJ4yBVQITl8eDlsY6uUygv931 rLmg== 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=E6Aj38nujfg7uAklKeVMuJbgjPP11bdHJyXK/OOB26o=; b=CkuSOf5p7QaP3m7uRbTnQTTrxi1aZ+AhRjZ05X5/CDvavmaiVTL9CmT++sDa51QbUg 09HxF+6cqMWqVhucQLHVK1/2LnsAtr5whtak2oVb9v14L9KifaWa349gBboOtMqVk5SI avchiGOiVmV8uzpmA6Aim8qIw36gBBZLn1c6E9OKJd6usBzqpzdgmFDrqA8O5FQDHDPd dYzkVoFdm7yoBP0noE4pzWSmq2jYXuIax36FZPy78maWsgpIEieuPhGqJ/+LirDhhX/J kngBr5Osjk+vKZgLwzIIBFvPBvTw6EcPTjLDeYRm+WZkA5GNX9LKagnCldlfeUDfcEXI 9xPw== X-Gm-Message-State: APjAAAUF3iDKW3ROyR/c9aPiqNH+RxDdulkIqvsxpWyK4EJCVVcaEsHb j/dTGlSoqPjs0kpCiQwWo9+ZFaR/ X-Google-Smtp-Source: APXvYqyiAhO19qoAnllyVpQ4BkeeCNryV5NNlvDhii62DmHaMykIlDHRkImXtjH9ax1PTEJDxqJLVg== X-Received: by 2002:a5d:4e09:: with SMTP id p9mr5134678wrt.218.1558432818758; Tue, 21 May 2019 03:00:18 -0700 (PDT) Received: from jondnuc.lan ([176.230.64.64]) by smtp.gmail.com with ESMTPSA id 65sm3080257wro.85.2019.05.21.03.00.17 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 21 May 2019 03:00:18 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Tue, 21 May 2019 12:59:39 +0300 Message-Id: <20190521095948.8204-12-arilou@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190521095948.8204-1-arilou@gmail.com> References: <20190521095948.8204-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 v10 11/20] gdbstub: Implement read memory (m pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 c798d93e22..c957b0d8a7 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1713,6 +1713,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; @@ -1902,22 +1926,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 Tue May 21 09:59: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: 1102674 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="bAdcx/YJ"; 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 457Ww16dP5z9s1c for ; Tue, 21 May 2019 20:19:29 +1000 (AEST) Received: from localhost ([127.0.0.1]:50808 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1rj-0004bJ-NO for incoming@patchwork.ozlabs.org; Tue, 21 May 2019 06:19:27 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44851) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1ZI-0005rH-3I for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hT1ZG-0007hb-8p for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:24 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:45786) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hT1ZG-0007fk-1n for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:22 -0400 Received: by mail-wr1-x442.google.com with SMTP id b18so17800935wrq.12 for ; Tue, 21 May 2019 03:00:21 -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=sD4J8yU9W5U39LJ4w5k/hf8/NJnFz6Gfac7J3rxMuig=; b=bAdcx/YJVrypi2sR+8j1xWJ3InRqGaCTji8rUpw2s+JmMXjVXW2/JtWpEraOFYyqa/ 55+7T9hHrC8OW0dvzHC8YJAoIaqc2xUwHubSc5i3oF9YLk7Qw35DoA1msfhtuby7eBmH HCIR9eWQeW4jYN/R0y2FTB15a4xJRrv5YYGhaEghbMGBJvecXep9zeAbz/cKWEINSqwA P8FA84G96zBGwzAu2fawrk0sTR9mxGuoVl4VR731yh4TXf3fr65opM5ql4vz5+U2hiTG j12a4Md39MCo+y7MIN+vjIeRfM1X1nkKShfGdSsYhEEa1QeUjxCiXx/fMrdNbgd9zEWE 2vlg== 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=sD4J8yU9W5U39LJ4w5k/hf8/NJnFz6Gfac7J3rxMuig=; b=KWrMIMuavgMMoeM+GHUD0dh1l0QGaj+O9n0JWTPfVeaqka+1LCY5WjGaVsxwI29/pI 2D8ZKH/TSo5865KjGUBTrUC2LWoI4Q5DG6nDyH9AmtQZ8y0f/BXzUIdPp7LBFOreRFwr +v7s9fZCW6P6khFzql8RodWYj5g/XuoNu59xn+8hWP+4Gk/dBBR0SNS7uJGKaS7LZfvC 6oU+38gxx2PprqntJlYMA7fN5JCm+PnzIgmZSHRdnx8MVbMUr/o1AEY/64ywJEPwtkdp RV6/ami0DqDYLQs4L3/mmHeBKySmuoLt1Caif6aEYrjGg22lThKnJlfTAKU/RlcWuePq vReA== X-Gm-Message-State: APjAAAU9LAZSp6xjH1g7cMNJzDCD/s4L5KGGjAo3jHw4wqGff0DDIwSr wrlW3eXl6QqQndUqQz2o0XYQ95Ef X-Google-Smtp-Source: APXvYqzTBBLIyhoB/ytdSAeTmHfinVpg1GSRHgC7AXgSvEPo07+T6gX65MgMCQulhGbv/T60ul75mw== X-Received: by 2002:adf:de82:: with SMTP id w2mr5057287wrl.53.1558432820391; Tue, 21 May 2019 03:00:20 -0700 (PDT) Received: from jondnuc.lan ([176.230.64.64]) by smtp.gmail.com with ESMTPSA id 65sm3080257wro.85.2019.05.21.03.00.19 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 21 May 2019 03:00:19 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Tue, 21 May 2019 12:59:40 +0300 Message-Id: <20190521095948.8204-13-arilou@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190521095948.8204-1-arilou@gmail.com> References: <20190521095948.8204-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 v10 12/20] gdbstub: Implement write all registers (G pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 c957b0d8a7..1afad31b49 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1737,6 +1737,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; @@ -1748,7 +1771,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; @@ -1914,16 +1936,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 Tue May 21 09:59: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: 1102662 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="Zr7yztZ9"; 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 457Whx4Vxtz9s6w for ; Tue, 21 May 2019 20:09:53 +1000 (AEST) Received: from localhost ([127.0.0.1]:50544 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1iR-0003TL-El for incoming@patchwork.ozlabs.org; Tue, 21 May 2019 06:09:51 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44874) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1ZK-0005tH-24 for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hT1ZI-0007kb-BI for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:25 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:39514) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hT1ZI-0007i5-1M for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:24 -0400 Received: by mail-wr1-x441.google.com with SMTP id w8so17871021wrl.6 for ; Tue, 21 May 2019 03:00:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=sTjfnnpm3Bx94qjSoGjXySgN60zY4gcLRdNYCyC1oso=; b=Zr7yztZ9ghXv1M+ryNqIrLH47NfWgKTXlVzt82jF72uq/rWWWqIT8QVR0fqLoHr25k 8h6YG6JsVDYOj4FsXtLj5ygZ8nn5eRmHSr8DM+t9USxYFe7MLrmy8L8opCPlR5JFvbV4 969xLPCFhhFKbQpEhw2uMF+vGjeQM5wQt0qbYV7J3vV3cKsc713gJWtl71hM20WRwdkn cCmPljr7coWxxEwGOWvdUCXF/qdO2ZyllJW6qVZ76s5CqilKhBOsqSk2WhWlCAQ2+1lN PJop7GgV7uMV2t84GEAPI+iuF6lX7dz9W9UGd1fNpGwxXgoudjxHK5RmHE7Hw6eV+0RU +saQ== 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=sTjfnnpm3Bx94qjSoGjXySgN60zY4gcLRdNYCyC1oso=; b=HkJfa7EZbsOASevQE0vTR+KR4URpArNB1mLbLCD+0TypK67+LHNj/b99JC/mzSZVX5 5ACTwAdYQUoe5RUuYR83mGYqP/+nTx5Dp5oa2cT5rgGiQsUeIekB5V7iGDyP/3OBkUjx 3JjgCD+OLDXGdaiHY6ZRhE2ynTYdOyg2HW8qAJ2lgfd+EB6reniU1C2gwBfmXgYKDNH8 FERERxZ/Ki493cr2ChKx3fWijRjr9o+TRl08xtsbW47Kh4BtEV9V1GdQefJDH4Jk+xLM 7WZ9NdNNHxU/+sKDyZnezqoF6VWFOb9ow1DH0uDsGyh4kQ5UmWwFcGhjbD/cWPJhbEy6 20XA== X-Gm-Message-State: APjAAAUY3/ZYQklc87hb46k7XvbgIOFUR0QntPy7b4yxcpVtn0aO/skj +luoN9uiHG21KgqQR8BDwalKsQEa X-Google-Smtp-Source: APXvYqxHnj6BpenD/6rmiGKCthTrKy2sjRsotgCJXWW5iIYlLQTqFnzHVX+bwhmPvOk5l6gppWl8+A== X-Received: by 2002:a05:6000:43:: with SMTP id k3mr49099255wrx.234.1558432822124; Tue, 21 May 2019 03:00:22 -0700 (PDT) Received: from jondnuc.lan ([176.230.64.64]) by smtp.gmail.com with ESMTPSA id 65sm3080257wro.85.2019.05.21.03.00.20 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 21 May 2019 03:00:21 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Tue, 21 May 2019 12:59:41 +0300 Message-Id: <20190521095948.8204-14-arilou@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190521095948.8204-1-arilou@gmail.com> References: <20190521095948.8204-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 v10 13/20] gdbstub: Implement read all registers (g pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 1afad31b49..781f5882ac 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1760,6 +1760,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; @@ -1767,7 +1782,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]; @@ -1926,14 +1941,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 Tue May 21 09:59: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: 1102660 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="YtSHz2Sq"; 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 457WgT6CLRz9s6w for ; Tue, 21 May 2019 20:08:37 +1000 (AEST) Received: from localhost ([127.0.0.1]:50538 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1hD-0002Oc-QO for incoming@patchwork.ozlabs.org; Tue, 21 May 2019 06:08:35 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44886) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1ZM-0005v3-0L for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hT1ZK-0007mp-2y for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:27 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:39517) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hT1ZJ-0007kv-3Z for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:26 -0400 Received: by mail-wr1-x444.google.com with SMTP id w8so17871149wrl.6 for ; Tue, 21 May 2019 03:00: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=ni+e0LhW6YWUs24EBh3Q0RNwpZ46aTDH74CutNl7AtE=; b=YtSHz2SqC6bI3ZA/fWNPrSgpZpKEjn2P9IDE64IVGFwd05HPp1kJecwpousInpyZQM AwTNJO3iFJzypJIsQiqXlgXsnurxG+wflMI7so/P1wa+RCtO6DBFyYmriZgTLOqgwSs4 iS4S71GkbZJ05aGFKN1GpttlzPl2skKZOT57EdRlAxgEOe6P55VIeb8KANzS8BP5Q87h mP9DEMwHC64vOzZhdTSapBBzBotOy0hHIgrZMsq2DBFFqiCxGj+TMEy/ZrL2GSU95YbN p0IJkgB5gXcS+6ChLJCN/rSIEdN/wR29NsNtNyo8xJceQGiyntg2C0mRk7atd90jbcDc qUzg== 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=ni+e0LhW6YWUs24EBh3Q0RNwpZ46aTDH74CutNl7AtE=; b=SvZp3RrgQAtylIRTl1n4LyMXGZR0fHdQy0A3DrAO3p0zCEceJpeWwYXc26kNjtGAcn V3Mtu/oFNT26//OdIiWtM1QqQa/Zh62YVWgPXc8g8NZL4RZPmFiUKJSdPvTEkku/WkvI 7lTbhd539TyAo2vCj5AYETBnrt3lFVS+OXqnS79QfYg5yNfM/MyT3n6t/Gm86jqEBX8b x99dciL+wfuGPBUjYOz9pdyH+z+RW2H4ridBf3K1zRh3lFTwxoQjYCdpVMnk0imXZ5EQ YxOoDe12KzP4+Yy94KYH7T1MhbHHBEZLC0BBlVZ8W6w74EI9lZtuBV72us32MhSUGUoY F1uw== X-Gm-Message-State: APjAAAVnNPW6oMtpweNVr0sbXpwItN8y0Fw7v0tDwbMy7tdrkEn1pf4h 1r5ys2nyGJbrJzqBwo9M4O/GT2vW X-Google-Smtp-Source: APXvYqwm9/e9ga4CH6nz2euu7q0P4Ld/vwX3Rt4UzmHlSd7biQ3xNADRw6RoPoV6G3axZ0blduRwhQ== X-Received: by 2002:a5d:68cf:: with SMTP id p15mr20094523wrw.105.1558432824125; Tue, 21 May 2019 03:00:24 -0700 (PDT) Received: from jondnuc.lan ([176.230.64.64]) by smtp.gmail.com with ESMTPSA id 65sm3080257wro.85.2019.05.21.03.00.22 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 21 May 2019 03:00:23 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Tue, 21 May 2019 12:59:42 +0300 Message-Id: <20190521095948.8204-15-arilou@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190521095948.8204-1-arilou@gmail.com> References: <20190521095948.8204-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 v10 14/20] gdbstub: Implement file io (F pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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, 26 insertions(+), 22 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 781f5882ac..b35acc679c 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1775,6 +1775,25 @@ 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) +{ + if (gdb_ctx->num_params >= 2 && gdb_ctx->s->current_syscall_cb) { + target_ulong ret, err; + + ret = (target_ulong)gdb_ctx->params[0].val_ull; + err = (target_ulong)gdb_ctx->params[1].val_ull; + gdb_ctx->s->current_syscall_cb(gdb_ctx->s->c_cpu, ret, err); + gdb_ctx->s->current_syscall_cb = NULL; + } + + if (gdb_ctx->num_params >= 3 && gdb_ctx->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; @@ -1916,28 +1935,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 = "L,L,o0" + }; + cmd_parser = &file_io_cmd_desc; } break; case 'g': From patchwork Tue May 21 09:59: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: 1102675 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="ARHVwM9r"; 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 457Wxw0xhjz9s1c for ; Tue, 21 May 2019 20:21:07 +1000 (AEST) Received: from localhost ([127.0.0.1]:50848 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1tK-0005Rf-0E for incoming@patchwork.ozlabs.org; Tue, 21 May 2019 06:21:06 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44904) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1ZO-0005vo-0J for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hT1ZM-0007os-0X for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:29 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:55959) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hT1ZK-0007mL-DI for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:27 -0400 Received: by mail-wm1-x341.google.com with SMTP id x64so2290487wmb.5 for ; Tue, 21 May 2019 03:00:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=gwyQsYX56ID1TewcmfUtZ1MdkZFKQMfuvtZW1avWGQ4=; b=ARHVwM9rTiPxLFWDyjVtMWx6us42wS9tdqC4KFcnnSQdNboG5yP7HeF9/Dwbwp0NZY F4X0DdqoUKqkAYR9ix4Gt8mzbEekjLpDfGwNB0EazcuSRkCFVMIiZQHlzYF0ylXIQZnX Bpn3Z/mMTIRpsX/LTonl76c0hq6DyrU1og8k2BGz/Xfr7ZB6Fw30l0gCjVh5ppZy0Kc8 HzvfJFelBK19s2fI/9T45ltTtNOloWyMKebBMKLSG1J0rU2MLtg2AsIWGf5Y3r7Pu2Ld vv05viV8XYgdz++JOtKrzhDPUw2sL+47eof25iXH0bcn6hGArO+vPy+upme7dsHPpV1v 1+yA== 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=gwyQsYX56ID1TewcmfUtZ1MdkZFKQMfuvtZW1avWGQ4=; b=FXWGT1gPZednR6ySzf5G//ZwF1tx7P8qMXnLxkyp7mXIx/EX+QexLiHR+thdcOIbgB zFPC5Rzujk067TECFXCS5KJQS/86QzRDSZnjAb5nWY0GARu5iGg85NL+WKH8glKFrSds hWMnLHZ4KjNxIecdA40fcSUc+JNJjOzv5Ss/kQCFJSmNv53ZVqcjSmhE+KBkjP1TbUMh PqEq8iVGgM6eGAw7qW0lgxZHm2OPQykcPDLMiFrGQc0r91Gb+DrotFdhMpaIYe7I8A+a I+fDw3Rwml6ytUwDSkUCm0Nl57P4VHkZrZ8rIIYABfqEJaa1GDfWlrx/YEy4Kej8lWZ5 Q+XQ== X-Gm-Message-State: APjAAAUZVkFxHWTG0qLaIaOCA9N6tk0tLzd7UG5I6yW2PNEbloDMJ+Oa RjlSo1nUm0ukU26Rs1ZcZoS+ewxP X-Google-Smtp-Source: APXvYqz1Qlk2Q1s2uBORILH4u2oruRhk6IId+X6ggWP9xi/p92ZM8i1YKphMdvu4lgDQBShO+xCU1Q== X-Received: by 2002:a7b:c7c7:: with SMTP id z7mr2940731wmk.72.1558432825238; Tue, 21 May 2019 03:00:25 -0700 (PDT) Received: from jondnuc.lan ([176.230.64.64]) by smtp.gmail.com with ESMTPSA id 65sm3080257wro.85.2019.05.21.03.00.24 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 21 May 2019 03:00:24 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Tue, 21 May 2019 12:59:43 +0300 Message-Id: <20190521095948.8204-16-arilou@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190521095948.8204-1-arilou@gmail.com> References: <20190521095948.8204-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 v10 15/20] gdbstub: Implement step (s pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 b35acc679c..a8b81121c5 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1794,6 +1794,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; @@ -1926,13 +1936,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 Tue May 21 09:59: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: 1102659 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="Wl7Y6Yru"; 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 457WgQ55XJz9s6w for ; Tue, 21 May 2019 20:08:34 +1000 (AEST) Received: from localhost ([127.0.0.1]:50534 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1hA-0002LJ-Jt for incoming@patchwork.ozlabs.org; Tue, 21 May 2019 06:08:32 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44906) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1ZO-0005vp-1a for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hT1ZM-0007pI-6a for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:29 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:36065) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hT1ZM-0007nx-0K for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:28 -0400 Received: by mail-wm1-x344.google.com with SMTP id j187so2218879wmj.1 for ; Tue, 21 May 2019 03:00:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=N6fV9vFZuFUbts5NVK6xRLuUvhBBupBkozAmmE2Nj1U=; b=Wl7Y6YruTmzODGkDRZas+Iyh3bwCgb2NYcM2wK57upRdGyP7OaYbAnUJwtJxNpOfSH JE2isT1Bq9CGRJp4OItghoXkNXB/zFQ9IpQ9GkELORsA0L72VV3LkypD/f1gNz32DcZS kvwiJCtP7FNOf8dkssG6MJx3Spl2fe8c1YVo70RRFp0Nns7CzNQtML8/ai77bL+Xu8o3 IJMYuGhQqCv/VA86MnSuP+c+R/pJ6x7FbArrpuu2LVHdwmdcFvxiw4b0HJmOFPA2J/Bb hjsDOw5FEeGXHqhLISIVhWcLAQGQfQx9OR9ZiqT8Y+nqnakCUUkQQFF9Ox3WKXJ0fcKf RJfQ== 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=N6fV9vFZuFUbts5NVK6xRLuUvhBBupBkozAmmE2Nj1U=; b=k8lYKjGsLFCK6IbEXtqazEgzojfMWZXik/sQ2kwP7eULdZF5zFe/saNqz9sPQut9jn iIz+8Cf+YnM+0quJmOTXYCmHP/ywoemwBC+3esdFYRhARUwxj4fi2eexlM8LQ9ER26Mk PsBxd3FjzC+mp6AODNcXDhfZzIGrWW/Ja/1qCZxFaDnEe3iLxtye54KzO8R3KdjPkD06 sVMkyIaRDnlskqqcdPBnMFsVMn/5lHUCMEZ6ATKT7mTjzq17zqlPlWPKJ+a6Qc/5Tw7/ ELhGiBlE7c4n4+Q9azg0JwkMqMSaum30WIXJqLzGKmTss7g3k7cbDGqij2rJwu4rZ/Cz jfwA== X-Gm-Message-State: APjAAAXEALEg5Y27PaHDtXoMwALzYCQ0P9ILmLGhghVgTPh06erHLvQe mBa+Ox6vxijBjTaVEQK2pgjG88RD X-Google-Smtp-Source: APXvYqyLlhIrXtwNSwEL2EpCG4GE6wQ9eDQ+leEIKhnJOzopNPEAExlpWcMCmAK3f5n60iMpxfZFWQ== X-Received: by 2002:a1c:2889:: with SMTP id o131mr2638865wmo.101.1558432826455; Tue, 21 May 2019 03:00:26 -0700 (PDT) Received: from jondnuc.lan ([176.230.64.64]) by smtp.gmail.com with ESMTPSA id 65sm3080257wro.85.2019.05.21.03.00.25 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 21 May 2019 03:00:26 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Tue, 21 May 2019 12:59:44 +0300 Message-Id: <20190521095948.8204-17-arilou@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190521095948.8204-1-arilou@gmail.com> References: <20190521095948.8204-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 v10 16/20] gdbstub: Implement v commands with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 a8b81121c5..3773b23581 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1804,6 +1804,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, ""); + } +} + +static void handle_v_attach(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + GDBProcess *process; + CPUState *cpu; + char thread_id[16]; + + pstrcpy(gdb_ctx->str_buf, sizeof(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; @@ -1811,7 +1911,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]; @@ -1860,66 +1960,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 Tue May 21 09:59: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: 1102676 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="Ug6dawcP"; 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 457WzQ2wr1z9s6w for ; Tue, 21 May 2019 20:22:26 +1000 (AEST) Received: from localhost ([127.0.0.1]:50859 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1ua-0006gk-FX for incoming@patchwork.ozlabs.org; Tue, 21 May 2019 06:22:24 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44992) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1ZS-0005zc-Eb for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hT1ZQ-0007tn-0j for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:34 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:51281) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hT1ZO-0007qR-2S for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:31 -0400 Received: by mail-wm1-x343.google.com with SMTP id c77so2301085wmd.1 for ; Tue, 21 May 2019 03:00:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=sP4d58yWNnupURYwoPvCriT7epyMrZ73O7L1x6qXUYA=; b=Ug6dawcPi6G1eQP+9f/jDqCmvf3RUONL+4WvKA2JNoscgLTXQk5pIPb46Mk8n22QKA 0qDeLEj73sCNQF36seCWg86mKvS4lpIh6rDMFXgOQ/uynKvHNQ/weF3rtSqaMiFwqwsS Vjkz8V/OoC3CtqoEEZ/u7qvoapreUpPKOqfVWdrp0WNrdlEsl2/Us92BNWZdQOa/7Oya 9SG4e2cvffkwqLIPe+G2goRhvWW13+i51fxAlbqeG0iFrkQ7BxH/60qlRY1IGWfEiDlA mtmKyr4lbdMZzVFSwjAJlBFE0Ca6nwUcbr85FuT4YVBonPFV4YmlBZl52MsKxKk/s9ZQ X7SA== 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=sP4d58yWNnupURYwoPvCriT7epyMrZ73O7L1x6qXUYA=; b=Xz/WcrSi7QB/QOd3oA+kmLE8FXCjODHdC+iQg56jxdPn3vyi4AOTOeG6igDpOCtpG4 N2HN7b4qjfFPFnyUWBwVItQlPKpYCeR84GiSuszj8Pv0lBR75lSFrpXiuqOHiXRafT2R 16GKfwvkcxnVMbo2qRl+uuROQ5P79kwYNrDSxXiXPaBz/WF0PhPpVFS3R8a2OihrJC2T Lf8WCa54Lhk9OmXBGu5jX+p7x5NVFVCtPdxRxLmsK5UOaWi3poRwlv50lfr/rdU/KRfk PbbXq/WYXalhDy/+ggpmk7PHTDSmCERkJYZI3QfKG7e5lw8aJt2Rw6D9AmP8o86iR3TP uG+g== X-Gm-Message-State: APjAAAWhUnybeU0mdry+2zQpriFO3PTbFwb7EtfrevK2FPWA0qXT7cuh LrfoxAC7LbPtEj8rzXgps2//YfcF X-Google-Smtp-Source: APXvYqxW3A3wa6jdtX4E0XaC6pooQ4KQ4cjDZskR4lJkECP9AAx6tJo9UGVt7SAH+HIq8Vp7fXmmYg== X-Received: by 2002:a7b:ca4c:: with SMTP id m12mr2665068wml.31.1558432828557; Tue, 21 May 2019 03:00:28 -0700 (PDT) Received: from jondnuc.lan ([176.230.64.64]) by smtp.gmail.com with ESMTPSA id 65sm3080257wro.85.2019.05.21.03.00.26 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 21 May 2019 03:00:28 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Tue, 21 May 2019 12:59:45 +0300 Message-Id: <20190521095948.8204-18-arilou@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190521095948.8204-1-arilou@gmail.com> References: <20190521095948.8204-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 v10 17/20] gdbstub: Implement generic set/query (Q/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" The generic set/query packets contains implementation for varioius sub-commands which are required for GDB and also additional commands which are QEMU specific. To see which QEMU specific commands are available use the command gdb> maintenance packet qqemu.Supported Currently the only implemented QEMU specific command is the command that sets the single step behavior. gdb> maintenance packet qqemu.sstepbits Will display the MASK bits used to control the single stepping. gdb> maintenance packet qqemu.sstep Will display the current value of the mask used when single stepping. gdb> maintenance packet Qqemu.sstep:HEX_VALUE Will change the single step mask. Signed-off-by: Jon Doron --- gdbstub.c | 559 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 373 insertions(+), 186 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 3773b23581..57a05fd6a4 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 @@ -1904,18 +1896,368 @@ static void handle_v_commands(GdbCmdContext *gdb_ctx, void *user_ctx) } } -static int gdb_handle_packet(GDBState *s, const char *line_buf) +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; - uint32_t pid, tid; - int ch, type; + + 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 void handle_query_qemu_supported(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + put_packet(gdb_ctx->s, "sstepbits;sstep"); +} + +static GdbCmdParseEntry gdb_gen_query_set_common_table[] = { + /* Order is important if has same prefix */ + { + .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", + }, + { + .handler = handle_query_qemu_supported, + .cmd = "qemu.Supported", + }, +}; + +static GdbCmdParseEntry gdb_gen_set_table[] = { + /* Order is important if has same prefix */ + { + .handler = handle_set_qemu_sstep, + .cmd = "qemu.sstep:", + .cmd_startswith = 1, + .schema = "l0" + }, +}; + +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 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; + } + + if (process_string_cmd(gdb_ctx->s, NULL, gdb_ctx->params[0].data, + gdb_gen_set_table, + ARRAY_SIZE(gdb_gen_set_table))) { + put_packet(gdb_ctx->s, ""); + } +} + +static 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]; - target_ulong addr, len; const GdbCmdParseEntry *cmd_parser = NULL; trace_gdbstub_io_command(line_buf); @@ -2117,183 +2459,28 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) } break; case 'q': - 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; + { + static const GdbCmdParseEntry gen_query_cmd_desc = { + .handler = handle_gen_query, + .cmd = "q", + .cmd_startswith = 1, + .schema = "s0" + }; + cmd_parser = &gen_query_cmd_desc; } - if (is_query_packet(p, "Attached", ':')) { - put_packet(s, GDB_ATTACHED); - break; + break; + case 'Q': + { + 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 Tue May 21 09:59: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: 1102667 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="VL9b2Xsv"; 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 457Wl650BVz9sBV for ; Tue, 21 May 2019 20:11:45 +1000 (AEST) Received: from localhost ([127.0.0.1]:50607 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1kE-00054P-VV for incoming@patchwork.ozlabs.org; Tue, 21 May 2019 06:11:43 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44951) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1ZR-0005yZ-75 for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hT1ZQ-0007u7-3g for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:33 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:37442) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hT1ZP-0007ru-TA for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:32 -0400 Received: by mail-wr1-x442.google.com with SMTP id e15so17872168wrs.4 for ; Tue, 21 May 2019 03:00:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+NF9Yo7d6jp3qeQ6UNfGvcDfxpGOYkZyN8rNP8o5Qo8=; b=VL9b2Xsv/uylVeCYuRqb9dKPxzfF5WehXDN2bOkbi4J1v3j7wWGDBXnAZgv9vPEYkK pG5rU/Ek+8mUGPgxDxKeN6PG50oQiOK4wmV9KKTAzm1qyTmqwLNwZjl0bjcB0xSgr0f0 HetWXbUJHlII75cM3OjPIeRbb0OyCJ91J1RapknfPOSXNOnHmUjClP/C8lTzuyQsKThe agwQKgGbG8i4oaM7hTW3yeQups4XJCA9CeFoKucfZnQUFVH9GRSTTjY+eEPg1OnDEnPN vTZi/h35T/w2d3Ob7LKMdGEcZ6fReqikSGCRUYjjnP33cbcGqTxxAVwqiD4JhIf6PR3/ FLjQ== 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=+NF9Yo7d6jp3qeQ6UNfGvcDfxpGOYkZyN8rNP8o5Qo8=; b=BRMs0/R4tBwf5JePKd1zmxm5msEWke0GEjRQm6sbQez11F4a2ndmaODL5YKKCSLacg 5wWRSdEU2ykkzyEqWJhaZnhSHFeK/aKpsydK/lHWOkSTz2ilZqVJA8j8ASgzIQZB6LvR 3P8JqwUeEu4XayeXKiExG+i6yjqX/WC9/x6GoM3Zx/gj9jhS5CwApH6iYTL5wGiaAI9W 8Wgam33LuOUONlScUX4/k4itHAeHe3YmWXdS/0owlZzsja0yrrbEwRziIO2hGdab29O7 qHPLs/IB77FSdQbWGmRC74gdhEKzktj+4HJfEfSkYg7d9yMd595mrNyKKQrFS68G6Px7 pRYA== X-Gm-Message-State: APjAAAW2tgkRKR1CqF6dvq94Y1YU8YYpuRLdJph+8xIMn1W8c/Q+tvUZ 6XPIOMwgOKt9DbFGkSgsb2Jcvx7a X-Google-Smtp-Source: APXvYqxBqlYCzfNihFixJF+RzsPjYrlGgUqJQ+Jwik/gYbbkylWtZzQV4ZA364FNng8j4gHDrqZmwQ== X-Received: by 2002:adf:ce0c:: with SMTP id p12mr22873525wrn.19.1558432829914; Tue, 21 May 2019 03:00:29 -0700 (PDT) Received: from jondnuc.lan ([176.230.64.64]) by smtp.gmail.com with ESMTPSA id 65sm3080257wro.85.2019.05.21.03.00.28 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 21 May 2019 03:00:29 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Tue, 21 May 2019 12:59:46 +0300 Message-Id: <20190521095948.8204-19-arilou@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190521095948.8204-1-arilou@gmail.com> References: <20190521095948.8204-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 v10 18/20] 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" Note: The user-mode thread-id has been correctly reported since bd88c780e6 Signed-off-by: Jon Doron --- gdbstub.c | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 57a05fd6a4..097b7d1231 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -2251,13 +2251,29 @@ static void handle_gen_set(GdbCmdContext *gdb_ctx, void *user_ctx) } } +static void handle_target_halt(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + char thread_id[16]; + + 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 an 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); @@ -2269,15 +2285,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 Tue May 21 09:59: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: 1102669 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="sxsyzgRx"; 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 457WmP23y8z9s6w for ; Tue, 21 May 2019 20:12:53 +1000 (AEST) Received: from localhost ([127.0.0.1]:50621 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1lL-0006H9-5Y for incoming@patchwork.ozlabs.org; Tue, 21 May 2019 06:12:51 -0400 Received: from eggs.gnu.org ([209.51.188.92]:44960) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1ZR-0005yk-E7 for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hT1ZQ-0007uU-Bx for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:33 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:38612) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hT1ZQ-0007tG-5C for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:32 -0400 Received: by mail-wr1-x444.google.com with SMTP id d18so17870006wrs.5 for ; Tue, 21 May 2019 03:00:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=LsYaQ4COmc6e9Lf4V+iWhN6mU2NGrUC/Gr04d6oOij8=; b=sxsyzgRx3abVJf9f3wedRCyqCgXjtMhSWBglozP+vnpB0/XGJbKBv3vDtCBt6sBZOo M0Azg50BHpHJH88FcFuLu9BhraikQ+PA32pH3mTqz4BGju2bwrdERQlApdNacG71fm1E Jc+f31S+vreTUYpa4bMxETmK75KUWbd/gN7/YtbIto+mm7Cx4R00+e7qMdY566zC1iTq DnWQFBREWyAYMfKolhqp0PA04+kkIUZ9dQvowFbwyiS2MJjGgmiHQpQMjBGYZt+wFYxJ 84p6tcCZdG7iqigCYiV9IPVOoKr4eNjtNpNS4MBeaXJalzvFwiJ+jMan0VKv9OuO2QHz glkg== 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=LsYaQ4COmc6e9Lf4V+iWhN6mU2NGrUC/Gr04d6oOij8=; b=C8LdGChyf9cBYOvit3hy+2mTywBze2cCiQl/lHG+sTkTqxDYdZGWwINgiszqs/UgpH +/z/mgy+L1onfI09OhC+i1A+0O7dk0kHaGcCTjs3/UtFw1D5LdO9pu0t8fWNfGLzmhnO bgQ+Tot8QPdHZnR9z8GtzGgFnUoL0tVE6JM2pBSJvX4gjpbFXnbkDghXuSZIcrSiJEBg yF71nx57y7PCI95E9gI2Re1RA523sy9ZH/g0toFfm4qdsj1pyzhMUGCeOwaMmIrM+dwf MnvB6IlKX6vZlhMfmAbGyN9+xLjU5Ov17tMvLyQnqK5xfLkCtBSpqmgZIf9cm1sbvsJj UcTw== X-Gm-Message-State: APjAAAXWhiTgWkzbdgovyhQOmeLC7m0xaO4wElW7F/yX2kfL1CnumwP2 sR/phUBVZFxloaMmEtl0cm+7fnuJ X-Google-Smtp-Source: APXvYqwxkPLDmMhEqfOW3fx5qkihjmgfvCfQPor/HN8aBz1tgQYWKCpZzHfwo4dWTtw23OwZfvKvwQ== X-Received: by 2002:a5d:640d:: with SMTP id z13mr25201789wru.299.1558432831097; Tue, 21 May 2019 03:00:31 -0700 (PDT) Received: from jondnuc.lan ([176.230.64.64]) by smtp.gmail.com with ESMTPSA id 65sm3080257wro.85.2019.05.21.03.00.30 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 21 May 2019 03:00:30 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Tue, 21 May 2019 12:59:47 +0300 Message-Id: <20190521095948.8204-20-arilou@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190521095948.8204-1-arilou@gmail.com> References: <20190521095948.8204-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 v10 19/20] 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 097b7d1231..9dd934a079 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -2270,17 +2270,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; @@ -2497,8 +2491,7 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) break; default: /* put empty packet */ - buf[0] = '\0'; - put_packet(s, buf); + put_packet(s, ""); break; } From patchwork Tue May 21 09:59: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: 1102671 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="uj377cmo"; 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 457Wqf3h8gz9s1c for ; Tue, 21 May 2019 20:15:42 +1000 (AEST) Received: from localhost ([127.0.0.1]:50658 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1o4-00016l-DH for incoming@patchwork.ozlabs.org; Tue, 21 May 2019 06:15:40 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45006) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hT1ZT-000607-45 for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hT1ZR-0007wm-PF for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:35 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:40040) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hT1ZR-0007vV-Hx for qemu-devel@nongnu.org; Tue, 21 May 2019 06:00:33 -0400 Received: by mail-wm1-x342.google.com with SMTP id 15so2208026wmg.5 for ; Tue, 21 May 2019 03:00:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3B88NpQFOs8DC+2595MWdyNpg+oQZ5roeXs0f+YNp/4=; b=uj377cmovNC3MowTVujPc6sQKKALoIIxOMeue2auAJvlqoV8yonCzPxqLQlRpPTN0C ITNCsb3L5QqafH0Ie3OSIgKphCZx084dzi2Mzb+VlyIwVrryz0b9gsb5PwaHaTPGodzz KX5AiksawrPKSp1n933M9WdXM4Y5dVsLKnIRPy7zQCwQ3zKQ7vn17yk8jgCG5rfw/BrA fQOgbVtv1rdsX+iG6XZoChoEfUZ2/Lo4bijcPrACAEUjL8j6iv/ZMBXHTcb2m4xp1GBM QEOONFdcKZC6HpNaMnLvd31pq/Vt6T0wHULL0yy7OrecSeBXub5Z8vY7KvR2WM/Joyl9 vZ+w== 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=3B88NpQFOs8DC+2595MWdyNpg+oQZ5roeXs0f+YNp/4=; b=JdRBYqlRouy+KNpZ3hr49j1lnPp2CXb1XzSbxT+epBu3Plw72H6Nl/D0GpIvaOUalT pjxPxCWsvalfvc7M2CWQ54nbokESPMNuyBQdnPhqOgkMZqYesR67nwEPTdjIT7YUpa7B iW90I6NnwHTUtNEOtB0lI4L+MZg87+gPZUl8HBtD4ZreGQex+B21v+0A+L6cEp0QsmWw Tv7MLdqALo1Oy6zHmNEmMMgygnATV7XklRXMWmQMGeh6FH/TA5TFARSo4c4Yw5gauqja c9tjtGyBrkTiwUb4FPwmuDKbI5cTjTnoxwSqgwIiVCUFvIjHJnFZVwlC1VP2pVdxmnxG 9b3A== X-Gm-Message-State: APjAAAWGHPNCms3/41PvIWx+bUi1TuGd3TnIB2ONHLmqKEauogBwWrjL CcSp7ULg5yAKU6ZfN3QKl41KGXcX X-Google-Smtp-Source: APXvYqwBMYC2cUwd/ype5NAqAB60UJEFVmeDNqJ1rfi6dcHCugODJZ9tyy3V2ahfBeOYwfbejMFOaw== X-Received: by 2002:a1c:4486:: with SMTP id r128mr2862041wma.90.1558432832464; Tue, 21 May 2019 03:00:32 -0700 (PDT) Received: from jondnuc.lan ([176.230.64.64]) by smtp.gmail.com with ESMTPSA id 65sm3080257wro.85.2019.05.21.03.00.31 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 21 May 2019 03:00:32 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Tue, 21 May 2019 12:59:48 +0300 Message-Id: <20190521095948.8204-21-arilou@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190521095948.8204-1-arilou@gmail.com> References: <20190521095948.8204-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 v10 20/20] gdbstub: Implement qemu physical memory mode X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alex.bennee@linaro.org, Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Add a new query/set which changes the memory GDB sees to physical memory only. gdb> maint packet qqemu.PhyMemMode will reply the current phy_mem_mode state (1 for enabled, 0 for disabled) gdb> maint packet Qqemu.PhyMemMode:1 Will make GDB read/write only to physical memory, set to 0 to disable Signed-off-by: Jon Doron --- gdbstub.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 9dd934a079..c9269319d8 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -46,11 +46,27 @@ #define GDB_ATTACHED "1" #endif +#ifndef CONFIG_USER_ONLY +static int phy_memory_mode; +#endif + static inline int target_memory_rw_debug(CPUState *cpu, target_ulong addr, uint8_t *buf, int len, bool is_write) { - CPUClass *cc = CPU_GET_CLASS(cpu); + CPUClass *cc; +#ifndef CONFIG_USER_ONLY + if (phy_memory_mode) { + if (is_write) { + cpu_physical_memory_write(addr, buf, len); + } else { + cpu_physical_memory_read(addr, buf, len); + } + return 0; + } +#endif + + cc = CPU_GET_CLASS(cpu); if (cc->memory_rw_debug) { return cc->memory_rw_debug(cpu, addr, buf, len, is_write); } @@ -2118,8 +2134,36 @@ static void handle_query_attached(GdbCmdContext *gdb_ctx, void *user_ctx) static void handle_query_qemu_supported(GdbCmdContext *gdb_ctx, void *user_ctx) { - put_packet(gdb_ctx->s, "sstepbits;sstep"); + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), "sstepbits;sstep"); +#ifndef CONFIG_USER_ONLY + pstrcat(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), ";PhyMemMode"); +#endif + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} + +#ifndef CONFIG_USER_ONLY +static void handle_query_qemu_phy_mem_mode(GdbCmdContext *gdb_ctx, + void *user_ctx) +{ + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), "%d", phy_memory_mode); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} + +static void handle_set_qemu_phy_mem_mode(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + if (!gdb_ctx->num_params) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + if (!gdb_ctx->params[0].val_ul) { + phy_memory_mode = 0; + } else { + phy_memory_mode = 1; + } + put_packet(gdb_ctx->s, "OK"); } +#endif static GdbCmdParseEntry gdb_gen_query_set_common_table[] = { /* Order is important if has same prefix */ @@ -2201,6 +2245,12 @@ static GdbCmdParseEntry gdb_gen_query_table[] = { .handler = handle_query_qemu_supported, .cmd = "qemu.Supported", }, +#ifndef CONFIG_USER_ONLY + { + .handler = handle_query_qemu_phy_mem_mode, + .cmd = "qemu.PhyMemMode", + }, +#endif }; static GdbCmdParseEntry gdb_gen_set_table[] = { @@ -2211,6 +2261,14 @@ static GdbCmdParseEntry gdb_gen_set_table[] = { .cmd_startswith = 1, .schema = "l0" }, +#ifndef CONFIG_USER_ONLY + { + .handler = handle_set_qemu_phy_mem_mode, + .cmd = "qemu.PhyMemMode:", + .cmd_startswith = 1, + .schema = "l0" + }, +#endif }; static void handle_gen_query(GdbCmdContext *gdb_ctx, void *user_ctx)