From patchwork Mon Jan 22 14:56:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 764654 Delivered-To: patch@linaro.org Received: by 2002:a05:6000:10c4:b0:337:62d3:c6d5 with SMTP id b4csp1143368wrx; Mon, 22 Jan 2024 07:02:23 -0800 (PST) X-Google-Smtp-Source: AGHT+IF0+3ge5R5d9Uey0pSiNELigEz2EAxng9zi1Y8WcsV+4anfm/C+fUMHjBIj3EWHL/613NY0 X-Received: by 2002:a05:6214:2028:b0:684:e267:11aa with SMTP id 8-20020a056214202800b00684e26711aamr8336231qvf.123.1705935742476; Mon, 22 Jan 2024 07:02:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1705935742; cv=none; d=google.com; s=arc-20160816; b=wFuOtZyn6cuFIWdyISbOZmpyS9j8HAF2VPB3IkU/fyJry9TQWnUrvPqTn2SlbjVFZX rwU1i5OJu7QAaolB/J2jYeiQv3MGU2Y4HQdWyc9jPwvqdAQ5ypCJDr1lPaNnuGuI1IpA tNjMDQ2uT96Av+8nS1AKBJnXcDRSf/Q8wZUPYsl4Uzq0lGFLH6YQsuFYDX1OVuZfNcJO XMGBqL3K+BlwjF73hKt3OgMon+adPNjHuxdAl9nGhirwEZxvjSSBJUwjOfPmfWME/qik oZnzOlpeXz+G6JaZhVpUk+humldi0OCCgE7nzhWmzcmg0u+0jKVVPHRZJuuKmJGH9vXB T84Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=3KOWdwJWZtoTWqDMqrzzZRyWBV4iieoAaX695nl5QEU=; fh=mGQIuaf4A7RZOxcauYqguCwKMqzWt70hd4nAkQm0M6A=; b=eZQBfb/YC4FR9W3iKqXFUT3NHrHvn85Df1e9NARPHKiT5pnINPQ8W89waS2XXFVsQj 3Z//xicOOjExYY2BPgxpesELtBgOLOVFEnOgv98+9DRXkM9P4Oe3ogAMRl6cGU7lgh2K Rj6HsPo2Op5LuyvmhQW16JaLK+skc2n1S0eOLVLNTYk6zAmg0//1ZaG587iBnmpOiUub UbvOXff3cr9jDZoYVu7WRwaI7UC0M7j64+dqirxihCSouVvWQbEEcJPOLQsc2ZASpVC0 OuZ5Sf3VLfkKGC8ocn1e8aPqBxMjLL0pKOQK8h6GtNsACyrET0vu463PKzv8YKbp7/cs Spuw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="Mof+/23p"; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id s7-20020a0cdc07000000b0068664c0fd57si4177584qvk.540.2024.01.22.07.02.22 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Mon, 22 Jan 2024 07:02:22 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="Mof+/23p"; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rRvjR-0007RE-72; Mon, 22 Jan 2024 09:57:01 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rRvjC-0007HK-5h for qemu-devel@nongnu.org; Mon, 22 Jan 2024 09:56:46 -0500 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rRvis-0008Qr-P5 for qemu-devel@nongnu.org; Mon, 22 Jan 2024 09:56:45 -0500 Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-339208f5105so2836348f8f.1 for ; Mon, 22 Jan 2024 06:56:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1705935384; x=1706540184; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=3KOWdwJWZtoTWqDMqrzzZRyWBV4iieoAaX695nl5QEU=; b=Mof+/23p/3qlv7/7q3Z+OxJL7IHhEC/xXjZeLZmcbm8Ny3lOMH3kOd2kzDXxdIEjds z6tCYp74deVvWXNDucYXBfZIu2i/NaKbB73lttUZt1j8IznrS2x5GV0Aep6hVa+URbv7 n8o3Ao3olzIi4M2QSNVbGkhKmj2J2azR9iRwlc0qpldfY8LpT+qa6WXElJdVriThJkYR Rt2y8MDivryPQaxOmXpVVGyqA76ZjeofPbARdUY22uszdIZ2IykoFsXuWezUKxjhp7ft z4pnSMuqjiikp26xfDkP1u0eBzeukzL+CAB6+2U7GWAZUa4fZmlZewa7X9nXz9obsK6h DVpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705935384; x=1706540184; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3KOWdwJWZtoTWqDMqrzzZRyWBV4iieoAaX695nl5QEU=; b=Tp/NdiQaabG1nS//NND2P0kAKUUSJafOxP0eCnTevF0y9Fs5S47f8wfx2IGcb+3j2I yRbp/JoItNKH2KEVnnIZw86wE4ggimz/68bxu0HzAGskyqwa6vnManb2z2nqqPAfuhu0 o7gHsAa7L6Ijka01fQj1Q8VvxlFyUzcm5riW8VgDVMCrFEszMbS6mAt2ge9OdK+TEWkz 1tfD6Qo6oExYgxfEOZre4/0u/7CE7KcNIV8TaDtZRduySX2wUSv6uF1vL+qHFDOx1zgN iDlRLO7TUPYBtd0L5NHiYiXlKjXOabZG/QhhEPf4+gs85r+iIdaB5o09g0AmDxlxWdUB VQ9g== X-Gm-Message-State: AOJu0YzLop3bAdY371/o0V6tTj6VimKzkGXFUX2aIupteVFQEoLtgQnu Z4wiBXy2/H8N07KGjRnVND36/i6VZRy1zR4obUrq3in5Rov6JEOMPYETKNEwP8o= X-Received: by 2002:adf:f20e:0:b0:337:bfe1:16f3 with SMTP id p14-20020adff20e000000b00337bfe116f3mr1368564wro.13.1705935383847; Mon, 22 Jan 2024 06:56:23 -0800 (PST) Received: from draig.lan ([85.9.250.243]) by smtp.gmail.com with ESMTPSA id k2-20020a5d6282000000b0033838c2c169sm9307734wru.108.2024.01.22.06.56.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Jan 2024 06:56:19 -0800 (PST) Received: from draig.lan (localhost [IPv6:::1]) by draig.lan (Postfix) with ESMTP id 7D83E5F932; Mon, 22 Jan 2024 14:56:12 +0000 (GMT) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: qemu-devel@nongnu.org Cc: Marcel Apfelbaum , "Edgar E. Iglesias" , =?utf-8?q?Philippe_Mathieu-?= =?utf-8?q?Daud=C3=A9?= , Michael Rolnik , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Laurent Vivier , kvm@vger.kernel.org, Yoshinori Sato , Pierrick Bouvier , Palmer Dabbelt , Liu Zhiwei , Laurent Vivier , Yanan Wang , qemu-ppc@nongnu.org, Weiwei Li , qemu-s390x@nongnu.org, =?utf-8?q?Alex_Benn=C3=A9e?= , =?utf-8?q?C=C3=A9dri?= =?utf-8?q?c_Le_Goater?= , Peter Maydell , Alexandre Iooss , John Snow , Mahmoud Mandour , Wainer dos Santos Moschetta , Richard Henderson , Ilya Leoshkevich , Alistair Francis , David Woodhouse , Cleber Rosa , Beraldo Leal , Bin Meng , Nicholas Piggin , Aurelien Jarno , Daniel Henrique Barboza , Daniel Henrique Barboza , Thomas Huth , David Hildenbrand , qemu-riscv@nongnu.org, qemu-arm@nongnu.org, Paolo Bonzini , Song Gao , Eduardo Habkost , Brian Cain , Paul Durrant , Akihiko Odaki Subject: [PATCH v3 14/21] gdbstub: Add members to identify registers to GDBFeature Date: Mon, 22 Jan 2024 14:56:03 +0000 Message-Id: <20240122145610.413836-15-alex.bennee@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240122145610.413836-1-alex.bennee@linaro.org> References: <20240122145610.413836-1-alex.bennee@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::42a; envelope-from=alex.bennee@linaro.org; helo=mail-wr1-x42a.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, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org From: Akihiko Odaki These members will be used to help plugins to identify registers. The added members in instances of GDBFeature dynamically generated by CPUs will be filled in later changes. Signed-off-by: Akihiko Odaki Message-Id: <20240103173349.398526-36-alex.bennee@linaro.org> Message-Id: <20231213-gdb-v17-10-777047380591@daynix.com> Signed-off-by: Alex Bennée --- include/exec/gdbstub.h | 3 +++ gdbstub/gdbstub.c | 12 +++++++++--- target/riscv/gdbstub.c | 4 +--- scripts/feature_to_c.py | 14 +++++++++++++- 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index 82a8afa237f..da9ddfe54c5 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -13,12 +13,15 @@ typedef struct GDBFeature { const char *xmlname; const char *xml; + const char *name; + const char * const *regs; int num_regs; } GDBFeature; typedef struct GDBFeatureBuilder { GDBFeature *feature; GPtrArray *xml; + GPtrArray *regs; int base_reg; } GDBFeatureBuilder; diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c index 801eba9a0b0..420ab2a3766 100644 --- a/gdbstub/gdbstub.c +++ b/gdbstub/gdbstub.c @@ -419,9 +419,10 @@ void gdb_feature_builder_init(GDBFeatureBuilder *builder, GDBFeature *feature, builder->feature = feature; builder->xml = g_ptr_array_new(); g_ptr_array_add(builder->xml, header); + builder->regs = g_ptr_array_new(); builder->base_reg = base_reg; feature->xmlname = xmlname; - feature->num_regs = 0; + feature->name = name; } void gdb_feature_builder_append_tag(const GDBFeatureBuilder *builder, @@ -440,10 +441,12 @@ void gdb_feature_builder_append_reg(const GDBFeatureBuilder *builder, const char *type, const char *group) { - if (builder->feature->num_regs < regnum) { - builder->feature->num_regs = regnum; + if (builder->regs->len <= regnum) { + g_ptr_array_set_size(builder->regs, regnum + 1); } + builder->regs->pdata[regnum] = (gpointer *)name; + if (group) { gdb_feature_builder_append_tag( builder, @@ -469,6 +472,9 @@ void gdb_feature_builder_end(const GDBFeatureBuilder *builder) } g_ptr_array_free(builder->xml, TRUE); + + builder->feature->num_regs = builder->regs->len; + builder->feature->regs = (void *)g_ptr_array_free(builder->regs, FALSE); } const GDBFeature *gdb_find_static_feature(const char *xmlname) diff --git a/target/riscv/gdbstub.c b/target/riscv/gdbstub.c index 68d0fdc1fd6..d9b52ffd09b 100644 --- a/target/riscv/gdbstub.c +++ b/target/riscv/gdbstub.c @@ -266,11 +266,9 @@ static GDBFeature *riscv_gen_dynamic_csr_feature(CPUState *cs, int base_reg) } predicate = csr_ops[i].predicate; if (predicate && (predicate(env, i) == RISCV_EXCP_NONE)) { - g_autofree char *dynamic_name = NULL; name = csr_ops[i].name; if (!name) { - dynamic_name = g_strdup_printf("csr%03x", i); - name = dynamic_name; + name = g_strdup_printf("csr%03x", i); } gdb_feature_builder_append_reg(&builder, name, bitsize, i, diff --git a/scripts/feature_to_c.py b/scripts/feature_to_c.py index e04d6b2df7f..807af0e685c 100644 --- a/scripts/feature_to_c.py +++ b/scripts/feature_to_c.py @@ -50,7 +50,9 @@ def writeliteral(indent, bytes): sys.stderr.write(f'unexpected start tag: {element.tag}\n') exit(1) + feature_name = element.attrib['name'] regnum = 0 + regnames = [] regnums = [] tags = ['feature'] for event, element in events: @@ -67,6 +69,7 @@ def writeliteral(indent, bytes): if 'regnum' in element.attrib: regnum = int(element.attrib['regnum']) + regnames.append(element.attrib['name']) regnums.append(regnum) regnum += 1 @@ -85,6 +88,15 @@ def writeliteral(indent, bytes): writeliteral(8, bytes(os.path.basename(input), 'utf-8')) sys.stdout.write(',\n') writeliteral(8, read) - sys.stdout.write(f',\n {num_regs},\n }},\n') + sys.stdout.write(',\n') + writeliteral(8, bytes(feature_name, 'utf-8')) + sys.stdout.write(',\n (const char * const []) {\n') + + for index, regname in enumerate(regnames): + sys.stdout.write(f' [{regnums[index] - base_reg}] =\n') + writeliteral(16, bytes(regname, 'utf-8')) + sys.stdout.write(',\n') + + sys.stdout.write(f' }},\n {num_regs},\n }},\n') sys.stdout.write(' { NULL }\n};\n')