From patchwork Fri Feb 16 16:30:13 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: 773348 Delivered-To: patch@linaro.org Received: by 2002:a5d:4943:0:b0:33b:4db1:f5b3 with SMTP id r3csp25234wrs; Fri, 16 Feb 2024 08:32:34 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCUJuWvrOPHqEmvDlta9htOEHGmWeCur9jNWk6gVK5h5DHqpvMAL8LJj98MRUGULnUEcrzWWUr3xH1quFQFz2GEA X-Google-Smtp-Source: AGHT+IHclXlDGW5zSzFgR6C8hO/1gZ3x20zvc4UIedPMgDsC40ktOVp0p0gUAfD6ASkRLvZ+O98w X-Received: by 2002:ad4:5c41:0:b0:68c:bf47:a7d1 with SMTP id a1-20020ad45c41000000b0068cbf47a7d1mr8198788qva.17.1708101154699; Fri, 16 Feb 2024 08:32:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708101154; cv=none; d=google.com; s=arc-20160816; b=a6oz41zYjz2tAzY737dBLFKvApnx7Q197QMM7Ip9hwghu7zN4D21k+gO0NVrUZTDVf lxufhlwceYapsXYtoJaUWCZS4u+zws1QecpiFWQ2gVByDw/xU80oYDKjWXjifRdowY3c n7pKuQxK4Ut1+hV3+b3TAHTYu6iQwF73HqgBq8f+eDSZYsHuxw5Sk5Mr6foz/VTrzgQN TRpy0jqfSEF+7NIpnq+Vl+wXYTNjAQ1XyRvYh/daM6mLi4TOf6azFPQZ9s3etXFDYYwY 5GI6DDcMm0ErruBd9ZJRlj0RHAH/0092fwbGKetZ0+PN3p6ULG6Xjqbtb2i+C5BLcMyM AQYg== 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=edBBzxC9D4aeJQkoOTUe3r9rrX1lOuBdxVr2qjfDcVQ=; b=AxKBGIUcTpa2XtKIx+m6/CVbDw/qAg7JpsZuPd4ypg4gUdAp74WC+M4ftfOpWsiNFo xRPvJZlBSHH0na2uORmcY57kjkEOk/hoTnWCEUe3c8+TKtzokRBcAWiw8lsBTsh6vGyw Sja2bAnq7DxbiuE2W++5ySKLFtKbZplIjGkLPSG3Ju/bwRqIl3e1NRhwyGoZ+IFtvE7A dJ/agm9ttElGR6hn+zLIv5SiLJ0FOZVYyaTi1JB+j9J2v8jWh9jbWjJlr8dCtF3xykgI ogyOCOGtTxwgis6kwVrYwwH+kkrw/q0J8eDah7tem2pcnSODPztcBtjj+zPmLDfWjeq8 iHEA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=BeitgTnO; 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 pn3-20020a056214130300b0068eec91119asi103747qvb.390.2024.02.16.08.32.34 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 16 Feb 2024 08:32:34 -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=BeitgTnO; 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 1rb171-0004kt-08; Fri, 16 Feb 2024 11:30:56 -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 1rb16v-0004gf-F9 for qemu-devel@nongnu.org; Fri, 16 Feb 2024 11:30:49 -0500 Received: from mail-wr1-x435.google.com ([2a00:1450:4864:20::435]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rb16i-0002DK-09 for qemu-devel@nongnu.org; Fri, 16 Feb 2024 11:30:49 -0500 Received: by mail-wr1-x435.google.com with SMTP id ffacd0b85a97d-33cddf4b4b5so1662953f8f.0 for ; Fri, 16 Feb 2024 08:30:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1708101034; x=1708705834; 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=BeitgTnOh6e/ytPs1T2q/0WhPrZvp5f9YER3NlBaiwettLIk5rmYuUdX4z/86p1O25 b0pioA8D/FozBmi3GSqxG8mQqNK09ugqIFkzsUG2LXGHnhUz3wA5dhavyBV7g/LXI5t2 YihWc9nOXVglg8V2623rRhPTH9U4CZtWpWw6OwlC1qJzASejYVtHFuAURpQtK5mtWlxD ay1ZCLj9RGDb1o27dCTtNSesIZ0fNkWFXNmWmgxVDhDoOvwJLhUoUoh9BjqnVVgfhlVb 11nkdBZFlu2RMRNkxG5h20tPjbAslii2m4ooPsJXiqENw+PrjouQnE0lrhVZtaEXrVFS 65Dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708101034; x=1708705834; 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=Hv1owHvVzWftz0IePzlSTGmgM6Ryjh0QEpaoXFgJBoD3VavQWHUAe1iI2XKZxlUlGF slzw1nSIDfRoRicYx22OQ9yo3CUpjvzFRPcLNSLC1RD4tuZ8glsi2BcJP/JOnkMLDXvo dP14Z/q1jRa6llqhs/ySZpvrxTmPFu8kr6M7yHs3il9Etj85Nuhqb2WQLFu1T3nlSMIh 5q5zxlSJoU9EdTAgZhN+SS2VpJKUhg3jCCGgEyd9KXZoNCEhlcjegeB6M4+f9GATV+Fz 7q7o6qGbgTEOx0ABWid/+VCklR9FaxvIwu0ZrYPN/V4XJ5Fv4iMCyMVhrEnDMFt+bBfV vhNA== X-Gm-Message-State: AOJu0YwIcgydZ5qa37xOeZPKWAjbFySw4IIVDbE6XKMNyncTZgdBYRXW s5yB3HL6C6AV28F9FWq/S5B17e79hApzeE5rmNpEdexGjqV77mz+8jBURh3vdqs= X-Received: by 2002:adf:fa8f:0:b0:33d:19f9:996e with SMTP id h15-20020adffa8f000000b0033d19f9996emr1940684wrr.16.1708101034336; Fri, 16 Feb 2024 08:30:34 -0800 (PST) Received: from draig.lan ([85.9.250.243]) by smtp.gmail.com with ESMTPSA id ay5-20020a5d6f05000000b0033d1ef15821sm2073483wrb.25.2024.02.16.08.30.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Feb 2024 08:30:32 -0800 (PST) Received: from draig.lan (localhost [IPv6:::1]) by draig.lan (Postfix) with ESMTP id 63ED45F91D; Fri, 16 Feb 2024 16:30:27 +0000 (GMT) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: qemu-devel@nongnu.org Cc: Yoshinori Sato , David Hildenbrand , Weiwei Li , Richard Henderson , Michael Rolnik , Ilya Leoshkevich , Peter Maydell , qemu-ppc@nongnu.org, Paolo Bonzini , qemu-riscv@nongnu.org, Cleber Rosa , Thomas Huth , Song Gao , qemu-arm@nongnu.org, Pierrick Bouvier , John Snow , =?utf-8?q?Alex_Benn=C3=A9e?= , =?utf-8?q?C=C3=A9dri?= =?utf-8?q?c_Le_Goater?= , Nicholas Piggin , qemu-s390x@nongnu.org, Laurent Vivier , "Edgar E. Iglesias" , Daniel Henrique Barboza , Yanan Wang , Palmer Dabbelt , Marcel Apfelbaum , Brian Cain , Mahmoud Mandour , Alexandre Iooss , Bin Meng , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Daniel Henrique Barboza , Eduardo Habkost , Alistair Francis , Liu Zhiwei , Akihiko Odaki Subject: [PATCH 11/23] gdbstub: Add members to identify registers to GDBFeature Date: Fri, 16 Feb 2024 16:30:13 +0000 Message-Id: <20240216163025.424857-12-alex.bennee@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240216163025.424857-1-alex.bennee@linaro.org> References: <20240216163025.424857-1-alex.bennee@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::435; envelope-from=alex.bennee@linaro.org; helo=mail-wr1-x435.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')