From patchwork Wed Apr 24 19:38: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: 1090399 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="UaNgZHn3"; 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 44q9d25LrNz9s4Y for ; Thu, 25 Apr 2019 05:39:47 +1000 (AEST) Received: from localhost ([127.0.0.1]:46282 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNk8-0003at-9F for incoming@patchwork.ozlabs.org; Wed, 24 Apr 2019 15:39:44 -0400 Received: from eggs.gnu.org ([209.51.188.92]:56247) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNjm-0003ao-7g for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJNji-0003eO-JW for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:20 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:44366) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJNji-0003da-7r for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:18 -0400 Received: by mail-wr1-x444.google.com with SMTP id c5so17891224wrs.11 for ; Wed, 24 Apr 2019 12:39: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:mime-version :content-transfer-encoding; bh=IiZwt5zDLPIRu6kHlSDJ1N64973ynZWO1IliJrwiIQ0=; b=UaNgZHn3xYbH2m37IA4C9LsRiIJb+DMgTfNgP9S3n0JDzfMBg8x6X8ZqUHXayjaV9b UOnrZ8l+Bylcnf6LvK9/tDLnaNVUnmYJ7305amzWJXbgZoxmXSdqUqvZ+NAROYaduxSs eamGFs1rEbX2e0KX0/CwWvewvCXhLV/mvcXXVY/X/2LHd6pKHgHUGDvoFN0FJ31nAk4v kmqPYUi3cGpqR0cfYOnIaxAE2IzvA6nQ5D5yhvv7odvyGaqCQMOofrZrcxZRiOyavPl6 SnmFJPNQCo+JUjxyWyswR5xSIbfU5BnfmhXXiUdt6/HdY67qiAiZZOzO5Ljqw5DJGZs1 KcmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=IiZwt5zDLPIRu6kHlSDJ1N64973ynZWO1IliJrwiIQ0=; b=Tnd/aMvvMTTSdq6b7059yILh8lCpMpwWAfdj+6IDIJAk9sjRAjAkOEq0rnqOoY5zC7 Z+vf/aB/N0IxAYSAro68JtkUkDpsa9iBSqYaX24KX0qfPwUTVOFjMuMHaz12qnAoTKtD BiJF3/sNQHk3YkPrcYZtSWUYtQiTkKhAIQvaswy857OYddcPL/s1vd7F84baac9LLRmD iqKMJ97wKJiLTC3YU1kMU93yOC9YccpaYd5eKveeRXqqpSIhQ3jPKvk0L9zO10jNR1q7 qteGFyDcu+pYXeu4IuUTBEFv0iBroCMPm8ZopLQkGx1ETjF9H8PPRY8pp1qK9sMJ32+r wKtg== X-Gm-Message-State: APjAAAVnJiJ7Y/PPhqUhp+MuP69coxAJyFsMvU1H6lQfJmkaLTWCL3G4 e1qmO0VlP1Ea7dSMjvR+8cTZB0RB X-Google-Smtp-Source: APXvYqwOs+wylNw2w3Z0GnwPhLdRShKEaOvPErJ6BS8VCh4vJvt2AJlqGTj0wbyeZknR3sAyOe4Ipg== X-Received: by 2002:adf:e901:: with SMTP id f1mr18281319wrm.144.1556134755449; Wed, 24 Apr 2019 12:39:15 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id n18sm16281372wrt.16.2019.04.24.12.39.12 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 12:39:13 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 22:38:39 +0300 Message-Id: <20190424193859.31817-1-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::444 Subject: [Qemu-devel] [PATCH v5 01/21] gdbstub: Add infrastructure to parse cmd packets X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 200 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 200 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index d54abd17cc..3308279fa8 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1268,6 +1268,206 @@ out: return res; } +typedef union GdbCmdVariant { + const char *data; + uint8_t opcode; + unsigned long val_ul; + unsigned long long val_ull; + struct { + GDBThreadIdKind kind; + uint32_t pid; + uint32_t tid; + } thread_id; +} GdbCmdVariant; + +static const char *cmd_next_param(const char *param, const char delimiter) +{ + static const char all_delimiters[] = ",;:="; + char curr_delimiters[2] = {0}; + const char *delimiters; + + if (delimiter == '?') { + delimiters = all_delimiters; + } else if (delimiter == '0') { + return strchr(param, '\0'); + } else if (delimiter == '.' && *param) { + return param + 1; + } else { + curr_delimiters[0] = delimiter; + delimiters = curr_delimiters; + } + + param += strcspn(param, delimiters); + if (*param) { + param++; + } + return param; +} + +static int cmd_parse_params(const char *data, const char *schema, + GdbCmdVariant *params, int *num_params) +{ + int curr_param; + const char *curr_schema, *curr_data; + + *num_params = 0; + + if (!schema) { + return 0; + } + + curr_schema = schema; + curr_param = 0; + curr_data = data; + while (curr_schema[0] && curr_schema[1] && *curr_data) { + switch (curr_schema[0]) { + case 'l': + if (qemu_strtoul(curr_data, &curr_data, 16, + ¶ms[curr_param].val_ul)) { + return -EINVAL; + } + curr_param++; + curr_data = cmd_next_param(curr_data, curr_schema[1]); + break; + case 'L': + if (qemu_strtou64(curr_data, &curr_data, 16, + (uint64_t *)¶ms[curr_param].val_ull)) { + return -EINVAL; + } + curr_param++; + curr_data = cmd_next_param(curr_data, curr_schema[1]); + break; + case 's': + params[curr_param].data = curr_data; + curr_param++; + curr_data = cmd_next_param(curr_data, curr_schema[1]); + break; + case 'o': + params[curr_param].opcode = *(uint8_t *)curr_data; + curr_param++; + curr_data = cmd_next_param(curr_data, curr_schema[1]); + break; + case 't': + params[curr_param].thread_id.kind = + read_thread_id(curr_data, &curr_data, + ¶ms[curr_param].thread_id.pid, + ¶ms[curr_param].thread_id.tid); + curr_param++; + curr_data = cmd_next_param(curr_data, curr_schema[1]); + break; + case '?': + curr_data = cmd_next_param(curr_data, curr_schema[1]); + break; + default: + return -EINVAL; + } + curr_schema += 2; + } + + *num_params = curr_param; + return 0; +} + +typedef struct GdbCmdContext { + GDBState *s; + GdbCmdVariant *params; + int num_params; + uint8_t mem_buf[MAX_PACKET_LENGTH]; + char str_buf[MAX_PACKET_LENGTH + 1]; +} GdbCmdContext; + +typedef void (*GdbCmdHandler)(GdbCmdContext *gdb_ctx, void *user_ctx); + +/* + * cmd_startswith -> cmd is compared using startswith + * cmd_full_match -> cmd is compared using strcmp + * + * + * schema definitions: + * Each schema parameter entry consists of 2 chars, + * the first char represents the parameter type handling + * the second char represents the delimiter for the next parameter + * + * Currently supported schema types: + * 'l' -> unsigned long (stored in .val_ul) + * 'L' -> unsigned long long (stored in .val_ull) + * 's' -> string (stored in .data) + * 'o' -> single char (stored in .opcode) + * 't' -> thread id (stored in .thread_id) + * '?' -> skip according to delimiter + * + * Currently supported delimiters: + * '?' -> Stop at any delimiter (",;:=\0") + * '0' -> Stop at "\0" + * '.' -> Skip 1 char unless reached "\0" + * Any other value is treated as the delimiter value itself + */ +typedef struct GdbCmdParseEntry { + GdbCmdHandler handler; + const char *cmd; + union { + int flags; + struct { + int cmd_startswith:1; + int cmd_full_match:1; + }; + }; + const char *schema; +} GdbCmdParseEntry; + +static inline int startswith(const char *string, const char *pattern) +{ + return !strncmp(string, pattern, strlen(pattern)); +} + +__attribute__((unused)) static int process_string_cmd( + GDBState *s, void *user_ctx, const char *data, + const GdbCmdParseEntry *cmds, int num_cmds); + +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; + GdbCmdContext gdb_ctx; + + if (!cmds) { + return -1; + } + + for (i = 0; i < num_cmds; i++) { + if (!cmds[i].handler || !cmds[i].cmd || + (cmds[i].cmd_startswith && !startswith(data, cmds[i].cmd)) || + (cmds[i].cmd_full_match && strcmp(data, cmds[i].cmd))) { + continue; + } + + max_num_params = 0; + if (cmds[i].schema) { + schema_len = strlen(cmds[i].schema); + if (schema_len % 2) { + return -2; + } + + max_num_params = schema_len / 2; + } + + gdb_ctx.params = + (GdbCmdVariant *)alloca(sizeof(*gdb_ctx.params) * max_num_params); + memset(gdb_ctx.params, 0, sizeof(*gdb_ctx.params) * max_num_params); + + if (cmd_parse_params(&data[strlen(cmds[i].cmd)], cmds[i].schema, + gdb_ctx.params, &gdb_ctx.num_params)) { + return -1; + } + + gdb_ctx.s = s; + cmds[i].handler(&gdb_ctx, user_ctx); + return 0; + } + + return -1; +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; From patchwork Wed Apr 24 19:38: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: 1090401 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="ZD12ZYLP"; 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 44q9dy51B2z9s4Y for ; Thu, 25 Apr 2019 05:40:38 +1000 (AEST) Received: from localhost ([127.0.0.1]:46286 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNky-0003ny-LI for incoming@patchwork.ozlabs.org; Wed, 24 Apr 2019 15:40:36 -0400 Received: from eggs.gnu.org ([209.51.188.92]:56295) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNk5-0003l2-UX for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJNk1-0003uO-5s for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:41 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:52027) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJNjp-0003fZ-0e for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:28 -0400 Received: by mail-wm1-x343.google.com with SMTP id 4so6107302wmf.1 for ; Wed, 24 Apr 2019 12:39:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0qJN6185ODZeDOdkkrEIq0s8E30UIRJZdf625wY6AUY=; b=ZD12ZYLP2H8UkUEkbWvZhzrdiK5Mpf9PiAgHMJSkJhstV+2UgIgfgklobb9SwohsMh 0H1WGtkm7yJ5DqC42jR+RGRWD9+DbuePD+TsmWGXFwzfYCC9BM1GvH8UNwCVcDOXcuj7 1XNZaXfAIYeOH9ocmMqvK26pQ5E0Rz5gnOh1rsIQIwRAAgDDn8WJSezRoVBmWcSZavj9 XbT5c9+2u0iRCmGqTJf9SwtBYzgt2Kza8P5l7qHccQzXIseHGrDv4Zq8JNB0xGWnXUX4 9M99fBa/RV4jdStrPRvbGXTL/bhH3FQV2nOuZ4MfXF4UDPgbEif6kkDiyJXGCSF3d7a+ eWZw== 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=0qJN6185ODZeDOdkkrEIq0s8E30UIRJZdf625wY6AUY=; b=kFQLNEQWWJX1tEU0caKwB6KJSpdCP4dNwJdEwFFNFtCs8CDGuZO7xEXbHVlveF2vyU 7XRcH++Fi8t5befVVxDZ1Equdu0KPE10OO81GcfWHit1ZiDcRa+vc77q8FW3yCvQrlWe XWyPhKM95EnuNRNe1aLM6qeO5q+tsnn2pCw2ctXGThN/3ycp7H/YRdjYXC85YdDFlaau rm42IJbRecDzMd6otwTQA4UhXyQvT9Sp1ONGRaCOFd/rRwYFmEUge05O/NAGnZVEPQ9g +14KX3W9taCdWdKUAKZqoNAZq++9ym6HrFQ6Ki+XNNkG207ggUE+sQwHI4PrSiEASLtN /jPw== X-Gm-Message-State: APjAAAV2g68EmvmdtyZENS/omSbogcGORYqI2kxqTxgyt3UlEKTUIPpx Im0brAr+P7FguSn/J/XxWN00xFiZ X-Google-Smtp-Source: APXvYqxdvsRPsoNPchc8ImncImt1Ob2CeA2Z7UQZu8pckopqH1eK76fmLs6GcbmZP5prd3EMXgNQ/g== X-Received: by 2002:a1c:f901:: with SMTP id x1mr560445wmh.136.1556134758100; Wed, 24 Apr 2019 12:39:18 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id n18sm16281372wrt.16.2019.04.24.12.39.15 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 12:39:16 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 22:38:40 +0300 Message-Id: <20190424193859.31817-2-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424193859.31817-1-arilou@gmail.com> References: <20190424193859.31817-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 v5 02/21] gdbstub: Implement deatch (D pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-otff-by: Jon Doron --- gdbstub.c | 89 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 50 insertions(+), 39 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 3308279fa8..fdad1ac466 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1420,10 +1420,6 @@ static inline int startswith(const char *string, const char *pattern) return !strncmp(string, pattern, strlen(pattern)); } -__attribute__((unused)) static int process_string_cmd( - GDBState *s, void *user_ctx, const char *data, - const GdbCmdParseEntry *cmds, int num_cmds); - static int process_string_cmd(GDBState *s, void *user_ctx, const char *data, const GdbCmdParseEntry *cmds, int num_cmds) { @@ -1468,6 +1464,41 @@ static int process_string_cmd(GDBState *s, void *user_ctx, const char *data, return -1; } +static void handle_detach(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + GDBProcess *process; + GDBState *s = gdb_ctx->s; + uint32_t pid = 1; + + if (s->multiprocess) { + if (!gdb_ctx->num_params) { + put_packet(s, "E22"); + return; + } + + pid = gdb_ctx->params[0].val_ul; + } + + process = gdb_get_process(s, pid); + gdb_process_breakpoint_remove_all(s, process); + process->attached = false; + + if (pid == gdb_get_cpu_pid(s, s->c_cpu)) { + s->c_cpu = gdb_first_attached_cpu(s); + } + + if (pid == gdb_get_cpu_pid(s, s->g_cpu)) { + s->g_cpu = gdb_first_attached_cpu(s); + } + + if (!s->c_cpu) { + /* No more process attached */ + gdb_syscall_mode = GDB_SYS_DISABLED; + gdb_continue(s); + } + put_packet(s, "OK"); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1482,6 +1513,7 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) uint8_t *registers; target_ulong addr, len; GDBThreadIdKind thread_kind; + const GdbCmdParseEntry *cmd_parser = NULL; trace_gdbstub_io_command(line_buf); @@ -1582,42 +1614,15 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) error_report("QEMU: Terminated via GDBstub"); exit(0); case 'D': - /* Detach packet */ - pid = 1; - - if (s->multiprocess) { - unsigned long lpid; - if (*p != ';') { - put_packet(s, "E22"); - break; - } - - if (qemu_strtoul(p + 1, &p, 16, &lpid)) { - put_packet(s, "E22"); - break; - } - - pid = lpid; - } - - process = gdb_get_process(s, pid); - gdb_process_breakpoint_remove_all(s, process); - process->attached = false; - - if (pid == gdb_get_cpu_pid(s, s->c_cpu)) { - s->c_cpu = gdb_first_attached_cpu(s); - } - - if (pid == gdb_get_cpu_pid(s, s->g_cpu)) { - s->g_cpu = gdb_first_attached_cpu(s); - } - - if (s->c_cpu == NULL) { - /* No more process attached */ - gdb_syscall_mode = GDB_SYS_DISABLED; - gdb_continue(s); + { + static const GdbCmdParseEntry detach_cmd_desc = { + .handler = handle_detach, + .cmd = "D", + .cmd_startswith = 1, + .schema = "?.l0" + }; + cmd_parser = &detach_cmd_desc; } - put_packet(s, "OK"); break; case 's': if (*p != '\0') { @@ -1990,6 +1995,12 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) put_packet(s, buf); break; } + + if (cmd_parser && + process_string_cmd(s, NULL, line_buf, cmd_parser, 1)) { + put_packet(s, ""); + } + return RS_IDLE; } From patchwork Wed Apr 24 19:38: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: 1090410 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="s6Wu3MfB"; 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 44q9hF6NLZz9s4Y for ; Thu, 25 Apr 2019 05:42:37 +1000 (AEST) Received: from localhost ([127.0.0.1]:46330 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNmt-0005tO-Qq for incoming@patchwork.ozlabs.org; Wed, 24 Apr 2019 15:42:35 -0400 Received: from eggs.gnu.org ([209.51.188.92]:56275) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNk3-0003k3-S0 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJNjw-0003q6-6r for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:35 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:38789) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJNjn-0003gR-4u for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:25 -0400 Received: by mail-wm1-x341.google.com with SMTP id w15so6717313wmc.3 for ; Wed, 24 Apr 2019 12:39:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=38LnIcypIDjektyoZrBn3/LYujk4iHNznA1yMdifAQQ=; b=s6Wu3MfBOmOKkulllTgcODgWpCK04ZsIUKFuDw1Izx/9j6sSt43e6MXcsALMRqIPjA bgiTOqgPnyISLgzGAogGKQbjaC0XumjOlbCY2z8aJkmfbA3vnJn36XyxBl+YIS8cugyJ 2wp3HvgsMyF0KfNXNN8fO1+YS3ZuV0YJNAAXtE8GwfnSf09WH0CB5D7EYkbo/x34Yfyq M4GuPag5J0omdAdVNJqs3KD0Y6zytLe4fPz8IlpCdl/lXKwzzrfp9EVvKf1O5NsArdmG d1cSsFpqXKBD/dsgWPE4kw4nVTKD2h/rWU2sdsr6d3lvw0w2ZkRsyIihyYhvjkwT7KrS NHag== 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=38LnIcypIDjektyoZrBn3/LYujk4iHNznA1yMdifAQQ=; b=QReegDOZFCqIEty+En79Iu3FAbt1Ze4/h2rufRm73YzDBYsorSAJgAOSOQQ2FNHUPf SbGh8pjsqlqTrRHtC/na+jPKE0BQdxEr3kFzapYy8PL/Mssm9FAEp0JrhGN/wX5MnQwo GFDtA6xq0cvxp7D4NN36kpKpuXgbY20oo8aYBUd5HbatO+o42cgci6DNb2A5OrTS5T1o JzXB3qo2UaeB5y4PqpHs5vguqrtVNK8z0LkM9O4/WwZrbJWYyqcNbqWbDJMF1N6OGdK/ Cd76b+/jBxG4HPSmb9QhGLc66NBrIj3fKAnStkE+A6VC+yaXp46VehiXRfy84faGgU0t Xyvw== X-Gm-Message-State: APjAAAXNw2iooI2vFfvmy7QPyyhFd2kzpKhEQ8JYeHp6TzEJA+QeDkpo vD6syGaDDxpoQCsZdikg+mhd2fKR X-Google-Smtp-Source: APXvYqxgNdieUOWWp2y7kTLdLETpxilLIvTt4vXwuGc9A7EYDilnJd08SrR6pQ5SDBIqkcjRZp3A+g== X-Received: by 2002:a7b:c848:: with SMTP id c8mr543428wml.110.1556134760771; Wed, 24 Apr 2019 12:39:20 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id n18sm16281372wrt.16.2019.04.24.12.39.18 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 12:39:19 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 22:38:41 +0300 Message-Id: <20190424193859.31817-3-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424193859.31817-1-arilou@gmail.com> References: <20190424193859.31817-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 v5 03/21] gdbstub: Implement thread_alive (T pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 fdad1ac466..29ca6be3df 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1499,6 +1499,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; @@ -1799,17 +1823,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 Wed Apr 24 19:38: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: 1090400 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="gVYPvXLJ"; 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 44q9dw6xkQz9s4Y for ; Thu, 25 Apr 2019 05:40:36 +1000 (AEST) Received: from localhost ([127.0.0.1]:46284 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNkw-0003ly-Sr for incoming@patchwork.ozlabs.org; Wed, 24 Apr 2019 15:40:34 -0400 Received: from eggs.gnu.org ([209.51.188.92]:56296) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNk5-0003l3-Ub for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJNk3-0003xX-Ro for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:41 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:38437) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJNjs-0003jM-6S for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:32 -0400 Received: by mail-wr1-x441.google.com with SMTP id f14so26187290wrj.5 for ; Wed, 24 Apr 2019 12:39:24 -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=bTkKvUXe+vJFlObggYTIw/quvUXexqXsMjWKRIC3GfM=; b=gVYPvXLJjxAp/kxxNAd0djJamELOt6/vYy+FOJkWAfukgWeYiU/EUnTB6YaFueHdsH bJcbe+jbjRMHuiTrEC5xucXKGhB7qpDsUWTN1Bowuzz5Nvqm/zkDG9IccBgnXrTlH6bv nQnpE+a0Ao22AlLYG9MTlM+KVEEX8chvbuaEC5SpVkmFCP13umP6yX4AWQNDxSj1KJwg HQ3yGU2oUG8e48EbyyPC78FAGhzhGhXcXsqTRKCfdbFLGu16ASEEmRJY7f0sFsCwUCFO 0WmETT04T+PsNu/Ub9lDIgKK+9ePiBBXDFpqut9Sl0Fy60EoVlF6+8mC8Ve7+2jdji1l tlog== 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=bTkKvUXe+vJFlObggYTIw/quvUXexqXsMjWKRIC3GfM=; b=HdYvteAqt9oB327OsTJ50yKG7Zxf593wPHjZk3EmCN56Wkx2r98aypcCLX5z0LR8gG EVlxWXVm8aCHnDmAftor7f2MYCResWHyJFkLG4GfqNjQjQ+a61YzF6ErFBGtLL7pXlaC PBQe+a2ke3TrPfgfoatC86/UhHZMecrXu3sQs819XScP+BfHGOlBp/lhHbafr55rnmQw eC5rXaG/tSYo/wvXojakZ3Bcae+2CkB7UMAF9tz+iDlLIJt5bSM8O+hBuNt7tdT5BBNe rHpx8C1jENeGkxSEaiex4CwDiFVVAqf2iwWH2MlWCp995SPBeCmJ8KisH5lRdXzxwv5O x6wA== X-Gm-Message-State: APjAAAWSWIY1V78k8+Yv9nOAHcO8EvsM193J+/0tPIEgtac8tw5SoU9u gnVKngsi2F8NB7OtFCyNtNlW5Vw7 X-Google-Smtp-Source: APXvYqzsvmi7om8WmdWYyxoxgb9zVf2UXGpjR6bYEmFIkmf0tLgr8bEZ4y1zkLMjqXDr6mIgiag+hA== X-Received: by 2002:adf:9364:: with SMTP id 91mr2371575wro.56.1556134763203; Wed, 24 Apr 2019 12:39:23 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id n18sm16281372wrt.16.2019.04.24.12.39.20 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 12:39:22 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 22:38:42 +0300 Message-Id: <20190424193859.31817-4-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424193859.31817-1-arilou@gmail.com> References: <20190424193859.31817-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 v5 04/21] gdbstub: Implement continue (c pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 29ca6be3df..a38f9d4ef9 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1523,6 +1523,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; @@ -1559,13 +1569,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 Wed Apr 24 19:38: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: 1090417 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="hesPEGVg"; 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 44q9j76VlSz9s4Y for ; Thu, 25 Apr 2019 05:43:23 +1000 (AEST) Received: from localhost ([127.0.0.1]:46342 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNnd-0006h1-RI for incoming@patchwork.ozlabs.org; Wed, 24 Apr 2019 15:43:21 -0400 Received: from eggs.gnu.org ([209.51.188.92]:56362) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNkA-0003qG-1U for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJNk8-00041r-0N for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:45 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:35730) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJNk6-0003l7-1f for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:43 -0400 Received: by mail-wr1-x443.google.com with SMTP id f7so4174867wrs.2 for ; Wed, 24 Apr 2019 12:39: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=kSEspp+nMht4rw3L2fHKWXdmIbCLDhlRtKrruE9yvWY=; b=hesPEGVgDyrdExE0KaVQMQy6SaW221OM0X+/FntKvaGs42FxodK2BLWO2/C68ygLOd 2VkTZQ2StM3Ew7c4FHXOt9vtIq+JhBBkphLyKZd+JT7GF/XJbVgh9Ar3eUCIGM/LpvjO kCMkq0I4PmgVnTtSdgUUKq4iuc8FP1D/GxjIYu+6oh4M56RdgyFsYKZZObDHCTTNUNF1 +O7i3jdEsbtRervpokaCOq5OfNfnOI22TiBUwsiz8+3XlDpuLsPoYo9MYmw2ESY6xFrj e5jxGq9YZ2hnClt/IiUCHJngSyHeHAOY8Eox1mDgnwNQy4X8aZQ9ecQBv3MHMibQQrqT R2Rg== 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=kSEspp+nMht4rw3L2fHKWXdmIbCLDhlRtKrruE9yvWY=; b=FrAMEpkqPO/cMewUzdU41zFKHtrzJ84cQ8+cHgxuQPNDKEG8sM1JsxPCu0SRcVF2Dg MTgHqsyzT6V4Q2dkoVlesVBFDuOapQbcYueCMvp3ZH+H/xDsLf0dS+UWIXLKfahwt732 tnjaJWRb99sLANnecEXDiGCke3EOJOn3n1QJfKTGTkuqL43KdSNtjbT12wKnaRN91/QJ yxlbIJOYZl3WxwbWfRU1Qma8ksnhfHUWEXfWRcaN+OZO9NPZYA1lmUYZoACkhnIBWSDs voyytxwzdx/qwBqZRRWYUOVXyDRIGNhaMJIRDx4uGfdBBVR7vTpBV64oToupr0uk6Z8n TbmQ== X-Gm-Message-State: APjAAAX80Dd7HZqH3m2LvsUkSY9spK8jMKGg8rnAyXIrNa4ONjLhKk8x F0DawZqZ0bITXB2nq/6ycpFQSMbo X-Google-Smtp-Source: APXvYqxjVhStFs0sYGv9TXKZSIiMdryu+6p0FJHC3uAR8ZETj1I7pdjFxQappIotp95HWJIq+xUjsQ== X-Received: by 2002:adf:e684:: with SMTP id r4mr8940600wrm.169.1556134765582; Wed, 24 Apr 2019 12:39:25 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id n18sm16281372wrt.16.2019.04.24.12.39.23 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 12:39:24 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 22:38:43 +0300 Message-Id: <20190424193859.31817-5-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424193859.31817-1-arilou@gmail.com> References: <20190424193859.31817-1-arilou@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::443 Subject: [Qemu-devel] [PATCH v5 05/21] gdbstub: Implement continue with signal (C pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index a38f9d4ef9..8e922a2df4 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1533,6 +1533,21 @@ static void handle_continue(GdbCmdContext *gdb_ctx, void *user_ctx) gdb_continue(gdb_ctx->s); } +static void handle_cont_with_sig(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + unsigned long signal = 0; + + if (gdb_ctx->num_params) { + signal = gdb_ctx->params[0].val_ul; + } + + gdb_ctx->s->signal = gdb_signal_to_target(signal); + if (gdb_ctx->s->signal == -1) { + gdb_ctx->s->signal = 0; + } + gdb_continue(gdb_ctx->s); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1580,11 +1595,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 Wed Apr 24 19:38: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: 1090418 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="lp/YOry8"; 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 44q9j90Z1hz9s4Y for ; Thu, 25 Apr 2019 05:43:25 +1000 (AEST) Received: from localhost ([127.0.0.1]:46344 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNnf-0006hr-1C for incoming@patchwork.ozlabs.org; Wed, 24 Apr 2019 15:43:23 -0400 Received: from eggs.gnu.org ([209.51.188.92]:56324) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNk8-0003mC-0V for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJNk5-00040B-VU for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:43 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:38791) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJNk3-0003nl-Um for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:41 -0400 Received: by mail-wm1-x342.google.com with SMTP id w15so6717710wmc.3 for ; Wed, 24 Apr 2019 12:39: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=M4+5FDQ/6x+srBv3D1SqFY72lf8MIyrhQkAf/Mt9fsY=; b=lp/YOry8IelCb8ayXGeGqkcVtW6YC38sQ/GJfWbtopjkhweq07/zH1v7AdQuuo6be+ 9PP7N6GjHbASYXrKy1HnlzJPlxYLb9dC3IRCjqrsUS9Wlps1zxT4V6Pb3HF+S88MUmY4 VvQWFjr1kIJT524pvQdCQkKlOAGXXo6NKd+n+0NMi9+NOiLOR0JsAM1cm1yEfsUkB87z f8T223K3ZdRlS/wHgPltkiPyHR9qPyMHgTLqVbEVYVXnXLtFSOCUQyTvh9n4LFaxTl9c 0hHhJ8CCg2bVpPjwdPRlWJaVNGvOkNBMDwWpxUvACLk3LG662ORXOCLu2oKZ4DO8d7hD BBpA== 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=M4+5FDQ/6x+srBv3D1SqFY72lf8MIyrhQkAf/Mt9fsY=; b=qW/qZ2DfLxvMY6RSF6PFz1N9Z+dM85fJ0JCXb3Y+byJY6pJdpLMU9a8LDoCzG3k3Zl O13KQM0cIxTnS0NzxajcZtGj1xM8iHEEty5nFUuxJH6LDkC1zkVWvgM7VM3SWIBFRTm3 +plLFytZ0vG+KDhtXZUkIBeo897NdXMpt1a4iP0LZY9Al4Ucl49WXRKskm0HqBULXGTT Yn6dHFIDkNrWPndD0L5rMObJv3kK60UXKnKiYxLeuciDSVgI5xz2f1M8rFTZ7hzHYqI2 0A9qLicIuWik5GV/M9OBogALLxChdBe8zYHpZc8CSl+JaHLyhZaLMeqs1YN0ruXvV/uO NLQg== X-Gm-Message-State: APjAAAVzPFVC2mtCxF/fsIwN4UkkT2kdjcKY/hShptpfeZWEr+i7rQCK ITlzyNNtUE9aY7Mn6qp51qpyShcz X-Google-Smtp-Source: APXvYqxnytOJ7Sflr52ccI1+IgZI7dX7buPMNIU20zyM8sW92oY3GctDm+63HGO1DfxsrZNpRbwRow== X-Received: by 2002:a1c:cbc5:: with SMTP id b188mr549562wmg.87.1556134768042; Wed, 24 Apr 2019 12:39:28 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id n18sm16281372wrt.16.2019.04.24.12.39.25 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 12:39:26 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 22:38:44 +0300 Message-Id: <20190424193859.31817-6-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424193859.31817-1-arilou@gmail.com> References: <20190424193859.31817-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 v5 06/21] gdbstub: Implement set_thread (H pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 79 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 30 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 8e922a2df4..83757def9b 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1548,6 +1548,47 @@ static void handle_cont_with_sig(GdbCmdContext *gdb_ctx, void *user_ctx) gdb_continue(gdb_ctx->s); } +static void handle_set_thread(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + CPUState *cpu; + + if (gdb_ctx->num_params < 2) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + if (gdb_ctx->params[1].thread_id.kind == GDB_READ_THREAD_ERR) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + if (gdb_ctx->params[1].thread_id.kind != GDB_ONE_THREAD) { + put_packet(gdb_ctx->s, "OK"); + return; + } + + cpu = gdb_get_cpu(gdb_ctx->s, gdb_ctx->params[1].thread_id.pid, + gdb_ctx->params[1].thread_id.tid); + if (!cpu) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + switch (gdb_ctx->params[0].opcode) { + case 'c': + gdb_ctx->s->c_cpu = cpu; + put_packet(gdb_ctx->s, "OK"); + break; + case 'g': + gdb_ctx->s->g_cpu = cpu; + put_packet(gdb_ctx->s, "OK"); + break; + default: + put_packet(gdb_ctx->s, "E22"); + break; + } +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1561,7 +1602,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); @@ -1824,35 +1864,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 Wed Apr 24 19:38: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: 1090415 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="r0XjVxfY"; 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 44q9j31rVQz9s4Y for ; Thu, 25 Apr 2019 05:43:19 +1000 (AEST) Received: from localhost ([127.0.0.1]:46338 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNnZ-0006df-42 for incoming@patchwork.ozlabs.org; Wed, 24 Apr 2019 15:43:17 -0400 Received: from eggs.gnu.org ([209.51.188.92]:56363) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNkA-0003qI-1r for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJNk7-00041j-W0 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:45 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:33150) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJNk5-0003qW-VD for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:42 -0400 Received: by mail-wm1-x344.google.com with SMTP id z6so168402wmi.0 for ; Wed, 24 Apr 2019 12:39: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=BRVpNhgZ5WsnuwctywQjKEVF66tNSOqIEVrbKsmJ4bY=; b=r0XjVxfYsmw3f0Gl/ixHs5CYZpN4aUPYe/bA/yf6b2/S11BG+6tPSjC0n1m9fmvAz6 zUazPT/5cZTQB2ou294hpsTHBukitANM/2W1wjcjiprr6yyAgkHjPKD6PTGUpimpHX4k ZPCsDOvd7ZYQPgFTKNXyN1qjs27xsqrnmnod1LGlexuoCVLEFlsY9uFyCJ93/nZIwHFo LqT/NlpPXBXCgyxSRhin1AB0QH4Ru33sNybOjKwClcNl8cRvGFhiWk8exgiYqRbGgk+q VZKv7t0wMTjunclYmL2bJhK57ceR9VM4A1B+wl28OltM5M2PCP9TUYZSguxaf+cmOrsH uHRQ== 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=BRVpNhgZ5WsnuwctywQjKEVF66tNSOqIEVrbKsmJ4bY=; b=sz45Q2u2e5At6XASUojNkefrsSRi9nkYdhU6Of2TvkxLfrft93BnXlkFwma7H/uoOB vOwmhanlqg2oBgZprhFWoXxktID49s6DDuBqdtOh9ZEaNCH3pmxbEL11hxoytLat7IIF SePtQpVjKXdvxBvaOdAryO8XWbiDoIgopFTsyy2XZnSgIXnecABqhj5P7m6W0414tgsp sF8iNB8I56g3kWOzZKaMmuIbaUD3NR6M+dBJ2LmUC3MUIQNogl2/+d/1HRaUYouUwzbS VUKmipfeliXm1t07qktj+t5CsTh3JqlTfCvlN6WSPKSxHekSfg8vgq9t9pVHOz7mMwtx m6RQ== X-Gm-Message-State: APjAAAU9nygEJep8DFoxiOx47g5/Y+Hz5YGG00zlReHmq5myBsf677iu UNwKLYdSxyBDp6q8gOeDOq+hpbge X-Google-Smtp-Source: APXvYqwzO3k4HVoBJXh2eK3qY7Kq2xQ1LppLWFxbkF++gylMjXNwaV8WSRLiXUcHJYvFK1tS4vJuhw== X-Received: by 2002:a1c:d1c5:: with SMTP id i188mr565163wmg.8.1556134771454; Wed, 24 Apr 2019 12:39:31 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id n18sm16281372wrt.16.2019.04.24.12.39.28 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 12:39:29 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 22:38:45 +0300 Message-Id: <20190424193859.31817-7-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424193859.31817-1-arilou@gmail.com> References: <20190424193859.31817-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 v5 07/21] gdbstub: Implement insert breakpoint (Z pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index 83757def9b..8e0446d305 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1589,6 +1589,29 @@ static void handle_set_thread(GdbCmdContext *gdb_ctx, void *user_ctx) } } +static void handle_insert_bp(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + int res; + + if (gdb_ctx->num_params < 3) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + res = gdb_breakpoint_insert(gdb_ctx->params[1].val_ull, + gdb_ctx->params[2].val_ull, + gdb_ctx->params[0].val_ul); + if (res >= 0) { + put_packet(gdb_ctx->s, "OK"); + return; + } else if (res == -ENOSYS) { + put_packet(gdb_ctx->s, ""); + return; + } + + put_packet(gdb_ctx->s, "E22"); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1844,6 +1867,16 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) put_packet(s, "OK"); break; case 'Z': + { + static const GdbCmdParseEntry insert_bp_cmd_desc = { + .handler = handle_insert_bp, + .cmd = "Z", + .cmd_startswith = 1, + .schema = "l?L?L0" + }; + cmd_parser = &insert_bp_cmd_desc; + } + break; case 'z': type = strtoul(p, (char **)&p, 16); if (*p == ',') From patchwork Wed Apr 24 19:38: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: 1090430 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="eeLat+Pk"; 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 44q9ps6nPFz9s55 for ; Thu, 25 Apr 2019 05:48:21 +1000 (AEST) Received: from localhost ([127.0.0.1]:46412 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNsR-0002hX-Qw for incoming@patchwork.ozlabs.org; Wed, 24 Apr 2019 15:48:19 -0400 Received: from eggs.gnu.org ([209.51.188.92]:56367) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNkA-0003qJ-2U for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJNk8-00042H-3s for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:45 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:52310) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJNk6-0003tb-NO for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:43 -0400 Received: by mail-wm1-x341.google.com with SMTP id j13so6165485wmh.2 for ; Wed, 24 Apr 2019 12:39:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=14VPjA11kd7BNRAewIUYoLzDl7QlL5dAdw5dQ8aqYZo=; b=eeLat+PkO2gS55c0bZlrXf+TO439eeIaOYMZ4v15BA+yDqvI3aMaijDWDqV6VPCIcp gtUkKUC1QLAocH3NfYDs2/AV1s9y64ME29ib0TPKIWAM3tpzkBBGCxfT9wiXp4CnQWzZ 0OVax/kgvtgLaPHMW6ybaH5GHoY4mAKTpkthqlneBfCNLCBApUZVYQV+PZ/d1iem0hUE QzpbWoUpc2jp725wP5aY00rbViauQUPdnFkG8IZ1E8Mf71192686sC3YF3VO07/GDKnX TW+/2FsPtmXc0J/NmBnOaMfSSBu3y9VIBTBtwMr8Qo2TQhurlCp+qi5SiyIcYcHPon/4 Byxg== 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=14VPjA11kd7BNRAewIUYoLzDl7QlL5dAdw5dQ8aqYZo=; b=CUQOJry5AO3uwK9ybB7QQkit+s0X8oZS09yhnZ9YhAXJ+lagjBtpc9dzWpsSq7bTpD 43A0E210k9kIXrabh/BHZ3xgrOdThVEMRKsuz70alUbZt88FQo0MoMjaeMAsXILt5Ksq P+wEGJkA2ocNERzPNSEo+9XULwOxfTehnRe0jfQFcoRm2bkwfbM8o3nXHZ+fpDhiEZwS sVo1Re/i0LJNfAau6k9HXfzQW4Nl+pcEqaNbH867cpdDqpqd5ZtBjK8hdbdXIj35NF01 iVHKBOAvfWCifhJLh3IZqun+ce7hWBsFImBuZ0Ep7eQxkIOQrmlUEW7TRl0OdtFNF4zE 7KIQ== X-Gm-Message-State: APjAAAUQeDpJ1gHUi0mFRejRecNAujIVtDrV+MMXCe1RrCBecFqDGDcf mdeVuma+vJaOBDYNNfxTsC/gZFyw X-Google-Smtp-Source: APXvYqyjf9Ml2GN5hGdHAEZPgj7F/wAS74qmlBwPoHqNQMJpH5NInGhWTz63/yuIfwMY/1GYht4HTQ== X-Received: by 2002:a1c:6342:: with SMTP id x63mr568358wmb.58.1556134774713; Wed, 24 Apr 2019 12:39:34 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id n18sm16281372wrt.16.2019.04.24.12.39.31 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 12:39:33 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 22:38:46 +0300 Message-Id: <20190424193859.31817-8-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424193859.31817-1-arilou@gmail.com> References: <20190424193859.31817-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 v5 08/21] gdbstub: Implement remove breakpoint (z pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 49 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 8e0446d305..80f2a92da6 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1612,6 +1612,29 @@ static void handle_insert_bp(GdbCmdContext *gdb_ctx, void *user_ctx) put_packet(gdb_ctx->s, "E22"); } +static void handle_remove_bp(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + int res; + + if (gdb_ctx->num_params < 3) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + res = gdb_breakpoint_remove(gdb_ctx->params[1].val_ull, + gdb_ctx->params[2].val_ull, + gdb_ctx->params[0].val_ul); + if (res >= 0) { + put_packet(gdb_ctx->s, "OK"); + return; + } else if (res == -ENOSYS) { + put_packet(gdb_ctx->s, ""); + return; + } + + put_packet(gdb_ctx->s, "E22"); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1878,23 +1901,15 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) } break; case 'z': - type = strtoul(p, (char **)&p, 16); - if (*p == ',') - p++; - addr = strtoull(p, (char **)&p, 16); - if (*p == ',') - p++; - len = strtoull(p, (char **)&p, 16); - if (ch == 'Z') - res = gdb_breakpoint_insert(addr, len, type); - else - res = gdb_breakpoint_remove(addr, len, type); - if (res >= 0) - put_packet(s, "OK"); - else if (res == -ENOSYS) - put_packet(s, ""); - else - put_packet(s, "E22"); + { + static const GdbCmdParseEntry remove_bp_cmd_desc = { + .handler = handle_remove_bp, + .cmd = "z", + .cmd_startswith = 1, + .schema = "l?L?L0" + }; + cmd_parser = &remove_bp_cmd_desc; + } break; case 'H': { From patchwork Wed Apr 24 19:38: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: 1090402 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="aboCPyAa"; 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 44q9dz49vKz9s55 for ; Thu, 25 Apr 2019 05:40:39 +1000 (AEST) Received: from localhost ([127.0.0.1]:46288 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNkz-0003pw-H1 for incoming@patchwork.ozlabs.org; Wed, 24 Apr 2019 15:40:37 -0400 Received: from eggs.gnu.org ([209.51.188.92]:56327) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNk8-0003mH-2J for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJNk6-00040i-O6 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:43 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:43349) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJNk5-0003wj-SI for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:42 -0400 Received: by mail-wr1-x442.google.com with SMTP id a12so3510654wrq.10 for ; Wed, 24 Apr 2019 12:39:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=LvIqpLQh02Z6zWGECKaQkZCTeV0B0aLuGDQwChSB8dY=; b=aboCPyAaUaewi9G8bFPBpevUT5AOY/u1muql7eG5cqjXaL+TQz0MMi3JqozFg685uo Kb4fmSXRYJKVCr0FFI+xGh0LxQQBXxUQpVzPVsEmrV9N9i4s+oULvDqXDWZRMnj8orIZ ckv/jzHrWDhYZGjnoys/G69XiSAWllzPog3TCVM6qf/tCq0eaybl24xTeXcs2ExzeEyt KYOKd8OUk+rdK1sKxAuiGh5fEBoKOjUDF4yHLGjhuuiIDPXIePnCbQrPddV0sz90NOJQ leZ9qMdnDiZxMRxC8tBhg4c+bsuP7gRc7SlJ0kRGS0C42wW54/SbIONuYQij166s43YD yfgg== 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=LvIqpLQh02Z6zWGECKaQkZCTeV0B0aLuGDQwChSB8dY=; b=S77pgvAzPRJWdJENuBbSqLUERLWJid/RdyRjv3EU9oUNnpkFgX9hm68lxaBFBH2lFH Qu7/HFlf8KdTKAzEwgH+OQjTLpWVAhdYFtHxYnPDQT99DoVEdrGFNNQWsOMpipSvstvZ 2ITRS3I3BseicUwKDR0xktUXafVP6QeIhNV5vU8s6XRK+glwq0aHzKk+lVBGnvGB7cbl Q/bg4AzAH8ULbwYDiJI2IR00j+/pRC12Pp4ccppbtnleQOvRwi0Qn3w03hpyXZj+Jy39 Ri+5xanuXsaBTfBw/NxXm/WYxEE2wWYs9vUkz13cbOxq4xF1Lzw13Dx9mvIG7ekzx0Pz heow== X-Gm-Message-State: APjAAAUmkYwpHgi72o8aUUr7yhwqSPnVBcbeovjElL3SgKe029bPuAzr 7Z/viZ1pyC60SLdbbr+RhL6m1tBK X-Google-Smtp-Source: APXvYqyBRJ06BDDhPi2WwcqQXFgMwGXEPlXIpRFwd4Dq+mYLbz27LYdCbEMweyQq/pKFVorrKZsZRw== X-Received: by 2002:a5d:5284:: with SMTP id c4mr22068633wrv.281.1556134777960; Wed, 24 Apr 2019 12:39:37 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id n18sm16281372wrt.16.2019.04.24.12.39.34 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 12:39:36 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 22:38:47 +0300 Message-Id: <20190424193859.31817-9-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424193859.31817-1-arilou@gmail.com> References: <20190424193859.31817-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 v5 09/21] gdbstub: Implement set register (P pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 80f2a92da6..49db09ef52 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1635,6 +1635,27 @@ static void handle_remove_bp(GdbCmdContext *gdb_ctx, void *user_ctx) put_packet(gdb_ctx->s, "E22"); } +static void handle_set_reg(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + int reg_size; + + if (!gdb_has_xml) { + put_packet(gdb_ctx->s, ""); + return; + } + + if (gdb_ctx->num_params < 2) { + put_packet(gdb_ctx->s, ""); + return; + } + + reg_size = strlen(gdb_ctx->params[1].data) / 2; + hextomem(gdb_ctx->mem_buf, gdb_ctx->params[1].data, reg_size); + gdb_write_register(gdb_ctx->s->g_cpu, gdb_ctx->mem_buf, + gdb_ctx->params[0].val_ull); + put_packet(gdb_ctx->s, "OK"); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1879,15 +1900,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 Wed Apr 24 19:38: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: 1090424 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="PZtw/Uat"; 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 44q9lN2g7Qz9s4Y for ; Thu, 25 Apr 2019 05:45:18 +1000 (AEST) Received: from localhost ([127.0.0.1]:46357 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNpT-0008Lh-6B for incoming@patchwork.ozlabs.org; Wed, 24 Apr 2019 15:45:15 -0400 Received: from eggs.gnu.org ([209.51.188.92]:56368) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNkA-0003qK-2M for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJNk8-00041x-0W for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:45 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:35730) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJNk6-0003zY-1Q for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:43 -0400 Received: by mail-wr1-x442.google.com with SMTP id f7so4175588wrs.2 for ; Wed, 24 Apr 2019 12:39:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=2X/EqHRQzIkKd3q6L4ImeXDT9TueqP/ctRgcXeSvAEY=; b=PZtw/UatKCjN1sX4PnkBcP32pcmuqU/YdugfYgs36H5VZw3h2rl2slOkZT6zVhXJSo crxytPqwpY8jJFKsSjXb/euIRT1ra/FSF75bzcbZCfqCmjZ+u36yttyn5kytR8VFcovu IpVDGBBTm+mdoWynwwPpxXHxPHbX9CtG9Q12k6y9L9Sdnqx/BzXR0JYIZZDpguqxB5rh bbpUqTnc/R6UQkFhdVKcgQvXTNe7ToIQnBuj+xawr1XIWDqCY+eIKaRJUdV65mSjMYHV xdTRgqBURtEiUFd5cIQapZ00vmWnJE/LdrfRCd0LpnJlLG9wGzPq4CccqaNAqUggzEGy ojOA== 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=2X/EqHRQzIkKd3q6L4ImeXDT9TueqP/ctRgcXeSvAEY=; b=TrbRQ1GWB6LeknAZ6L3S8cqhrTnu8uip78Yz5GdtfTIieF5rWS30wAAdOZwxuipCBK YVSp2LqbZIC/BfcCw7Oj1f24VtQxQ5dwik7rmZczZpwCoMYuIrvCdsSXaZwqN2cpBQ8W v6RhnZZZh6Q7+BNuHzAclWNCpxgUnXJ9pts8Vv9WyZrEuq+6U6wFMlUIWxA8U5z+b1tk bkpI5xBRvbjkusVxUENNYHiPYj7biSPxBez9Ei9Z1R2vA1uaYGkkXEWzxZoOn1SsW5ll N/MXaQ9TDuw13F3NUpnFGmuY6lni8Ba78K8itr2baz0ORlS63v9vGovnoUMPXKASV1vk qELg== X-Gm-Message-State: APjAAAWczqPUxL9DzoY9an/U5/VhI/IY5pjrCdBNBSIQcWoC8BKEMXjr lMDyQbTODFKPSSC30T5bR8t7kg7i X-Google-Smtp-Source: APXvYqza+ZOPwVaTQN1lIdilVxV3N7NRi4jt8rEGNiq8mbJxmsmGEqofVYIeqBJGE586EV1ZIxFRLQ== X-Received: by 2002:adf:fc49:: with SMTP id e9mr1066357wrs.269.1556134780058; Wed, 24 Apr 2019 12:39:40 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id n18sm16281372wrt.16.2019.04.24.12.39.38 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 12:39:39 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 22:38:48 +0300 Message-Id: <20190424193859.31817-10-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424193859.31817-1-arilou@gmail.com> References: <20190424193859.31817-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 v5 10/21] gdbstub: Implement get register (p pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 49db09ef52..c439b8e796 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1656,6 +1656,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; @@ -1885,18 +1915,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 Wed Apr 24 19:38:49 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1090426 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="pGZ+24AM"; 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 44q9mH2fhhz9s55 for ; Thu, 25 Apr 2019 05:46:07 +1000 (AEST) Received: from localhost ([127.0.0.1]:46400 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNqG-0000iM-7N for incoming@patchwork.ozlabs.org; Wed, 24 Apr 2019 15:46:05 -0400 Received: from eggs.gnu.org ([209.51.188.92]:56402) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNkB-0003rO-8K for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJNkA-00044s-3U for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:47 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:35078) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJNk8-00041U-97 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:45 -0400 Received: by mail-wm1-x343.google.com with SMTP id y197so6750998wmd.0 for ; Wed, 24 Apr 2019 12:39:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=TENOL3r5yUJno6/S+4IYhfkNIUwUbfzGmKX97CyU0qA=; b=pGZ+24AM1P3iAT70p5Qw3njXtzhLx9GeocyFHFSrNDOL/iucUmHoD9N0kRF8XqReFk ENp75n8H4EOTpVZs1GRDjL2xhJ9NG6rihIUi5I9AKX34bQoD9a3NHQvBvBIqO7+hUf4e aVTPVDb8IWcpjwtGw29NwUJ7uIxzoXGG0MnBQCYmgvwuG90Bx8iWZ/1UCMtWpdJTlDku hhLU3Wmw6SzZfRKVsucOY7/oUfaEESqdCGb9/U7nllpHx/iXY8lMfZ2v/eKMW3sPik3z Iw2HvTdBRdZNNS90/ZWR96P2m4j73lOmQO2LDCTKdcZjGSyriNwk9lL+BtF+H2GM10jl Z+nA== 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=TENOL3r5yUJno6/S+4IYhfkNIUwUbfzGmKX97CyU0qA=; b=Z1R7FVh0YeRX+vbcYXUSN8edUC7YFGqacBiA7VAVwjlRAcNk57egDnUmLY6U4ODYHw ZUBEB1u1cvQanO4gMOWQdYkbxlRGndQAwOi2QujeFm6x12ft1CzHIw9FscRKUTcROhfv 7iWKAnFYUJ87G7z31PZH9554TXTqtVumP3Xru7GgE9seD047cSQGvBlfA3+L5xgx2soq PbBnYkaErTS9DmiT83xsKrNy+bHbT5pONCct316LaiOg5XbctLIIQjYQwcbjOPLDXIlP OmbdkG+PLTgAyy8MxbimqYxhnwrHhvIIMQalyr+scgAHvF7lC8ctxsnSMbjkIxpRV/Kr u7QQ== X-Gm-Message-State: APjAAAWoauf2aIG2j3A7RK4Qn9wDRXQLcwkvixEEDoLwKHeNjLJ3pqrB YaWweVz2ow+3VpD04iRBrcPtA6kD X-Google-Smtp-Source: APXvYqwhSOLP8wnZXxk8t9cU5Cwj3HIHLhbl/Sr6+fpEA2yfO116hZbIFQIATdApkpvAvvXrXtSgQg== X-Received: by 2002:a05:600c:d4:: with SMTP id u20mr576764wmm.88.1556134782489; Wed, 24 Apr 2019 12:39:42 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id n18sm16281372wrt.16.2019.04.24.12.39.40 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 12:39:41 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 22:38:49 +0300 Message-Id: <20190424193859.31817-11-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424193859.31817-1-arilou@gmail.com> References: <20190424193859.31817-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 v5 11/21] gdbstub: Implement write memory (M pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 c439b8e796..4522c93fa2 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1686,6 +1686,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; @@ -1894,24 +1919,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 Wed Apr 24 19:38:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1090431 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="dilFgNPE"; 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 44q9r10YhMz9s4Y for ; Thu, 25 Apr 2019 05:49:21 +1000 (AEST) Received: from localhost ([127.0.0.1]:46420 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNtP-0003QH-0y for incoming@patchwork.ozlabs.org; Wed, 24 Apr 2019 15:49:19 -0400 Received: from eggs.gnu.org ([209.51.188.92]:56414) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNkC-0003sC-2l for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJNkA-000463-W7 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:48 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:50462) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJNkA-00045F-Oi for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:46 -0400 Received: by mail-wm1-x344.google.com with SMTP id 10so6169591wmk.0 for ; Wed, 24 Apr 2019 12:39:46 -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=FfGjSJV+pgCWpgIFev/Vk6a07sEAiskpgdyLpP9ye7A=; b=dilFgNPEr0jl+OGkp7dqh8lBagQrUcYGvVpZEA22jr4A6zQxvOg7jIhMF8BNp5hAiB J8V7aHaBCHYXMmw470mcwW/vSb3dNzd6o4PCMz90rXhNtPAS3u2VHb679hiBGS9GYbWd fI5kEUHVaXTbJReIIkWQlJ2lZ0aCa0Y9JEA4jdgiZhaOeQkrzGcdR1Pdk52xQHFZIcG1 oZmyDdfBdHBwGrDgyD6IN6AIRMbuPw+mAm7I7sT+KyPpjJ54DSg1VEqNqTj8hdMDlK/U pZ5d2gSl+rb3X3pZhK2H0UDHGers/uHnBVWykq1dMa8bAQ3UZqbhIUEEi+bqKTmELHpz rhYQ== 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=FfGjSJV+pgCWpgIFev/Vk6a07sEAiskpgdyLpP9ye7A=; b=kk20pz8fV7CAvuSrk+tJnpBXm/Zl8LcxWPSRmwZUiU1AdeipYCfYUkZsZlAtAMKMau AGqeaXaLt0fhWNd6sn1dkPihgMN34kSZN4ErSfcMOUa/dBtb1NdWSolfmcBQNaV1rs4P 2xHMuFELyG4fPBSc4au6NOx8mjuC6l3gK3/uLrw4Rsp5s4ub8zm5YHp+Umhnh9LbGosH 0kYz7BZv11CgWLtUuiU1yTfzpE+B0Wom6rsxFHRe7vu7xWWH7OdFRg9H28k5gtVS5BUd gKfKeZ+37JDpNb2pU2zml4HfYMI2NnNVE8RbwLOnW23z21vt1jGpIh/LjjfI/N/X7O+w kcwA== X-Gm-Message-State: APjAAAXITlO5QH+hfVu7olJIBPFubzzzyi4I96RtsyyKU14MuyuMa6EL Khn80Nl8nO0H+BJqVz2nO+PurmwX X-Google-Smtp-Source: APXvYqx7ORUkcAaUJ19fN55VfDXsDS6FtYGz3fCbgazFNnK8wqLrBHQy72WwrRBM8lskxJW0ZiiXiw== X-Received: by 2002:a1c:f115:: with SMTP id p21mr543916wmh.93.1556134784996; Wed, 24 Apr 2019 12:39:44 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id n18sm16281372wrt.16.2019.04.24.12.39.42 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 12:39:43 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 22:38:50 +0300 Message-Id: <20190424193859.31817-12-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424193859.31817-1-arilou@gmail.com> References: <20190424193859.31817-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 v5 12/21] gdbstub: Implement read memory (m pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 4522c93fa2..5b60c1369c 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1711,6 +1711,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; @@ -1900,22 +1924,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 Wed Apr 24 19:38:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1090439 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="s0Uu+djy"; 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 44q9tl0swXz9s4Y for ; Thu, 25 Apr 2019 05:51:42 +1000 (AEST) Received: from localhost ([127.0.0.1]:46467 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNvg-000531-RU for incoming@patchwork.ozlabs.org; Wed, 24 Apr 2019 15:51:40 -0400 Received: from eggs.gnu.org ([209.51.188.92]:56425) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNkE-0003t1-BN for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJNkD-00049n-C6 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:50 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:41540) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJNkD-000496-5y for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:49 -0400 Received: by mail-wr1-x442.google.com with SMTP id c12so20593494wrt.8 for ; Wed, 24 Apr 2019 12:39:49 -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=92zmbHtmaWdJBn6Gzt10L0qHEe/LVcd35bviZ9obj/o=; b=s0Uu+djyqdHS8AKiKTmt3UrxvMp9gUFFcQMav69ug47O/9q+r9/YWpUtrv9g+Tkzos Z6sI0qONwegWzOl0oI7j6R63C6yAa4qRC1MUaM9HsKj/xKYrNLW8Di8N0C4Yw8kOTIRQ b8FQAQsSxBg0QIci2Z48pfzdnusl7USAwkgObJ6votfbt4nrfmyYO+hse3gk7ZwrU/w/ Ncaezbb0pAP5H9wBFx5NExXdHAq/Ud891/zKLCU9oA5zXXW6SNfXPcBVKKDaCrL5h+2c 0I4KfpP/ndJ+FEAW/Lf/2/T/AEA5XOlrMp9queACxHv9QbrcDIpOq6OtVJ/Or4JCzhbw kNFg== 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=92zmbHtmaWdJBn6Gzt10L0qHEe/LVcd35bviZ9obj/o=; b=r9mKktvIO6JWJFJpSdtomGUvroHESJsfrnMWcAUayD/HLBx12ptD9N4pRLpcUWCHFm h9Y0JE50Oyu61oeT5eXO+y/+LsbNlh9dpUsQr+ZyFzWwHSkXwMi84Ud8tATFRbK4YUqa /86nx82HZv3mJlVCiDSBDrztk4rlQ9WTriiPvux/r0F48J1lpxfIL2ZHve+19ioDbazB 7Os+dT/j1ATgSS0IxntuieYbtPDfgtYv98HRvM9WES2LWAlVGAl7lapP+nsNe5aNLCjq qpit6GJ0Okkfy1vs9vy2dDRCeMpW6VCEUl6ntsMvUTZJYR20oRCa398C7oJds/svCCY3 8sJQ== X-Gm-Message-State: APjAAAWzYG2RY7O1yEUlU2nOUsqbqGnuzK+VVV6U2v0q62xYxbOLQNCe 1bAc2Dy43W073I77QHB4lE6K+Xkn X-Google-Smtp-Source: APXvYqyNw/R6DQ/cEAVGu+NmB+nJfk9GSbqnF67LIEP1Ch7UjK29j0F949r9QQ9y5Ntpzplg+HOdNQ== X-Received: by 2002:adf:eb44:: with SMTP id u4mr9770438wrn.83.1556134787326; Wed, 24 Apr 2019 12:39:47 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id n18sm16281372wrt.16.2019.04.24.12.39.45 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 12:39:46 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 22:38:51 +0300 Message-Id: <20190424193859.31817-13-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424193859.31817-1-arilou@gmail.com> References: <20190424193859.31817-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 v5 13/21] gdbstub: Implement write all registers (G pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 5b60c1369c..acf0e75908 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1735,6 +1735,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; @@ -1746,7 +1769,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; @@ -1912,16 +1934,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 Wed Apr 24 19:38:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1090443 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="u8OFhFWm"; 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 44q9x52qBJz9s55 for ; Thu, 25 Apr 2019 05:53:45 +1000 (AEST) Received: from localhost ([127.0.0.1]:46485 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNxf-0006kg-Cb for incoming@patchwork.ozlabs.org; Wed, 24 Apr 2019 15:53:43 -0400 Received: from eggs.gnu.org ([209.51.188.92]:56437) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNkG-0003vP-Ru for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJNkF-0004BQ-VC for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:52 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:36725) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJNkF-0004B4-On for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:51 -0400 Received: by mail-wr1-x441.google.com with SMTP id b1so15440854wru.3 for ; Wed, 24 Apr 2019 12:39:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3i2BqbPIZu3pJ1q7oaT6KMUZ5ADbICItlHWHixBftQQ=; b=u8OFhFWm6uYyTjr4rYrFv5i8YcMjEfHDL72cjZC/fIQE41vm4OcP7rGDMys8DNEFQW oyGEFj/8zmxepKnOJcX577betrUg1RM7O05QXDYMUFmtY2xNBbdcYL9dhgbBTfMKJPoz a+lNC40CICLQjXaBk1abZjGurUrmTUmAMkt7m/NUqhVucMf3UaDR9polNKnY/Php951g 5D8GKo/7tLOPw6fS+enmHvvW8Uj7ibo5vaeb2RoKH8Xfv8d2vQgBGYav8FWcIyG7kwC8 phi5DHWcMewSD89DZDp0jPTvntaigphwInGQaUNtRNtzW3uNMhRDJWlnLWipuAhlk1P3 BFUg== 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=3i2BqbPIZu3pJ1q7oaT6KMUZ5ADbICItlHWHixBftQQ=; b=RPCoVCW6w0ySwGvu741H9p/4Q4U8sbRHJd5D/dTtkquCJll9T6+zV5xbNEGfgLTTvJ izaUDkaTFA/hjvWY6FWnCFuYmKEZgnBC8e+NArh4u2B4CB2AHRjSwY2T4OVCWWSRdrkk 1vZFnOPxbQdbOK9jEPjL9j614rs8nVvBeKGTmlgJsSNSKesgbtn6X+3VIogsRmONrcP/ oUaWZnrr0zZnIP3F5cQYR7s3X11IjuoMA80B0nCzVR19qsZZQS/GuPrAn/hWW6xMgtSJ 1/tLEllTwaft7D2jULBFsOAFr82ksR9cHr0QPxbqIMeZsFlQgHfL4fUcEVL09bPmKUIF A53Q== X-Gm-Message-State: APjAAAVFim7evtH0BOVxOvxIhEYtFAfIbXBfv4K0mW0hRzZgQTexRvUB HHQhiS+Cf1YzuefJqIierA+uTdrH X-Google-Smtp-Source: APXvYqxhVt0TDvVf5bNDkRnSzsc5ulISIvwhIRSBHfBPyuwa3/aBnA7UFqVf4tGxfqynyWCiLbYyFA== X-Received: by 2002:a5d:550c:: with SMTP id b12mr8394607wrv.318.1556134790004; Wed, 24 Apr 2019 12:39:50 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id n18sm16281372wrt.16.2019.04.24.12.39.47 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 12:39:48 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 22:38:52 +0300 Message-Id: <20190424193859.31817-14-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424193859.31817-1-arilou@gmail.com> References: <20190424193859.31817-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 v5 14/21] gdbstub: Implement read all registers (g pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 acf0e75908..3a7ef5eea6 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1758,6 +1758,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; @@ -1765,7 +1780,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]; @@ -1924,14 +1939,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 Wed Apr 24 19:38:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1090427 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="tfx3Nuqw"; 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 44q9nZ1wxFz9s4Y for ; Thu, 25 Apr 2019 05:47:14 +1000 (AEST) Received: from localhost ([127.0.0.1]:46404 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNrM-0001mC-4c for incoming@patchwork.ozlabs.org; Wed, 24 Apr 2019 15:47:12 -0400 Received: from eggs.gnu.org ([209.51.188.92]:56448) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNkJ-0003xA-6U for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJNkI-0004Cl-6b for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:55 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:36178) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJNkI-0004C3-0E for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:54 -0400 Received: by mail-wm1-x343.google.com with SMTP id h18so6740474wml.1 for ; Wed, 24 Apr 2019 12:39:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=EG9sk85M4LsflXbUNBRhLCHZfOCHF6EVSbclOy8vwek=; b=tfx3NuqwR8oWHl+bhJbg+JjG5q/jApslB7GiBNkIvGYs3VpDsIJ9Vz/YPVK5e+gKq4 PLrOpB6gRD4lEvYfaXlFNrS+1HkdFSTC2AVYe4ltiN0DKz9jIMJwv+Ko2g9GFs1oMnli qJdpoYXOaxt7AnM5Hi0q+TTZD7MKPmSmMcpkWZsK9hhi62E8bD4oraG5G9irI0WXEgmG FjfBImDN+co34QxpYXWPAwOFTWgCCvQuD9oCHPZefT87Q9Fyi4JCQo4Cjhv+bu2kDKUt +GiJu1UTK2q4kco2pON3tntsIl+p/rT+gUUp7DPpiTL7+D0MNhPbXifWWFSFA7jee80u A1Xw== 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=EG9sk85M4LsflXbUNBRhLCHZfOCHF6EVSbclOy8vwek=; b=c8vYLHVtUyw41ZSIFioR+3sxHcCoDpUPsyObDUdFolofmThjWV81J05by7epXQNI7V D2rRfHXy9RF23qASQ+DiW4vd87lP/YPlwiDekoHCVzkb6XiD8oQYZRmL5MOuKDwTxktF UoLI+OwYZ5WT5fZoPAM52Qjsv1dScMCtJFgfHZJerpOzbi6tsupKhZmVvu+pDmppFMR5 QNYPxV/ca7CFBIVnQnFMydXntBGbCB+1fl+JfZIHxWPH96HFSmMgx/TMkIClbTC1OZV/ 2LMcdAk/n0Spo2VI2R2dAf1E6tHzaqdiGRhgxFFAn8r3AgGWiGtMnEpeotPTqDIeVNVK LxHw== X-Gm-Message-State: APjAAAVoFMUz+7ves4Xs3kH4TUeEfA/SFtvjecydIzNV9TH9xIOH+isG 8ns/Zd7LgeI4METvcQ2a85ezwoOM X-Google-Smtp-Source: APXvYqz8QLr32i9wxwM9kexe0Ohtdgv9kDlSdF4r2NgSl/tx9L+P515U++UjBObXbacjy4BkqaBtQA== X-Received: by 2002:a1c:d1c5:: with SMTP id i188mr566187wmg.8.1556134792416; Wed, 24 Apr 2019 12:39:52 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id n18sm16281372wrt.16.2019.04.24.12.39.50 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 12:39:51 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 22:38:53 +0300 Message-Id: <20190424193859.31817-15-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424193859.31817-1-arilou@gmail.com> References: <20190424193859.31817-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 v5 15/21] gdbstub: Implement file io (F pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 62 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 3a7ef5eea6..18949120be 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1773,6 +1773,39 @@ static void handle_read_all_regs(GdbCmdContext *gdb_ctx, void *user_ctx) put_packet(gdb_ctx->s, gdb_ctx->str_buf); } +static void handle_file_io(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + int num_syscall_params; + GdbCmdVariant syscall_params[3] = {}; + + if (!gdb_ctx->num_params) { + return; + } + + if (cmd_parse_params(gdb_ctx->params[0].data, "L,L,o0", syscall_params, + &num_syscall_params)) { + return; + } + + if (!num_syscall_params) { + return; + } + + if (gdb_ctx->s->current_syscall_cb) { + gdb_ctx->s->current_syscall_cb(gdb_ctx->s->c_cpu, + (target_ulong)syscall_params[0].val_ull, + (target_ulong)syscall_params[1].val_ull); + gdb_ctx->s->current_syscall_cb = NULL; + } + + if (syscall_params[2].opcode == (uint8_t)'C') { + put_packet(gdb_ctx->s, "T02"); + return; + } + + gdb_continue(gdb_ctx->s); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1914,28 +1947,13 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) return RS_IDLE; case 'F': { - target_ulong ret; - target_ulong err; - - ret = strtoull(p, (char **)&p, 16); - if (*p == ',') { - p++; - err = strtoull(p, (char **)&p, 16); - } else { - err = 0; - } - if (*p == ',') - p++; - type = *p; - if (s->current_syscall_cb) { - s->current_syscall_cb(s->c_cpu, ret, err); - s->current_syscall_cb = NULL; - } - if (type == 'C') { - put_packet(s, "T02"); - } else { - gdb_continue(s); - } + static const GdbCmdParseEntry file_io_cmd_desc = { + .handler = handle_file_io, + .cmd = "F", + .cmd_startswith = 1, + .schema = "s0" + }; + cmd_parser = &file_io_cmd_desc; } break; case 'g': From patchwork Wed Apr 24 19:38:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1090436 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="OdCzmCW2"; 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 44q9sS5p44z9s4Y for ; Thu, 25 Apr 2019 05:50:36 +1000 (AEST) Received: from localhost ([127.0.0.1]:46428 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNuc-0004DZ-NY for incoming@patchwork.ozlabs.org; Wed, 24 Apr 2019 15:50:34 -0400 Received: from eggs.gnu.org ([209.51.188.92]:56460) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNkL-0003zs-VM for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJNkL-0004F8-28 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:57 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:39653) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJNkK-0004EV-Rs for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:56 -0400 Received: by mail-wr1-x443.google.com with SMTP id a9so9189140wrp.6 for ; Wed, 24 Apr 2019 12:39:56 -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=L0b6ekwQ+2V0lpxiU3U4YMDKi4QNx+8EvSzJuNBfha8=; b=OdCzmCW2qJ0fnNoXOMUg/JasfKGaNq2Zm+6qKecWJ5gj7datEFwCatflmW+GzYEXYI 8KDTEjzHXCon/QngQgmKRZ85f90LdmfLlkr/FXTIDE0SnWdMaY13d1qGSYA0qq13iHNo I/gxrP2o/O0jGculu5dv1F5zOS6ytnOmHQtXCTMRGSMz/sk/YMl8t5jNZ/5GCdSuC64b gohHFQg5yE0dayciO3aGqpOn9f+4+MjGHNn64AHTXrfUEHtqVWIPuXVXwse21ZkkTLfc WJRjmZ8HsHawikbkk2+D8oIUtIztxqdylMFFLJjk9Fsn4T4TWtyzMYlJYGOMVc3WcWAa 2c/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=L0b6ekwQ+2V0lpxiU3U4YMDKi4QNx+8EvSzJuNBfha8=; b=AdMqCSJhOgA3FzUr35px1Iyebv1hUYT+TrbQbDpNjB+Ow89QGXrgJT2zC7nDlMXLxy zMgv+5d4lXLDrUzwD8hN1Bj/KF7fVsB8nA4SrflJIQIAc6ttJmayNjhEHHK76GOw67RB GT38vs1EA4om+UI+LtWC0AfOSm1O1gu7bUNKT5SQT7Ul+qdvXaOK5nPUSE48uz2/RHFc krfUugLb9SHhHG1VKUzAXDhS/rrAqbfGJAuEBp334h/tK32oAG4vHd5ebzYywhzplbDA 4Lgo41NMMfk5uh8aklm7Fk1dHCRgN8lL+GRTBKMm3PjUJ6aKayUiKU+n77mjcRr3bjWE EzuA== X-Gm-Message-State: APjAAAWZMW1Otr0Ed0D8/3Nn07D1aAqVO5ghVMdVSpxfjn9Q4j6sr/qo 7fjeRrGA4azXggxFH/xVame+BMwX X-Google-Smtp-Source: APXvYqzPGGux3mKiZafdWEzHixzMg1SaExetc3v4s1b2Jv/8keOZTb5UHQZwdLOfD6oPTkrdx+aLGw== X-Received: by 2002:adf:cf0e:: with SMTP id o14mr22435985wrj.182.1556134795262; Wed, 24 Apr 2019 12:39:55 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id n18sm16281372wrt.16.2019.04.24.12.39.52 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 12:39:53 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 22:38:54 +0300 Message-Id: <20190424193859.31817-16-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424193859.31817-1-arilou@gmail.com> References: <20190424193859.31817-1-arilou@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::443 Subject: [Qemu-devel] [PATCH v5 16/21] gdbstub: Implement step (s pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 18949120be..809503c20a 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1806,6 +1806,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; @@ -1938,13 +1948,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 Wed Apr 24 19:38:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1090445 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="DtCCAgic"; 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 44q9zM1f9dz9s4Y for ; Thu, 25 Apr 2019 05:55:43 +1000 (AEST) Received: from localhost ([127.0.0.1]:46505 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNzZ-0007wQ-7r for incoming@patchwork.ozlabs.org; Wed, 24 Apr 2019 15:55:41 -0400 Received: from eggs.gnu.org ([209.51.188.92]:56477) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNkO-00042p-Ku for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:40:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJNkN-0004I9-Ax for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:40:00 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:35079) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJNkN-0004Gk-4U for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:39:59 -0400 Received: by mail-wm1-x342.google.com with SMTP id y197so6751831wmd.0 for ; Wed, 24 Apr 2019 12:39:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ARCXn+8Wo0U+oiTppL+C49FLsYT2QmTKL0yfmugVNz8=; b=DtCCAgiclLBLPlbio9vUnPnpzrbPWWH3HKOmWbEbTGpRNVHWXh7lgJKN+N42WYhXb+ 0HMi7lxgF97TBiC7bT4/iD39XrgNt9CtgsiK7CWcMcZp24cGgR6pUlnXv2++/0uXdfvi Lhtee5cu7IHmzhEyCv7pghPIrfMaCKFzURT7L/vAKxr3xY46Vy0+xZ1mRkVpXinjvSwX zf+NVdJlR93++i9iEaT2RGC9xn7LFzFNHc8R7OhJaaGLzTyShF/PCZEl6/5f48yQGx1o 8l8JdepCxpryH0dFWgAfXf/mQyrffkmJfNmuMisuRhMyhHGNvSk8EybwCYeCV3nBsF7H EYKw== 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=ARCXn+8Wo0U+oiTppL+C49FLsYT2QmTKL0yfmugVNz8=; b=EDKP2FWOgZDriheGFLQafeH3SkL+8qjOwP8cvAFBNPmbERdR7jNO1eR3cbahJm9Ud1 xxcF5yUuGLo4tjo6B01gyjGN2UojEicuPBypYLq7qA9KVZxyFZIhufLsmf2P1gle0y/7 bZTEsDXfIBDs736sRQYUBVyLpAt1HMdP5HEmQrnvKieNwRMphSgOndFdoQNpbk5gq9dV d06+9jX8OZkcx3a4S99Jdcw1+ZuJLpBPj3bkimhSATzuYwgD/htzUSUiN04tspALqa45 PHAJ6iwE1nJLgooIJlmh66RX8kmnsmchczqDwaxrig4bEEbyiSmHlnZKKIieuk4JEw2l 4CQA== X-Gm-Message-State: APjAAAXlsMUky3GEe2aMv8uD9JSm4HT49QA0eFLoIWyXChbh/6LOUN1F TlFxtLh4SLv5a8P6Jam2zMJYQJdo X-Google-Smtp-Source: APXvYqyNSC9I6B34LJOkeyGh++0RnrPOuQrzQ8LcafWvFB+R+M9OPWegpL5khRR7Jow5e8nMNWbj8g== X-Received: by 2002:a1c:dc43:: with SMTP id t64mr522506wmg.19.1556134797507; Wed, 24 Apr 2019 12:39:57 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id n18sm16281372wrt.16.2019.04.24.12.39.55 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 12:39:56 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 22:38:55 +0300 Message-Id: <20190424193859.31817-17-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424193859.31817-1-arilou@gmail.com> References: <20190424193859.31817-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 v5 17/21] gdbstub: Implement v commands with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 809503c20a..7bc00d7f77 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1816,6 +1816,106 @@ static void handle_step(GdbCmdContext *gdb_ctx, void *user_ctx) gdb_continue(gdb_ctx->s); } +static void handle_v_cont_query(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + put_packet(gdb_ctx->s, "vCont;c;C;s;S"); +} + +static void handle_v_cont(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + int res; + + if (!gdb_ctx->num_params) { + return; + } + + res = gdb_handle_vcont(gdb_ctx->s, gdb_ctx->params[0].data); + if ((res == -EINVAL) || (res == -ERANGE)) { + put_packet(gdb_ctx->s, "E22"); + } else if (res) { + put_packet(gdb_ctx->s, "\0"); + } +} + +static void handle_v_attach(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + GDBProcess *process; + CPUState *cpu; + char thread_id[16]; + + strcpy(gdb_ctx->str_buf, "E22"); + if (!gdb_ctx->num_params) { + goto cleanup; + } + + process = gdb_get_process(gdb_ctx->s, gdb_ctx->params[0].val_ul); + if (!process) { + goto cleanup; + } + + cpu = get_first_cpu_in_process(gdb_ctx->s, process); + if (!cpu) { + goto cleanup; + } + + process->attached = true; + gdb_ctx->s->g_cpu = cpu; + gdb_ctx->s->c_cpu = cpu; + + gdb_fmt_thread_id(gdb_ctx->s, cpu, thread_id, sizeof(thread_id)); + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), "T%02xthread:%s;", + GDB_SIGNAL_TRAP, thread_id); +cleanup: + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} + +static void handle_v_kill(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + /* Kill the target */ + put_packet(gdb_ctx->s, "OK"); + error_report("QEMU: Terminated via GDBstub"); + exit(0); +} + +static GdbCmdParseEntry gdb_v_commands_table[] = { + /* Order is important if has same prefix */ + { + .handler = handle_v_cont_query, + .cmd = "Cont?", + .cmd_startswith = 1 + }, + { + .handler = handle_v_cont, + .cmd = "Cont", + .cmd_startswith = 1, + .schema = "s0" + }, + { + .handler = handle_v_attach, + .cmd = "Attach;", + .cmd_startswith = 1, + .schema = "l0" + }, + { + .handler = handle_v_kill, + .cmd = "Kill;", + .cmd_startswith = 1 + }, +}; + +static void handle_v_commands(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + if (!gdb_ctx->num_params) { + return; + } + + if (process_string_cmd(gdb_ctx->s, NULL, gdb_ctx->params[0].data, + gdb_v_commands_table, + ARRAY_SIZE(gdb_v_commands_table))) { + put_packet(gdb_ctx->s, ""); + } +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -1823,7 +1923,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]; @@ -1872,66 +1972,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 Wed Apr 24 19:38:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1090425 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="safFpYa4"; 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 44q9mG0wZ0z9s4Y for ; Thu, 25 Apr 2019 05:46:05 +1000 (AEST) Received: from localhost ([127.0.0.1]:46398 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNqF-0000gu-ST for incoming@patchwork.ozlabs.org; Wed, 24 Apr 2019 15:46:03 -0400 Received: from eggs.gnu.org ([209.51.188.92]:56496) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNkR-00045x-FM for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:40:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJNkP-0004M4-La for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:40:03 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:52315) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJNkP-0004LA-EP for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:40:01 -0400 Received: by mail-wm1-x344.google.com with SMTP id j13so6166575wmh.2 for ; Wed, 24 Apr 2019 12:40:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0Iz5SrYAXu7VpCoWsP3e/cvDID9SYRQ00R50I33AURg=; b=safFpYa47ztPQZhbI5Yg4NQi5YatH2u6LOJqetCSwp14nzdbaibyRDI2z1PjlEaUPU mvsjbFTk3q5Grq7pWIclDxvTeV49aDK85QWvmOyi2EfHf0cRVXjTGG/0QBVqHVvwpsKk RAqLl/3W5BdBKKtAug+9j1YR8vvcsy51wGJrogCCoiS3ioC53/8/XTqYTcOfhKFLbOvg xTZOAXJu5sDzuq1lZ1AevWN/Q4gbziSHzjRbiZR9ZCT/3cwyqE396lDqlvnKU6Bvxumg NUYGk4nlTZdrT/i4uwl6pcAtAgDxlnCDFK1Y5QWJHTPABER5yAJNW4PN6kfW7zfh+Q51 UMgA== 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=0Iz5SrYAXu7VpCoWsP3e/cvDID9SYRQ00R50I33AURg=; b=Msjot74yNN3Odh0iTePWVQRD0gMc3rVTyMGk/FkUWENQHALUbYyvFtRsJMlix18fi/ gkplID4o2R0iwFntIddGXYTrCjoWZ9pq41ud8GIbNyXVb1+SN2FJqRo6Cum06T1BdzI+ 1LIDbbGAhEKPOexJTpQco2wP9o7BmICpX47yJwAXUdnXnVfJ2BAL+DHkxjrf1hSSEGu3 76R4tJzM0hn8GZNUIyyuJddH4bPP9fH+Xwt0+to5oMKP609uHytjAKOKRlp9nj+7lBaV XpPS7cVZYxyO6mERiGNPWU3jlNtbjFvcFseot1EPnLpJ+4x3ZEbnybMbT7EBJdtz/M1d V6YA== X-Gm-Message-State: APjAAAVk1I5BPQC7x39FjZTrFV1fR+9itWbOZsbpdK+FtQeqd2R7tRGF EPVzT6gjB6ypRnvISrNDSHRuwn3j X-Google-Smtp-Source: APXvYqyEtljDnWrteTGRDScqjjOVMIX2nfPvuU4/sMyXFrDGmvW9H7Y2cULmAZKA7kLm69KjkB11dQ== X-Received: by 2002:a7b:c054:: with SMTP id u20mr585320wmc.100.1556134799837; Wed, 24 Apr 2019 12:39:59 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id n18sm16281372wrt.16.2019.04.24.12.39.57 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 12:39:58 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 22:38:56 +0300 Message-Id: <20190424193859.31817-18-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424193859.31817-1-arilou@gmail.com> References: <20190424193859.31817-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 v5 18/21] gdbstub: Implement generic query (q pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 335 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 335 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index 7bc00d7f77..a2db1ec661 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1916,6 +1916,331 @@ static void handle_v_commands(GdbCmdContext *gdb_ctx, void *user_ctx) } } +static void handle_query_qemu_sstepbits(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), + "ENABLE=%x,NOIRQ=%x,NOTIMER=%x", SSTEP_ENABLE, + SSTEP_NOIRQ, SSTEP_NOTIMER); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} + +static void handle_set_qemu_sstep(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + if (!gdb_ctx->num_params) { + return; + } + + sstep_flags = gdb_ctx->params[0].val_ul; + put_packet(gdb_ctx->s, "OK"); +} + +static void handle_query_qemu_sstep(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), "0x%x", sstep_flags); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} + +static void handle_query_curr_tid(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + CPUState *cpu; + GDBProcess *process; + char thread_id[16]; + + /* + * "Current thread" remains vague in the spec, so always return + * the first thread of the current process (gdb returns the + * first thread). + */ + process = gdb_get_cpu_process(gdb_ctx->s, gdb_ctx->s->g_cpu); + cpu = get_first_cpu_in_process(gdb_ctx->s, process); + gdb_fmt_thread_id(gdb_ctx->s, cpu, thread_id, sizeof(thread_id)); + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), "QC%s", thread_id); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} + +static void handle_query_threads(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + char thread_id[16]; + + if (!gdb_ctx->s->query_cpu) { + put_packet(gdb_ctx->s, "l"); + return; + } + + gdb_fmt_thread_id(gdb_ctx->s, gdb_ctx->s->query_cpu, thread_id, + sizeof(thread_id)); + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), "m%s", thread_id); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); + gdb_ctx->s->query_cpu = + gdb_next_attached_cpu(gdb_ctx->s, gdb_ctx->s->query_cpu); +} + +static void handle_query_first_threads(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + gdb_ctx->s->query_cpu = gdb_first_attached_cpu(gdb_ctx->s); + handle_query_threads(gdb_ctx, user_ctx); +} + +static void handle_query_thread_extra(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + CPUState *cpu; + int len; + + if (!gdb_ctx->num_params || + gdb_ctx->params[0].thread_id.kind == GDB_READ_THREAD_ERR) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + cpu = gdb_get_cpu(gdb_ctx->s, gdb_ctx->params[0].thread_id.pid, + gdb_ctx->params[0].thread_id.tid); + if (!cpu) { + return; + } + + cpu_synchronize_state(cpu); + + if (gdb_ctx->s->multiprocess && (gdb_ctx->s->process_num > 1)) { + /* Print the CPU model and name in multiprocess mode */ + ObjectClass *oc = object_get_class(OBJECT(cpu)); + const char *cpu_model = object_class_get_name(oc); + char *cpu_name = object_get_canonical_path_component(OBJECT(cpu)); + len = snprintf((char *)gdb_ctx->mem_buf, sizeof(gdb_ctx->str_buf) / 2, + "%s %s [%s]", cpu_model, cpu_name, + cpu->halted ? "halted " : "running"); + g_free(cpu_name); + } else { + /* memtohex() doubles the required space */ + len = snprintf((char *)gdb_ctx->mem_buf, sizeof(gdb_ctx->str_buf) / 2, + "CPU#%d [%s]", cpu->cpu_index, + cpu->halted ? "halted " : "running"); + } + trace_gdbstub_op_extra_info((char *)gdb_ctx->mem_buf); + memtohex(gdb_ctx->str_buf, gdb_ctx->mem_buf, len); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} + +#ifdef CONFIG_USER_ONLY +static void handle_query_offsets(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + TaskState *ts; + + ts = gdb_ctx->s->c_cpu->opaque; + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), + "Text=" TARGET_ABI_FMT_lx ";Data=" TARGET_ABI_FMT_lx + ";Bss=" TARGET_ABI_FMT_lx, + ts->info->code_offset, + ts->info->data_offset, + ts->info->data_offset); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} +#else +static void handle_query_rcmd(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + int len; + + if (!gdb_ctx->num_params) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + len = strlen(gdb_ctx->params[0].data); + if (len % 2) { + put_packet(gdb_ctx->s, "E01"); + return; + } + + len = len / 2; + hextomem(gdb_ctx->mem_buf, gdb_ctx->params[0].data, len); + gdb_ctx->mem_buf[len++] = 0; + qemu_chr_be_write(gdb_ctx->s->mon_chr, gdb_ctx->mem_buf, len); + put_packet(gdb_ctx->s, "OK"); + +} +#endif + +static void handle_query_supported(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + CPUClass *cc; + + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), "PacketSize=%x", + MAX_PACKET_LENGTH); + cc = CPU_GET_CLASS(first_cpu); + if (cc->gdb_core_xml_file) { + pstrcat(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), + ";qXfer:features:read+"); + } + + if (gdb_ctx->num_params && + strstr(gdb_ctx->params[0].data, "multiprocess+")) { + gdb_ctx->s->multiprocess = true; + } + + pstrcat(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), ";multiprocess+"); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); +} + +static void handle_query_xfer_features(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + GDBProcess *process; + CPUClass *cc; + unsigned long len, total_len, addr; + const char *xml; + const char *p; + + if (gdb_ctx->num_params < 3) { + put_packet(gdb_ctx->s, "E22"); + return; + } + + process = gdb_get_cpu_process(gdb_ctx->s, gdb_ctx->s->g_cpu); + cc = CPU_GET_CLASS(gdb_ctx->s->g_cpu); + if (!cc->gdb_core_xml_file) { + put_packet(gdb_ctx->s, ""); + return; + } + + gdb_has_xml = true; + p = gdb_ctx->params[0].data; + xml = get_feature_xml(gdb_ctx->s, p, &p, process); + if (!xml) { + put_packet(gdb_ctx->s, "E00"); + return; + } + + addr = gdb_ctx->params[1].val_ul; + len = gdb_ctx->params[2].val_ul; + total_len = strlen(xml); + if (addr > total_len) { + put_packet(gdb_ctx->s, "E00"); + return; + } + + if (len > (MAX_PACKET_LENGTH - 5) / 2) { + len = (MAX_PACKET_LENGTH - 5) / 2; + } + + if (len < total_len - addr) { + gdb_ctx->str_buf[0] = 'm'; + len = memtox(gdb_ctx->str_buf + 1, xml + addr, len); + } else { + gdb_ctx->str_buf[0] = 'l'; + len = memtox(gdb_ctx->str_buf + 1, xml + addr, total_len - addr); + } + + put_packet_binary(gdb_ctx->s, gdb_ctx->str_buf, len + 1, true); +} + +static void handle_query_attached(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + put_packet(gdb_ctx->s, GDB_ATTACHED); +} + +static GdbCmdParseEntry gdb_gen_query_set_common_table[] = { + /* Order is important if has same prefix */ + { + .handler = handle_query_qemu_sstepbits, + .cmd = "qemu.sstepbits", + .cmd_full_match = 1 + }, + { + .handler = handle_query_qemu_sstep, + .cmd = "qemu.sstep", + .cmd_full_match = 1, + }, + { + .handler = handle_set_qemu_sstep, + .cmd = "qemu.sstep=", + .cmd_startswith = 1, + .schema = "l0" + }, +}; + +static GdbCmdParseEntry gdb_gen_query_table[] = { + { + .handler = handle_query_curr_tid, + .cmd = "C", + .cmd_full_match = 1 + }, + { + .handler = handle_query_threads, + .cmd = "sThreadInfo", + .cmd_full_match = 1 + }, + { + .handler = handle_query_first_threads, + .cmd = "fThreadInfo", + .cmd_full_match = 1 + }, + { + .handler = handle_query_thread_extra, + .cmd = "ThreadExtraInfo,", + .cmd_startswith = 1, + .schema = "t0" + }, +#ifdef CONFIG_USER_ONLY + { + .handler = handle_query_offsets, + .cmd = "Offsets", + .cmd_full_match = 1 + }, +#else + { + .handler = handle_query_rcmd, + .cmd = "Rcmd,", + .cmd_startswith = 1, + .schema = "s0" + }, +#endif + { + .handler = handle_query_supported, + .cmd = "Supported:", + .cmd_startswith = 1, + .schema = "s0" + }, + { + .handler = handle_query_supported, + .cmd = "Supported", + .cmd_full_match = 1, + .schema = "s0" + }, + { + .handler = handle_query_xfer_features, + .cmd = "Xfer:features:read:", + .cmd_startswith = 1, + .schema = "s:l,l0" + }, + { + .handler = handle_query_attached, + .cmd = "Attached:", + .cmd_startswith = 1 + }, + { + .handler = handle_query_attached, + .cmd = "Attached", + .cmd_full_match = 1 + }, +}; + +static void handle_gen_query(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + if (!gdb_ctx->num_params) { + return; + } + + if (!process_string_cmd(gdb_ctx->s, NULL, gdb_ctx->params[0].data, + gdb_gen_query_set_common_table, + ARRAY_SIZE(gdb_gen_query_set_common_table))) { + return; + } + + if (process_string_cmd(gdb_ctx->s, NULL, gdb_ctx->params[0].data, + gdb_gen_query_table, + ARRAY_SIZE(gdb_gen_query_table))) { + put_packet(gdb_ctx->s, ""); + } +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; @@ -2129,6 +2454,16 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) } break; case 'q': + { + static const GdbCmdParseEntry gen_query_cmd_desc = { + .handler = handle_gen_query, + .cmd = "q", + .cmd_startswith = 1, + .schema = "s0" + }; + cmd_parser = &gen_query_cmd_desc; + } + break; case 'Q': /* parse any 'q' packets here */ if (!strcmp(p,"qemu.sstepbits")) { From patchwork Wed Apr 24 19:38:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1090442 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="ZZ4T32CA"; 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 44q9wL1Fvxz9s4Y for ; Thu, 25 Apr 2019 05:53:06 +1000 (AEST) Received: from localhost ([127.0.0.1]:46479 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNx2-0006Kn-79 for incoming@patchwork.ozlabs.org; Wed, 24 Apr 2019 15:53:04 -0400 Received: from eggs.gnu.org ([209.51.188.92]:56515) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNkT-000485-PT for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:40:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJNkS-0004QY-Cx for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:40:05 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:38441) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJNkS-0004Oy-46 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:40:04 -0400 Received: by mail-wr1-x442.google.com with SMTP id f14so26189146wrj.5 for ; Wed, 24 Apr 2019 12:40:04 -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=8oEFDKxbCtKm7exNUDzwxsBAyq4ksqjhK1GGeb9omBg=; b=ZZ4T32CAomEDdb58zA943BZo6SuokC/7g2nFiG0Y0xPJYUW3j64aJAbARZY2zvQR4Y kPc3bvMfO2agn8GV8C3C58v/oWWkzSdtpdtifb+ZOftEeZ3FwFEQHDVcwUg1tRdt9oqG 3UZx06bLQY6wB4m+zMDXFT2D2E/oJskxZyvhk/lsoeiDzxxPtijXLF6QVbO4WpRtDp+0 papZmBE5icQf9Ay88ZdPnue1bssE+roI2VUUZ5I61WTPKZ5aGJ1Pb9v2vfEcCKIXqEz/ TMKDnzCGoHOtra1UCjFTajd9OtHUuLuu/6szrrcFqP9PBrDMAl6DkbPuh4AYAXey9Kbx Y13Q== 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=8oEFDKxbCtKm7exNUDzwxsBAyq4ksqjhK1GGeb9omBg=; b=kT0QKHVAqV4MUEOQ6LnKxTDN24QULdPxZQEpAJy7EkWMA+xOgvi9ZdDO+d3pFJVbaK Q7/kFFEc9/SfrJQK+F+6sl/QHrUct4+icjE2cztTc6s6of8JFaQP4EddRtTMUqnVhcaF mB7Y5hzz72MI8tblbzogZ0ecOBKqVrS9F3t+3FgyaKfA+y2bCeQrImC1yq1/DwQzLKJf KEtQj3UoMTzw1xjNjSQHOTNmUD4a/l8lkZ42AzcjV6WbbnrTRbOHm2M6zNt0gQ4lq5k5 REYNZ8MpR+hoVdNUEpMMFZ5vGa9iagVuIzWaXrxAUGP10EVfpmwpNEZHxPziSaOrIPz5 pzhA== X-Gm-Message-State: APjAAAVkVZeNBByRyNTkNMEd+oeKmHY8OvuIr49ASmD744RdgagF6LdI TIT7b1td9qcqJAk0CXG94Tt8rCbw X-Google-Smtp-Source: APXvYqxonFrUHEhyFRRJWJJ7/ZMB8Jbm82g0RRNKpP72IAY7oyQMtf5P6mOK3NNFwvQ+4aKPWwEfhg== X-Received: by 2002:a5d:6646:: with SMTP id f6mr8993450wrw.68.1556134802099; Wed, 24 Apr 2019 12:40:02 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id n18sm16281372wrt.16.2019.04.24.12.39.59 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 12:40:00 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 22:38:57 +0300 Message-Id: <20190424193859.31817-19-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424193859.31817-1-arilou@gmail.com> References: <20190424193859.31817-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 v5 19/21] gdbstub: Implement generic set (Q pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 213 +++++++----------------------------------------------- 1 file changed, 25 insertions(+), 188 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index a2db1ec661..779da2aa77 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 @@ -2241,18 +2233,28 @@ static void handle_gen_query(GdbCmdContext *gdb_ctx, void *user_ctx) } } +static void handle_gen_set(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + if (!gdb_ctx->num_params) { + return; + } + + if (!process_string_cmd(gdb_ctx->s, NULL, gdb_ctx->params[0].data, + gdb_gen_query_set_common_table, + ARRAY_SIZE(gdb_gen_query_set_common_table))) { + return; + } + + put_packet(gdb_ctx->s, ""); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { - CPUState *cpu; - GDBProcess *process; - CPUClass *cc; const char *p; - uint32_t pid, tid; - int ch, type; + int ch; uint8_t mem_buf[MAX_PACKET_LENGTH]; char buf[sizeof(mem_buf) + 1 /* trailing NUL */]; char thread_id[16]; - target_ulong addr, len; const GdbCmdParseEntry *cmd_parser = NULL; trace_gdbstub_io_command(line_buf); @@ -2465,182 +2467,17 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) } break; case 'Q': - /* parse any 'q' packets here */ - if (!strcmp(p,"qemu.sstepbits")) { - /* Query Breakpoint bit definitions */ - snprintf(buf, sizeof(buf), "ENABLE=%x,NOIRQ=%x,NOTIMER=%x", - SSTEP_ENABLE, - SSTEP_NOIRQ, - SSTEP_NOTIMER); - put_packet(s, buf); - break; - } else if (is_query_packet(p, "qemu.sstep", '=')) { - /* Display or change the sstep_flags */ - p += 10; - if (*p != '=') { - /* Display current setting */ - snprintf(buf, sizeof(buf), "0x%x", sstep_flags); - put_packet(s, buf); - break; - } - p++; - type = strtoul(p, (char **)&p, 16); - sstep_flags = type; - put_packet(s, "OK"); - break; - } else if (strcmp(p,"C") == 0) { - /* - * "Current thread" remains vague in the spec, so always return - * the first thread of the current process (gdb returns the - * first thread). - */ - cpu = get_first_cpu_in_process(s, gdb_get_cpu_process(s, s->g_cpu)); - snprintf(buf, sizeof(buf), "QC%s", - gdb_fmt_thread_id(s, cpu, thread_id, sizeof(thread_id))); - put_packet(s, buf); - break; - } else if (strcmp(p,"fThreadInfo") == 0) { - s->query_cpu = gdb_first_attached_cpu(s); - goto report_cpuinfo; - } else if (strcmp(p,"sThreadInfo") == 0) { - report_cpuinfo: - if (s->query_cpu) { - snprintf(buf, sizeof(buf), "m%s", - gdb_fmt_thread_id(s, s->query_cpu, - thread_id, sizeof(thread_id))); - put_packet(s, buf); - s->query_cpu = gdb_next_attached_cpu(s, s->query_cpu); - } else - put_packet(s, "l"); - break; - } else if (strncmp(p,"ThreadExtraInfo,", 16) == 0) { - if (read_thread_id(p + 16, &p, &pid, &tid) == GDB_READ_THREAD_ERR) { - put_packet(s, "E22"); - break; - } - cpu = gdb_get_cpu(s, pid, tid); - if (cpu != NULL) { - cpu_synchronize_state(cpu); - - if (s->multiprocess && (s->process_num > 1)) { - /* Print the CPU model and name in multiprocess mode */ - ObjectClass *oc = object_get_class(OBJECT(cpu)); - const char *cpu_model = object_class_get_name(oc); - char *cpu_name = - object_get_canonical_path_component(OBJECT(cpu)); - len = snprintf((char *)mem_buf, sizeof(buf) / 2, - "%s %s [%s]", cpu_model, cpu_name, - cpu->halted ? "halted " : "running"); - g_free(cpu_name); - } else { - /* memtohex() doubles the required space */ - len = snprintf((char *)mem_buf, sizeof(buf) / 2, - "CPU#%d [%s]", cpu->cpu_index, - cpu->halted ? "halted " : "running"); - } - trace_gdbstub_op_extra_info((char *)mem_buf); - memtohex(buf, mem_buf, len); - put_packet(s, buf); - } - break; - } -#ifdef CONFIG_USER_ONLY - else if (strcmp(p, "Offsets") == 0) { - TaskState *ts = s->c_cpu->opaque; - - snprintf(buf, sizeof(buf), - "Text=" TARGET_ABI_FMT_lx ";Data=" TARGET_ABI_FMT_lx - ";Bss=" TARGET_ABI_FMT_lx, - ts->info->code_offset, - ts->info->data_offset, - ts->info->data_offset); - put_packet(s, buf); - break; - } -#else /* !CONFIG_USER_ONLY */ - else if (strncmp(p, "Rcmd,", 5) == 0) { - int len = strlen(p + 5); - - if ((len % 2) != 0) { - put_packet(s, "E01"); - break; - } - len = len / 2; - hextomem(mem_buf, p + 5, len); - mem_buf[len++] = 0; - qemu_chr_be_write(s->mon_chr, mem_buf, len); - put_packet(s, "OK"); - break; - } -#endif /* !CONFIG_USER_ONLY */ - if (is_query_packet(p, "Supported", ':')) { - snprintf(buf, sizeof(buf), "PacketSize=%x", MAX_PACKET_LENGTH); - cc = CPU_GET_CLASS(first_cpu); - if (cc->gdb_core_xml_file != NULL) { - pstrcat(buf, sizeof(buf), ";qXfer:features:read+"); - } - - if (strstr(p, "multiprocess+")) { - s->multiprocess = true; - } - pstrcat(buf, sizeof(buf), ";multiprocess+"); - - put_packet(s, buf); - break; - } - if (strncmp(p, "Xfer:features:read:", 19) == 0) { - const char *xml; - target_ulong total_len; - - process = gdb_get_cpu_process(s, s->g_cpu); - cc = CPU_GET_CLASS(s->g_cpu); - if (cc->gdb_core_xml_file == NULL) { - goto unknown_command; - } - - gdb_has_xml = true; - p += 19; - xml = get_feature_xml(s, p, &p, process); - if (!xml) { - snprintf(buf, sizeof(buf), "E00"); - put_packet(s, buf); - break; - } - - if (*p == ':') - p++; - addr = strtoul(p, (char **)&p, 16); - if (*p == ',') - p++; - len = strtoul(p, (char **)&p, 16); - - total_len = strlen(xml); - if (addr > total_len) { - snprintf(buf, sizeof(buf), "E00"); - put_packet(s, buf); - break; - } - if (len > (MAX_PACKET_LENGTH - 5) / 2) - len = (MAX_PACKET_LENGTH - 5) / 2; - if (len < total_len - addr) { - buf[0] = 'm'; - len = memtox(buf + 1, xml + addr, len); - } else { - buf[0] = 'l'; - len = memtox(buf + 1, xml + addr, total_len - addr); - } - put_packet_binary(s, buf, len + 1, true); - break; - } - if (is_query_packet(p, "Attached", ':')) { - put_packet(s, GDB_ATTACHED); - break; + { + static const GdbCmdParseEntry gen_set_cmd_desc = { + .handler = handle_gen_set, + .cmd = "Q", + .cmd_startswith = 1, + .schema = "s0" + }; + cmd_parser = &gen_set_cmd_desc; } - /* Unrecognised 'q' command. */ - goto unknown_command; - + break; default: - unknown_command: /* put empty packet */ buf[0] = '\0'; put_packet(s, buf); From patchwork Wed Apr 24 19:38:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1090444 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="EhfCzwsi"; 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 44q9yZ3jrCz9s55 for ; Thu, 25 Apr 2019 05:55:02 +1000 (AEST) Received: from localhost ([127.0.0.1]:46494 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNyu-0007WL-Hk for incoming@patchwork.ozlabs.org; Wed, 24 Apr 2019 15:55:00 -0400 Received: from eggs.gnu.org ([209.51.188.92]:56527) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNkX-0004BL-3H for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:40:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJNkW-0004Sf-4P for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:40:09 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:35735) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJNkV-0004SQ-Uh for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:40:08 -0400 Received: by mail-wr1-x444.google.com with SMTP id f7so4176870wrs.2 for ; Wed, 24 Apr 2019 12:40: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=vbRIrSe2/0YQKchHifA9WtEnR/rS78BpaRVSv6nPF1c=; b=EhfCzwsiHbgEXsdH7sh+2VwUex2Ki9uy1apXkhbgC8D9lEgW4a44pHJ1n8FyjP7gEu 2IiBIYz5/1kTm+gq9C172GxmgfQcSQBt6qAo8CIXuDgC6hPc018ysk57H0ykNsLgT7C4 NKf3KHz5xoWVQfSywR82MXNQegqNZbynQHrXgUyLIH0wWv93RyZOXSQbbfhwiENQ+zqx +VBiLDnDoQ/7kXdIAx+CTqx4M951hC6vAggGiRqHVXa6ZFjs4D0E/BAnkRwzu0q2BolR 3wvAUpaP8Qtat1cMut5i+dN/YMlpdy2Q8plW5NQftSd3hHgK0c7iIiEbHAfS/N51Oab9 ujWg== 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=vbRIrSe2/0YQKchHifA9WtEnR/rS78BpaRVSv6nPF1c=; b=EPQRL2nOdxam7u5khut7IaBb1s8Zt/gvH+WuAaiSXK8Jxmkymeshfnacu3BrLupRmH NaOgXUax2PB1Za01Lh9bP1whg885zqRllB42utE67QxRVF9bvlH/KlLZWnDefYVJsmwI k05PULr0OT59VAYNx0Be0nM6vH0+HSUfKFHcj7sn5wy5uE4emhJkZw9aWDZRieUTMjCy 4lAamULCC7klJ5CeAiluPFFFyOrphd5oixnuIU+8NfGDbdxnLsT6GAFxqNuoWIF7FVqi ZofNsPvrehzoxNKOCmG4sPjxt2GUjHcnoqHL1ePgX4Mst/lVtWA+IGpB1tkpTa5jcjVC 03OQ== X-Gm-Message-State: APjAAAVqdvvzNE+cZJ+JZdumrJWtsqAc362gTwhivrPmr1Qlb8PwCrkp kzIB0VZvcEtfuql8xtD0debWPLFH X-Google-Smtp-Source: APXvYqxuRhrkpFds2JNzoDF+Go+EBq+kUJb/iRWk8utl+zarpqhf0zGV0qm4JHn/j0o9ChDrNp+6oA== X-Received: by 2002:adf:ee8b:: with SMTP id b11mr12106162wro.123.1556134804852; Wed, 24 Apr 2019 12:40:04 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id n18sm16281372wrt.16.2019.04.24.12.40.02 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 12:40:03 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 22:38:58 +0300 Message-Id: <20190424193859.31817-20-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424193859.31817-1-arilou@gmail.com> References: <20190424193859.31817-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 v5 20/21] gdbstub Implement target halted (? pkt) with new infra X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Doron Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Jon Doron --- gdbstub.c | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 779da2aa77..8838241209 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -2248,13 +2248,30 @@ static void handle_gen_set(GdbCmdContext *gdb_ctx, void *user_ctx) put_packet(gdb_ctx->s, ""); } +static void handle_target_halt(GdbCmdContext *gdb_ctx, void *user_ctx) +{ + char thread_id[16]; + + /* TODO: Make this return the correct value for user-mode. */ + gdb_fmt_thread_id(gdb_ctx->s, gdb_ctx->s->c_cpu, thread_id, + sizeof(thread_id)); + snprintf(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf), "T%02xthread:%s;", + GDB_SIGNAL_TRAP, thread_id); + put_packet(gdb_ctx->s, gdb_ctx->str_buf); + /* + * Remove all the breakpoints when this query is issued, + * because gdb is doing and initial connect and the state + * should be cleaned up. + */ + gdb_breakpoint_remove_all(); +} + static int gdb_handle_packet(GDBState *s, const char *line_buf) { const char *p; int ch; uint8_t mem_buf[MAX_PACKET_LENGTH]; char buf[sizeof(mem_buf) + 1 /* trailing NUL */]; - char thread_id[16]; const GdbCmdParseEntry *cmd_parser = NULL; trace_gdbstub_io_command(line_buf); @@ -2266,15 +2283,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 Wed Apr 24 19:38:59 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Doron X-Patchwork-Id: 1090432 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="N28EOZry"; 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 44q9r552zDz9s5c for ; Thu, 25 Apr 2019 05:49:25 +1000 (AEST) Received: from localhost ([127.0.0.1]:46422 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNtT-0003Rr-LS for incoming@patchwork.ozlabs.org; Wed, 24 Apr 2019 15:49:23 -0400 Received: from eggs.gnu.org ([209.51.188.92]:56551) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hJNkZ-0004H1-T7 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:40:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hJNkY-0004XJ-T8 for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:40:11 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:35733) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hJNkY-0004Vy-Ld for qemu-devel@nongnu.org; Wed, 24 Apr 2019 15:40:10 -0400 Received: by mail-wr1-x441.google.com with SMTP id f7so4177026wrs.2 for ; Wed, 24 Apr 2019 12:40: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=Ug7lH5JQX2D1LVe7jW+RIkoeBivN61kq/FZwpsv0F+4=; b=N28EOZryNDYx9JGeSRKnuNiR5EcCLoVv5geHixzg7NVz5JmwOBdj6P5dRQOOpbwYa0 fve8WbtWpLjDKYw15TCdPQBLIAzydTMzbvCLsqOhGAL599YPPTcMD7uBL6Mut9RH5lgt u/RJICCd39KVaDr9qz9mPCSjvVKGHhlFq24dBpj9MjbD7+i19WpfDX5ZTjwO4LxPaygc byQUEHQ/ig6MZLuoR2IgjFVPM3jWCYSbh/kdNt+r/3p+EnzVFVC5P3d3qJAQjFR4NpKD /VcggmF/jAQbw/5NrqSSKuqK7mfjqZTq11LUq2HFmfH4ytduYE+ADxY9WomPydeZhJbQ KO1w== 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=Ug7lH5JQX2D1LVe7jW+RIkoeBivN61kq/FZwpsv0F+4=; b=j88a3vVuDmFJ367Fi4614ThxndsXMi1pDrs5rAjKqijb4W0PoeeXBBmycrcz0WSIst uMJEViSkD+/maHYY71UKjIDHl1BveysChawwkBU0B2HgyCT3vlAWwdvsGkOtvU5hcHu/ xvqn8pukA6JeqSuFAquV4mN6dKVZGyt+hcru0Gl+99cQQn2tZXaYsizongJAK62VwUbP vGHNAFsGk6pdsaBtYLKSKyXMZYBZiQ8bJ638WGTM4hlTfzzuw+ao75QZk1WDhKuNCV2a q5ojF2/7rGKdPW4TpPwCur1RPqAlW9IDpGoCA2tsWsBIJE5OU7wBqFRzcJKC7EYc7YKe Ag6w== X-Gm-Message-State: APjAAAWAWqWoINW3PS2oqLECIOC7kvkNhGxRbOEN6+bkjWlLmVdXpuJR Ugn7aJZ2BNn2fUwWcyzGJiR8jHAh X-Google-Smtp-Source: APXvYqziI8/oIFT6GAZbG3z/zVpuEHqO1UEuZK2AOpD3DS/yWFFF3DJsEWaPTUX4H7sAkDHqrDabAA== X-Received: by 2002:a5d:6987:: with SMTP id g7mr21851518wru.299.1556134808940; Wed, 24 Apr 2019 12:40:08 -0700 (PDT) Received: from linux.local ([31.154.166.148]) by smtp.gmail.com with ESMTPSA id n18sm16281372wrt.16.2019.04.24.12.40.04 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 12:40:05 -0700 (PDT) From: Jon Doron To: qemu-devel@nongnu.org Date: Wed, 24 Apr 2019 22:38:59 +0300 Message-Id: <20190424193859.31817-21-arilou@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190424193859.31817-1-arilou@gmail.com> References: <20190424193859.31817-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 v5 21/21] gdbstub: Clear unused variables in gdb_handle_packet X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 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 8838241209..32aeefbbe6 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -2268,17 +2268,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; @@ -2495,8 +2489,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; }