Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.0/patches/2198321/?format=api
{ "id": 2198321, "url": "http://patchwork.ozlabs.org/api/1.0/patches/2198321/?format=api", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/1.0/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": "" }, "msgid": "<20260219191955.83815-17-philmd@linaro.org>", "date": "2026-02-19T19:19:18", "name": "[v2,16/50] 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/1.0/people/85046/?format=api", "name": "Philippe Mathieu-Daudé", "email": "philmd@linaro.org" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260219191955.83815-17-philmd@linaro.org/mbox/", "series": [ { "id": 492715, "url": "http://patchwork.ozlabs.org/api/1.0/series/492715/?format=api", "date": "2026-02-19T19:19:03", "name": "gdbstub: Build once on various targets (single-binary)", "version": 2, "mbox": "http://patchwork.ozlabs.org/series/492715/mbox/" } ], "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2198321/checks/", "tags": {}, "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=K3TJ2qUH;\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 4fH3G55T61z1xpl\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 20 Feb 2026 06:23:57 +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 1vt9c2-0003bs-88; Thu, 19 Feb 2026 14:23:07 -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 1vt9b6-0002hK-H5\n for qemu-devel@nongnu.org; Thu, 19 Feb 2026 14:22:03 -0500", "from mail-wm1-x331.google.com ([2a00:1450:4864:20::331])\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 1vt9b3-00087i-Es\n for qemu-devel@nongnu.org; Thu, 19 Feb 2026 14:22:00 -0500", "by mail-wm1-x331.google.com with SMTP id\n 5b1f17b1804b1-48371119eacso12115555e9.2\n for <qemu-devel@nongnu.org>; Thu, 19 Feb 2026 11:21:54 -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-483a31f9475sm18396265e9.14.2026.02.19.11.21.52\n (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256);\n Thu, 19 Feb 2026 11:21:52 -0800 (PST)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1771528913; x=1772133713; 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=GIBF2HW/bZyg5pcbM7t2mPIZcp+EQrzY/Ap5rHYsQ+w=;\n b=K3TJ2qUHPZudLtvUpjs6uPBNPyYDoaCvzTLbIymSUHCRT5GV4PbjzQlzP12ToLGCTW\n 1vICEMunH2t0JjhEbOfu0bk4cTymrlEkOo1gMdlfuKAdtSFMsEYApPTutz964t1FySsF\n sR6ZE7YGwx3WWu+ELUUkM088jZ/xbcViYLbbRLQz5QxU/JhpKea6la9IlfbVtEdYmMb8\n GofaBU9yq0eOsGMk114ailZHRCTVxm9uj+TTw3MMPJQzxy1TQV++TJ05DyWzaZeDV3kp\n 7bV3GdmMnBT7h/RUzBSw/Xc5caMAQcE/4C3Tm5l3rvzdwa1LNozy8X/UWtqy+DJv+Lib\n LJ8g==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1771528913; x=1772133713;\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=GIBF2HW/bZyg5pcbM7t2mPIZcp+EQrzY/Ap5rHYsQ+w=;\n b=L3Hp3tpAYypN72jEgVusNVwLumP0zU//jXzFL2+K3g5pvFIqxlFt9+AQC63MVPWW5h\n OP+pRoclX30Jz/mWszFjzWL3NTMaj2rDnd2sYXc5Sz+RXzOdhYLUvrnILD1OGHpDh43a\n vslHKx3G7RaJS7lAhMJ33BYgz3kqLKnjHh5ttthJ3k5f3ugKk09OgrDRhvqIc0Imh7Pz\n lnIKO1ADjm2QKSSYXOW5/GJKMqqMNFsdG94elVo8vkidnJ0pmGCyCFMqGgRK4lmnHEeo\n 94pyNl65DQevK5wwwvnMXXT+tg6wsJIKFWYIkRmGHuq0uflhP4uRUPwHKgE16sAJrWq6\n W+ew==", "X-Gm-Message-State": "AOJu0YxXV1nVB/4eMiIt9za7JFghDU0b/SQLmMme0iZ2Iw6Iz+Vf1SRK\n JYf7tBQMOKE8YkyIf28yemWV6GjQOlnlw9iaox1IvpAV7hT1SEVtmpbQbCORibajZ9wda6p5KhV\n bfsCLBmeqpQ==", "X-Gm-Gg": "AZuq6aJMZJi0nZj2r/bKbgv0hn4Ms04+qB/dMSZFly7CJHKhNdxTu1VNjKiZ8ayRdt4\n kmTVh1wcCfecdW+jUFVwiu10cWP7vOfRJQsvgOWuA4MZjQUtXN6SDXIVlazq5P+NGs0QNKme4dO\n CHrPuhunPM4hEkNHgI9neXivsoU2T1ddXvMjESOkYoMwVqfrJE2fP2zjh3Cz/w1RLcS9yy9MH7l\n ELcyne+E6XRFZfoUtW7IETA204jYfE0RyyAyEgzUL9cKJZjcoY5pRrlLlxTVnc3vOXWxCjPIMZM\n 9o8K7oECU/OCqLPkxHP9msvQYc0fmdS4J3JCC3+/euKdQzlVnAShpJjNtyGIK7ZM5cqClLlUh+8\n TnU0vs8yNX0NrnF7JqB/LqfkDAhFhU3VrADnkh/6jbsfKPWE/npRzxDy+7nLPJ1gl35lLiyNV5z\n 3UAYmqi6IGgCreF8uitkt+B3NUop2FD4GL+pGMgVvYPAG2/goV0KlrDd+gnHmGMc86K9wTZ8xTI\n WsIT5VHPAQ=", "X-Received": "by 2002:a05:600c:4e54:b0:480:4a90:1af2 with SMTP id\n 5b1f17b1804b1-4839c002d65mr100597615e9.35.1771528913236;\n Thu, 19 Feb 2026 11:21:53 -0800 (PST)", "From": "=?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>", "To": "qemu-devel@nongnu.org", "Cc": "Pierrick Bouvier <pierrick.bouvier@linaro.org>,\n Richard Henderson <richard.henderson@linaro.org>, qemu-s390x@nongnu.org,\n\t=?utf-8?q?Alex_Benn=C3=A9e?= <alex.bennee@linaro.org>, qemu-riscv@nongnu.org,\n qemu-ppc@nongnu.org,\n =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>,\n \"Dr. David Alan Gilbert\" <dave@treblig.org>", "Subject": "[PATCH v2 16/50] monitor/hmp: Handle gdb-xml exposed registers via\n gdb_get_register()", "Date": "Thu, 19 Feb 2026 20:19:18 +0100", "Message-ID": "<20260219191955.83815-17-philmd@linaro.org>", "X-Mailer": "git-send-email 2.52.0", "In-Reply-To": "<20260219191955.83815-1-philmd@linaro.org>", "References": "<20260219191955.83815-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::331;\n envelope-from=philmd@linaro.org; helo=mail-wm1-x331.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\nFor example with Loongarch, before:\n\n $ qemu-system-loongarch64 -M virt -S -monitor stdio\n QEMU 10.2.0 monitor - type 'help' for more information\n\n (qemu) info registers\n\n CPU#0\n PC=000000001c000000 FCSR0 0x00000000\n ...\n\n (qemu) p/x $pc\n unknown register\n Try \"help p\" for more information\n (qemu)\n\nand after:\n\n $ ./qemu-system-loongarch64 -M virt -S -monitor stdio\n QEMU 10.2.50 monitor - type 'help' for more information\n (qemu) p/x $pc\n 0x1c000000\n (qemu)\n\nSimilarly RISC-V:\n\n QEMU 10.2.0 monitor - type 'help' for more information\n (qemu) p/x $pc\n unknown register\n Try \"help p\" for more information\n\nVS\n\n QEMU 10.2.50 monitor - type 'help' for more information\n (qemu) p/x $pc\n 0x1000\n (qemu)\n\nReviewed-by: Dr. David Alan Gilbert <dave@treblig.org>\nSigned-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>\n---\nTODO (Dave on v1):\nadd more checks on the return size of\ngdb_read_register(..) just in case any arch is a bit screwy\n(e.g. if they're 0 for example?)\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": [ "v2", "16/50" ] }