From patchwork Mon Feb 26 16:56:31 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: 775880 Delivered-To: patch@linaro.org Received: by 2002:a5d:6103:0:b0:33d:da16:65b6 with SMTP id v3csp431647wrt; Mon, 26 Feb 2024 09:00:04 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVQ6qLq7f/HEEJ/UIQ6wtU22knrLRWS6hJqHn9GMrdW3q2PN5Ky2wABd5wiQXa2EWNdm5/FzrxZ+BuCsZozoMpp X-Google-Smtp-Source: AGHT+IGCYJV+JFS7nHwZrJmxbUjiq0pGHbvWI+5/4Rsx4MMHThX4arT2CNnSAoOC+UM+f9CRRZAO X-Received: by 2002:a05:620a:1a07:b0:787:b5e6:ff4f with SMTP id bk7-20020a05620a1a0700b00787b5e6ff4fmr13720641qkb.36.1708966803832; Mon, 26 Feb 2024 09:00:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708966803; cv=none; d=google.com; s=arc-20160816; b=BckNntY1O41HQr/ukKQmHq2zXCmZLUr7L+UtZOv5Wm4YMZ1uUMNnwOfhop+duj5M7/ +jiWhcsPscfcxc/Mih3UivqN+Gb+iKlRouZxdi2s9ZDle7PggUTd2+toTcbj9UgdW2ag dKvlB888fSv2hLulnBJHtDljzE5XBDA8fTqXFSyMBMBlVucKvN+3fINjjHfn1F/wsZby 9mtKccNGl02iJWEH8VqB8nu0eqKs5NMFI40LPhbQbBTdQQBZBZJ5q2qD4uGN0pe5hioI xA0uVs1UDf4WxQGbzpZKvoKGEoqtjijCxSBRQlOFNiHLyGTPXhKe0jOaIT/toUVnADiV 1pnw== 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=BKaOfkzsaddgrw5PBxNyKChRzqPSwV94abl+cum6jxg=; fh=inHz/qE9VTgeXyA0ge5D6fVYa/Mfhts5ntNvtYndEVE=; b=Q+7lwAGKDMER/MaXZhF9Zr9esHdazR9Akzsioy3Mq8SarbvrtrK3QFufFhUTZ8dFXG P+AjrF0HA6hfaaWVkOwb3NWu2XJsy7NZ8shxIwU9UhAvhg9JheZCamWD5w8OUl8/Fvr3 dQHik9tUSikVFtAPGcILdBS2kNzX2fvY/K3o0reFKiPPRXGvqsYFqNDT6jA0xrMpz9gX SkaQvPi+rOyhtMJqwH0CphQvSY0HZ0SamepGuOwTvf7SqLsycXasp/UEUpqPaWpzQSA3 atL6jhCWCmPo2e/KhZ/AKobIEuMZFtLKcIivuXSsn8tyZ8rhXegrCKKCiAbj98/SbzqT XSPA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Gr9cVLgi; 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 e26-20020a05620a209a00b007878610c400si5353142qka.248.2024.02.26.09.00.03 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Mon, 26 Feb 2024 09:00:03 -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=Gr9cVLgi; 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 1reeIJ-00063D-Fc; Mon, 26 Feb 2024 11:57:35 -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 1reeI3-0005id-Gu for qemu-devel@nongnu.org; Mon, 26 Feb 2024 11:57:24 -0500 Received: from mail-lj1-x231.google.com ([2a00:1450:4864:20::231]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1reeHk-0007fa-Tb for qemu-devel@nongnu.org; Mon, 26 Feb 2024 11:57:16 -0500 Received: by mail-lj1-x231.google.com with SMTP id 38308e7fff4ca-2d21a68dd3bso44619211fa.1 for ; Mon, 26 Feb 2024 08:57:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1708966619; x=1709571419; 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=BKaOfkzsaddgrw5PBxNyKChRzqPSwV94abl+cum6jxg=; b=Gr9cVLgic98mQpHUMmfLL3VZM73jZkGfZi+wYQc3L9YizX40hMtuZfP8GLR5LXQDhO mzqoSR1OHAKMmGMq85HFxHEydmrOnPxMitVSBpzCjsmjrNp0NJzFjzxyluI616zJ+pjm mBe2pzZ+viynFtheV15C9CXeq7f3c2ldV+nopiDilCPCN6OI3D/0LJwaa+ybDwECtx1q PSkYBh7au2xZZdpARhuRYJ9a8Bekt9Jjzu9/uI7oXXyBs1hXJnRyTJn6rBFGHAjyDXNE LyDJTBIN7PEjFwolbeoIGAsAOheP6ih11YQOHT6jhG2qppyx18Z/Om81bG3RaNS4edAR akcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708966619; x=1709571419; 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=BKaOfkzsaddgrw5PBxNyKChRzqPSwV94abl+cum6jxg=; b=QwQK53O8UHyMNqXr4Sc6Twp0XMc015HnlX/sug9Jkplkk8idseaLIICzVG/KpXwqeO ndFom7SR25JjcIAA0uTcUKXo1IbDBPls94scforxtrTGWoA2ToK2VagD7VRpkywhnLY1 NRXnxyE7wko0X/kF6j1cX9mGd0KHDIzUTEgY6mG6RYrgh/zcAxrAoY25uuNB6a7ZS/zW h6ePBRQVhIMX0ELIActI0xiBPrwRjRtDikMgXaTkNONXiBfJwX4RnKaEQxsQRaD3aRbA L5sHPxZXbfq0S1GJ2LlIVy+B068O+Iw9oKZLIc1bHF/rb8B/ncTKh8GP8sG82GlalVbH Piww== X-Gm-Message-State: AOJu0YwTi5y26Kb4zP0Ma58WANn63bezxef11G17hzp6hYvW1m50LaSd cfu0/fTEOXHj/aby4igm0W5ImkIXJWihaIGDfpVEkF+NtBJKzIypvfFWgPY82iE= X-Received: by 2002:a2e:9b17:0:b0:2d2:68d2:2e14 with SMTP id u23-20020a2e9b17000000b002d268d22e14mr4771443lji.53.1708966618744; Mon, 26 Feb 2024 08:56:58 -0800 (PST) Received: from draig.lan ([85.9.250.243]) by smtp.gmail.com with ESMTPSA id p10-20020a05600c1d8a00b00412aa4a1a20sm14252wms.29.2024.02.26.08.56.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Feb 2024 08:56:55 -0800 (PST) Received: from draig.lan (localhost [IPv6:::1]) by draig.lan (Postfix) with ESMTP id 02A8C5F920; Mon, 26 Feb 2024 16:56:48 +0000 (GMT) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Liu Zhiwei , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , =?utf-8?q?Alex_Benn=C3=A9e?= , qemu-riscv@nongnu.org, Michael Rolnik , Song Gao , Alexandre Iooss , Marcel Apfelbaum , David Hildenbrand , Pierrick Bouvier , John Snow , Eduardo Habkost , Mahmoud Mandour , qemu-arm@nongnu.org, =?utf-8?q?Phi?= =?utf-8?q?lippe_Mathieu-Daud=C3=A9?= , Paolo Bonzini , Cleber Rosa , qemu-ppc@nongnu.org, Richard Henderson , qemu-s390x@nongnu.org, Daniel Henrique Barboza , Thomas Huth , Yoshinori Sato , Yanan Wang , Brian Cain , Ilya Leoshkevich , Weiwei Li , "Edgar E. Iglesias" , Bin Meng , Laurent Vivier , Palmer Dabbelt , Daniel Henrique Barboza , Alistair Francis , Akihiko Odaki Subject: [PATCH v3 12/27] gdbstub: Add members to identify registers to GDBFeature Date: Mon, 26 Feb 2024 16:56:31 +0000 Message-Id: <20240226165646.425600-13-alex.bennee@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240226165646.425600-1-alex.bennee@linaro.org> References: <20240226165646.425600-1-alex.bennee@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::231; envelope-from=alex.bennee@linaro.org; helo=mail-lj1-x231.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=ham 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 f766ee277a0..a55b5e6581a 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 546e8692d17..be7a02cd903 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')