Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2197073/?format=api
{ "id": 2197073, "url": "http://patchwork.ozlabs.org/api/patches/2197073/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260216225228.53959-8-philmd@linaro.org/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260216225228.53959-8-philmd@linaro.org>", "list_archive_url": null, "date": "2026-02-16T22:52:23", "name": "[07/11] monitor/hmp: Handle gdb-xml exposed registers via gdb_get_register()", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "dee8916b2816e89d8bfecdceb0e6e9329f741ae4", "submitter": { "id": 85046, "url": "http://patchwork.ozlabs.org/api/people/85046/?format=api", "name": "Philippe Mathieu-Daudé", "email": "philmd@linaro.org" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260216225228.53959-8-philmd@linaro.org/mbox/", "series": [ { "id": 492361, "url": "http://patchwork.ozlabs.org/api/series/492361/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=492361", "date": "2026-02-16T22:52:16", "name": "monitor/hmp: Automatically handle gdb-xml exposed registers", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/492361/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2197073/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2197073/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=J4kdCcNA;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fFJ3k05GLz1xwF\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 17 Feb 2026 09:53:54 +1100 (AEDT)", "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1vs7T6-0002jv-AM; Mon, 16 Feb 2026 17:53:28 -0500", "from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <philmd@linaro.org>) id 1vs7T4-0002jJ-RM\n for qemu-devel@nongnu.org; Mon, 16 Feb 2026 17:53:26 -0500", "from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <philmd@linaro.org>) id 1vs7T3-0006Y8-6S\n for qemu-devel@nongnu.org; Mon, 16 Feb 2026 17:53:26 -0500", "by mail-wm1-x32d.google.com with SMTP id\n 5b1f17b1804b1-483770e0b25so31191095e9.0\n for <qemu-devel@nongnu.org>; Mon, 16 Feb 2026 14:53:24 -0800 (PST)", "from localhost.localdomain (88-187-86-199.subs.proxad.net.\n [88.187.86.199]) by smtp.gmail.com with ESMTPSA id\n 5b1f17b1804b1-4834d82a4c4sm762581625e9.10.2026.02.16.14.53.21\n (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256);\n Mon, 16 Feb 2026 14:53:22 -0800 (PST)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1771282403; x=1771887203; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=vJoFwYWGmCgQKszD1zzpvRarXGHFGfsi9ungJP2eo5s=;\n b=J4kdCcNAJ7BxpaTIWncQRh/9nxFU2g4E18+Tf1PC25V5g2UYd6mBVyHpEzAmUMPGq1\n 7ju1uPsrVXyV+MJXXi8TtC0V/K4erEOqlVo6DSOzjydVyQl6/+JQj0Zj96Awe7QMuRHI\n cYvXardVSzYHMgLh37QEX6L5FY885LE0puii/4ZZ9+Cm7rsvtEsPRV8rub2CBm9U6t8i\n EZ25Egx/G0SsqM9DXJmwoB3fdtx3tU/iWA8lEMsVnNECL+RZoDIpuxcPzsFUDndmQKgI\n leCr1hN5IGtaSdIKfNxG1J914+uNho/IU0tG4DBfS6jmeLQdrkzx5yGj1dytiAtg1LsU\n d4jA==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1771282403; x=1771887203;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=vJoFwYWGmCgQKszD1zzpvRarXGHFGfsi9ungJP2eo5s=;\n b=b2x1BNhdLEHeJl0DEmtnFIU7S7tppe8Neb3kZpxZOh67tsg1n4lHTt7aMXqUdC8hTf\n FILc5zhCWEIbLpUNynhuv0wVMTQCcPP9GWefytoltSLxfsNIsLi+tSQdP6p4FsFnRpK+\n XlQ8u/I3dfkE38Eqe4zgDjhGyY3kbCl6tqCxWt+NnuDdfBI3poVyrP4/85YJayiFAFDK\n FeTrrWH5TzundGu73ANnkUjvGJ7tK4MV0hs27RNlmp4SzokHJljgB/XKsVz+Nib1JD5T\n oUPmL0I6ic97d/edIXNUHCVREWEabwNo15vuNpEDYncLyLdkXoHxbhxCmcwB7tKuEG6y\n ZcUQ==", "X-Gm-Message-State": "AOJu0YzsMAEXsedO6mpgHfaLSslmBkmfPwIpzI2FV+uuNDWNz9l3H0u+\n UbhMLy1pd6QAK+UKk6ul7Fny0TdD2pHVd1ODpOeVGNF37XZsxSLfBUsHNLrh8JDUogqWA7WgTKu\n aXdUVL2Q=", "X-Gm-Gg": "AZuq6aI31Gb/YEIKHHoIA4CA+wNqsh5jFcIymZaDndaT5pAIlwOhdFrFxUR5JSSsRI4\n UOVzFZbEbrgciVIJJ6dQ1oOAKbMaameCrFot0qVeJDb6NMQCQr0j1qzz/IrWJ7CrZ1l1pOM6/fk\n bRE/ydpjy7uTH8K2aVLH5fyOAnPkj7pI6EzxJX7m6tLJ0ThMqz0V5/YEWFkpSCFOaD+BW6VlRca\n 8liEUChleveDfv6+Rycde+d9WuronEwNjhcGD87rekIyA0KNKifEhqkd1FXMuljOhwEX9DxBbg7\n 0D8B+FtlPsHyEIYYHGQKs3ySLthMCc5GavIhmGr0dvU2AkJulr5IP9V8uNeEaZsB/dYoao8s07v\n d+DjJQ4K0IJyp3e96TwgVRMx2fE6abfWqc9QSCy2vmLv06FNDzQTWEmpnByNHamg4uJyVbkLRke\n YvoG1AV/iZDC4pGseTmdcUYz+fZ88ifv1hToTYwzwf05V7VFeaCv243UXxWVYhTYH55XVjvRKTn\n EwiPTgWdlw=", "X-Received": "by 2002:a05:600c:c0ca:b0:483:78c5:d743 with SMTP id\n 5b1f17b1804b1-48378c5d9fcmr134497795e9.28.1771282403164;\n Mon, 16 Feb 2026 14:53:23 -0800 (PST)", "From": "=?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>", "To": "qemu-devel@nongnu.org", "Cc": "Laurent Vivier <laurent@vivier.eu>,\n \"Dr. David Alan Gilbert\" <dave@treblig.org>,\n Nicholas Piggin <npiggin@gmail.com>, Chinmay Rath <rathc@linux.ibm.com>,\n\t=?utf-8?q?Alex_Benn=C3=A9e?= <alex.bennee@linaro.org>,\n Zhao Liu <zhao1.liu@intel.com>,\n Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>,\n Pierrick Bouvier <pierrick.bouvier@linaro.org>,\n Artyom Tarasenko <atar4qemu@gmail.com>,\n Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>,\n Gustavo Romero <gustavo.romero@linaro.org>,\n Paolo Bonzini <pbonzini@redhat.com>, unisono@quyllur.org, =?utf-8?q?Philipp?=\n\t=?utf-8?q?e_Mathieu-Daud=C3=A9?= <philmd@linaro.org>, qemu-ppc@nongnu.org", "Subject": "[PATCH 07/11] monitor/hmp: Handle gdb-xml exposed registers via\n gdb_get_register()", "Date": "Mon, 16 Feb 2026 23:52:23 +0100", "Message-ID": "<20260216225228.53959-8-philmd@linaro.org>", "X-Mailer": "git-send-email 2.52.0", "In-Reply-To": "<20260216225228.53959-1-philmd@linaro.org>", "References": "<20260216225228.53959-1-philmd@linaro.org>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "Content-Transfer-Encoding": "8bit", "Received-SPF": "pass client-ip=2a00:1450:4864:20::32d;\n envelope-from=philmd@linaro.org; helo=mail-wm1-x32d.google.com", "X-Spam_score_int": "-20", "X-Spam_score": "-2.1", "X-Spam_bar": "--", "X-Spam_report": "(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no", "X-Spam_action": "no action", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "qemu development <qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org" }, "content": "Implement the gdb_get_register() helper and call it before the\nregular get_monitor_def() one. Registers is exposed via the\nGDB XML files will be directly handled, possibily allowing new\nregisters added to XML files to be automatically accessible in\nQEMU monitor. All targets having GDB XML files can now be used\nwithin the monitor.\n\nSigned-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>\n---\n monitor/hmp.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++---\n 1 file changed, 46 insertions(+), 3 deletions(-)", "diff": "diff --git a/monitor/hmp.c b/monitor/hmp.c\nindex 0a5bbf82197..0e5913fabb1 100644\n--- a/monitor/hmp.c\n+++ b/monitor/hmp.c\n@@ -27,14 +27,18 @@\n #include \"hw/core/qdev.h\"\n #include \"monitor-internal.h\"\n #include \"monitor/hmp.h\"\n+#include \"monitor/hmp-target.h\"\n #include \"qobject/qdict.h\"\n #include \"qobject/qnum.h\"\n+#include \"qemu/bswap.h\"\n #include \"qemu/config-file.h\"\n #include \"qemu/ctype.h\"\n #include \"qemu/cutils.h\"\n #include \"qemu/log.h\"\n #include \"qemu/option.h\"\n+#include \"qemu/target-info.h\"\n #include \"qemu/units.h\"\n+#include \"exec/gdbstub.h\"\n #include \"system/block-backend.h\"\n #include \"trace.h\"\n \n@@ -306,6 +310,46 @@ void hmp_help_cmd(Monitor *mon, const char *name)\n free_cmdline_args(args, nb_args);\n }\n \n+/*\n+ * Set @pval to the value in the register identified by @name.\n+ * return %true if the register is found, %false otherwise.\n+ */\n+static bool gdb_get_register(Monitor *mon, int64_t *pval, const char *name)\n+{\n+ g_autoptr(GArray) regs = NULL;\n+ CPUState *cs = mon_get_cpu(mon);\n+\n+ if (cs == NULL) {\n+ return false;\n+ }\n+\n+ regs = gdb_get_register_list(cs);\n+\n+ for (int i = 0; i < regs->len; i++) {\n+ GDBRegDesc *reg = &g_array_index(regs, GDBRegDesc, i);\n+ g_autoptr(GByteArray) buf = NULL;\n+ int reg_size;\n+\n+ if (!reg->name || g_strcmp0(name, reg->name)) {\n+ continue;\n+ }\n+\n+ buf = g_byte_array_new();\n+ reg_size = gdb_read_register(cs, buf, reg->gdb_reg);\n+ if (reg_size > sizeof(*pval)) {\n+ return false;\n+ }\n+\n+ if (target_big_endian()) {\n+ *pval = ldn_be_p(buf->data, reg_size);\n+ } else {\n+ *pval = ldn_le_p(buf->data, reg_size);\n+ }\n+ return true;\n+ }\n+ return false;\n+}\n+\n /*******************************************************************/\n \n static const char *pch;\n@@ -338,7 +382,6 @@ static int64_t expr_unary(Monitor *mon)\n {\n int64_t n;\n char *p;\n- int ret;\n \n switch (*pch) {\n case '+':\n@@ -393,8 +436,8 @@ static int64_t expr_unary(Monitor *mon)\n pch++;\n }\n *q = 0;\n- ret = get_monitor_def(mon, ®, buf);\n- if (ret < 0) {\n+ if (!gdb_get_register(mon, ®, buf)\n+ && get_monitor_def(mon, ®, buf) < 0) {\n expr_error(mon, \"unknown register\");\n }\n n = reg;\n", "prefixes": [ "07/11" ] }