From nobody Fri May 10 19:36:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1694502929; cv=none; d=zohomail.com; s=zohoarc; b=DQnIpGk0tAkRsSPyyQx19S014Iz50JFFfXIhOSuQ8L4q1hNNefuXw0XBzPZ46hm3pbq5JlUyWsCwrFrat00ts5sWIEN4i4DEllT190ashrpVAK6k4koPznNssHigu1WrTHcb40oYYClAdBl9c3UJ607G7JBcxG0CvY3q71tgRYk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1694502929; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject; bh=21Z173hVFszR8s4nfjM3OYWaOyCmfZYL9fagBQvy26Q=; b=IkxBRs8hC5ek4NKG9tKE3SNIsVgxhHR8dTPWm4cpR7rfieo80/n06jrsa4vETyNM9VNDAsy1QVG7fp0PhYYuXeNhtXmNkue87xTmPB3ngjHxre7EEpXtE3AM1jdtkghzJcHUkGhNQRbT0xECWbwEQdCCLXdL6j46zzhqw4dMk8M= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1694502929642457.98450990540823; Tue, 12 Sep 2023 00:15:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qfxZe-0002QG-Ag; Tue, 12 Sep 2023 03:12:38 -0400 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 1qfxZS-0002P5-Rw for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:12:28 -0400 Received: from mail-oo1-xc29.google.com ([2607:f8b0:4864:20::c29]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qfxZP-0006Sv-2i for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:12:25 -0400 Received: by mail-oo1-xc29.google.com with SMTP id 006d021491bc7-576918d0a42so1454155eaf.3 for ; Tue, 12 Sep 2023 00:12:22 -0700 (PDT) Received: from alarm.flets-east.jp ([2400:4050:a840:1e00:78d2:b862:10a7:d486]) by smtp.gmail.com with ESMTPSA id f13-20020aa78b0d000000b0068be348e35fsm6647495pfd.166.2023.09.12.00.12.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Sep 2023 00:12:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1694502741; x=1695107541; 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=21Z173hVFszR8s4nfjM3OYWaOyCmfZYL9fagBQvy26Q=; b=Nq0U/EQKeYBY6pjLAEIvb4vfwcddn65k8lLhj1gJfstSTLKyPNmyMa+A6gmZC7G1LG JiIC0J2YzzR9CdjnjkMvUnOnpeadVc4x9FhOpsu2N3uBDJmp0yWsj9JRb+J585UyMqKM BsT6o/z776QEqMeMjW3qImnEwyY4DxXdOCiQBOp/eqcfG+GWqRWwzEbPzjBgvTCmNhpt 55ZsUK6/E1HYLDWJXl0tNqHndODC7w2aLxtrCD8pcALENbyjp37WdeLwqs3h4GA2dvCw i1n3//4OZbFJOjB+hbkcvOLd1mv5deKC3KhMy2qo/KspGj5covD9ZBg37jQIPA2SYQY6 /rMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694502741; x=1695107541; 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=21Z173hVFszR8s4nfjM3OYWaOyCmfZYL9fagBQvy26Q=; b=QanHD+1XhkVu9u30M2b2NeL/LWy26eVPtaPH0Z5Vo1mE+J+8j8wH6OsSeCaRByOrjb 6P0pinQIqvC1KRkyDKQdThP97lpf2lim6F/UHQ2uqoT2hnuBKpCXvHP/2yPUJwPl8N23 e0TsFoB6V63br5TiZF3CG79dLpe2rJZebhME1rmj1+DvUD2T3hin668sHIq1ApvHGdyM XI3XQ9PyyhboMbEZIXkKDvqHF8GXBpMpoYc0SZWO/IafnOL7mlYpsff0+UtRB672nljo l4WtQ7KWG5aCUVBHt82UK4sQnUbSL0Dv6pA6I0qhSs+Z9+RRapqIbuIccqWso1in/mul eZxA== X-Gm-Message-State: AOJu0Yw0dKH+bhgSGsHI0L9mJ11PDxsF/CE3X9f7j2JsowYtD7HqSFop u2dYo7Z6MAgjLATmeZAlpHdVvQ== X-Google-Smtp-Source: AGHT+IF+Z6MrzkjHMV7hWM3dEfALP6AiNsqPd8QCVzL/9PvDKQ+H0/6Nx3+eZSibviIyp6W90kCW6w== X-Received: by 2002:a05:6358:262a:b0:129:c9c0:ca64 with SMTP id l42-20020a056358262a00b00129c9c0ca64mr15304511rwc.15.1694502741689; Tue, 12 Sep 2023 00:12:21 -0700 (PDT) From: Akihiko Odaki To: Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Mikhail Tyutin , Aleksandr Anenkov , qemu-devel@nongnu.org, Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , John Snow , Cleber Rosa Subject: [PATCH v7 01/18] gdbstub: Add num_regs member to GDBFeature Date: Tue, 12 Sep 2023 16:11:47 +0900 Message-ID: <20230912071206.30751-2-akihiko.odaki@daynix.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230912071206.30751-1-akihiko.odaki@daynix.com> References: <20230912071206.30751-1-akihiko.odaki@daynix.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=2607:f8b0:4864:20::c29; envelope-from=akihiko.odaki@daynix.com; helo=mail-oo1-xc29.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @daynix-com.20230601.gappssmtp.com) X-ZM-MESSAGEID: 1694502930957100002 Currently the number of registers exposed to GDB is written as magic numbers in code. Derive the number of registers GDB actually see from XML files to replace the magic numbers in code later. Signed-off-by: Akihiko Odaki Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Alex Benn=C3=A9e --- include/exec/gdbstub.h | 1 + scripts/feature_to_c.py | 46 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index 1a01c35f8e..a43aa34dad 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -13,6 +13,7 @@ typedef struct GDBFeature { const char *xmlname; const char *xml; + int num_regs; } GDBFeature; =20 =20 diff --git a/scripts/feature_to_c.py b/scripts/feature_to_c.py index bcbcb83beb..e04d6b2df7 100755 --- a/scripts/feature_to_c.py +++ b/scripts/feature_to_c.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # SPDX-License-Identifier: GPL-2.0-or-later =20 -import os, sys +import os, sys, xml.etree.ElementTree =20 def writeliteral(indent, bytes): sys.stdout.write(' ' * indent) @@ -39,10 +39,52 @@ def writeliteral(indent, bytes): with open(input, 'rb') as file: read =3D file.read() =20 + parser =3D xml.etree.ElementTree.XMLPullParser(['start', 'end']) + parser.feed(read) + events =3D parser.read_events() + event, element =3D next(events) + if event !=3D 'start': + sys.stderr.write(f'unexpected event: {event}\n') + exit(1) + if element.tag !=3D 'feature': + sys.stderr.write(f'unexpected start tag: {element.tag}\n') + exit(1) + + regnum =3D 0 + regnums =3D [] + tags =3D ['feature'] + for event, element in events: + if event =3D=3D 'end': + if element.tag !=3D tags[len(tags) - 1]: + sys.stderr.write(f'unexpected end tag: {element.tag}\n') + exit(1) + + tags.pop() + if element.tag =3D=3D 'feature': + break + elif event =3D=3D 'start': + if len(tags) < 2 and element.tag =3D=3D 'reg': + if 'regnum' in element.attrib: + regnum =3D int(element.attrib['regnum']) + + regnums.append(regnum) + regnum +=3D 1 + + tags.append(element.tag) + else: + raise Exception(f'unexpected event: {event}\n') + + if len(tags): + sys.stderr.write('unterminated feature tag\n') + exit(1) + + base_reg =3D min(regnums) + num_regs =3D max(regnums) - base_reg + 1 if len(regnums) else 0 + sys.stdout.write(' {\n') writeliteral(8, bytes(os.path.basename(input), 'utf-8')) sys.stdout.write(',\n') writeliteral(8, read) - sys.stdout.write('\n },\n') + sys.stdout.write(f',\n {num_regs},\n }},\n') =20 sys.stdout.write(' { NULL }\n};\n') --=20 2.42.0 From nobody Fri May 10 19:36:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1694502800; cv=none; d=zohomail.com; s=zohoarc; b=bAURveh8QlAvKtmfO4RpYFeg1B2wrt+aP/4m96YEEpwveRNPGT+hm1QsyInSBL1Ir12BZuci1J6Zx2wctog/5i3aaCSIz4VqT1uz7B7rd612AqScMdD6uNi8tidOTNvtRVQL7Rlm4Leyyh9Pa45Gl5dYK5mhlyyETEEOLj/C2Lk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1694502800; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject; bh=Tnf03Q7+288TJsyd7lSqF33vPvOy+ywzsBcRMgBbA/w=; b=QUJrUdlYu5WIb/zFZWm/cLgRehKPZuxJQ+X/Kc8pUOwxliS5N3WAxB4bir/aFwyy1RWYnNJJZqqdzqfGdLVDc5DIW5vAJ68cjfKtNQz/a9TL4C6iGbZALzwf2GJ85JB39lYMdzGLdhkZ9fsNSSfmpoc/IINcIf5PJw4LwJAvWDc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1694502800682445.74946017624313; Tue, 12 Sep 2023 00:13:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qfxZW-0002Pd-LI; Tue, 12 Sep 2023 03:12:30 -0400 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 1qfxZU-0002PC-Rw for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:12:28 -0400 Received: from mail-pf1-x42b.google.com ([2607:f8b0:4864:20::42b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qfxZS-0006Um-LC for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:12:28 -0400 Received: by mail-pf1-x42b.google.com with SMTP id d2e1a72fcca58-68fbd31d9ddso1464415b3a.0 for ; Tue, 12 Sep 2023 00:12:25 -0700 (PDT) Received: from alarm.flets-east.jp ([2400:4050:a840:1e00:78d2:b862:10a7:d486]) by smtp.gmail.com with ESMTPSA id f13-20020aa78b0d000000b0068be348e35fsm6647495pfd.166.2023.09.12.00.12.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Sep 2023 00:12:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1694502744; x=1695107544; 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=Tnf03Q7+288TJsyd7lSqF33vPvOy+ywzsBcRMgBbA/w=; b=iEZRNk79mGZEKnoa8w5PpkyL+PWj/7R2qEyLoB6fHBcJ1o+t+iQ0r38r7P8ZMHKzc3 N3MTIxiqM9wpuQrVxVrZ57bB0eNlqHQwLuazqEP842DPWnJjJ5bxuKaF51nreyLEsU3o 8y6YjIXlbYCIyLO1FnchlZTVoXT09Jzkh2eY7JpeqrzHGTx2dp6fTq1+hkHzuNI25clr OI80JZIWjh67NXB6+rfTwtzEoiHUEVkvqXYHR8ZJHLEZdUQDGA5mYGe25rHsf3R4O+Zj 1NLVa4R41Sym4iWWx0YIvApJcLPyZoz9ZlzADZMq/0Vlom4WOqsNFtL1Jv91g5G8WHk/ jrOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694502744; x=1695107544; 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=Tnf03Q7+288TJsyd7lSqF33vPvOy+ywzsBcRMgBbA/w=; b=KK+p8fueoxwuTt4RuJ1MpH2VL+K2bZmZ1T8yG5SEgUsQgpocZPlxoB3G+VPrmPVv48 LU4jlZOwiHhSEXgAyefsekmrFmLhBG87UVG2tfUE5d+TCVKdqpTXDpmGdHBVW5xmj3Lg baCqSpvXZrWgWLbCAqtdiSYx2X14WMYzcUXcfQV1swFvqLRnb+9hW/9C3LxNFGr6tHo3 BAZEhtFzuA22sRH7eNPZd0rSFMSX0igaNovJIjDf4DOZTuoOiTHN6Y5Csr9A6x7P6ssz Skuabyl5QX5KMUJths48ve+2k1u/0kHX1niw5wwW5JgDTVqkfOL7yAhMI7+tKGLFTtsY sURg== X-Gm-Message-State: AOJu0YwBcj1oxEAGY23Hg1oHeHRTujUFsaXPifLkme8h1onfoTT+zWXs HGwAQmUeNgGMyrbbtlm08FwFag== X-Google-Smtp-Source: AGHT+IEHi234+aQcRcLvmbz/ta68+HfFYA9UPAxxLgpBmTGyi8z6m0NeFBepHuFWzWcHi7E5+JZqPw== X-Received: by 2002:a05:6a00:b44:b0:68a:586a:f62 with SMTP id p4-20020a056a000b4400b0068a586a0f62mr11237424pfo.4.1694502743803; Tue, 12 Sep 2023 00:12:23 -0700 (PDT) From: Akihiko Odaki To: Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Mikhail Tyutin , Aleksandr Anenkov , qemu-devel@nongnu.org, Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Richard Henderson Subject: [PATCH v7 02/18] gdbstub: Introduce gdb_find_static_feature() Date: Tue, 12 Sep 2023 16:11:48 +0900 Message-ID: <20230912071206.30751-3-akihiko.odaki@daynix.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230912071206.30751-1-akihiko.odaki@daynix.com> References: <20230912071206.30751-1-akihiko.odaki@daynix.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=2607:f8b0:4864:20::42b; envelope-from=akihiko.odaki@daynix.com; helo=mail-pf1-x42b.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @daynix-com.20230601.gappssmtp.com) X-ZM-MESSAGEID: 1694502802659100003 This function is useful to determine the number of registers exposed to GDB from the XML name. Signed-off-by: Akihiko Odaki Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Richard Henderson --- include/exec/gdbstub.h | 2 ++ gdbstub/gdbstub.c | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index a43aa34dad..071021415a 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -44,6 +44,8 @@ void gdb_register_coprocessor(CPUState *cpu, */ int gdbserver_start(const char *port_or_device); =20 +const GDBFeature *gdb_find_static_feature(const char *xmlname); + void gdb_set_stop_cpu(CPUState *cpu); =20 /* in gdbstub-xml.c, generated by scripts/feature_to_c.py */ diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c index 9810d15278..fd73d6d257 100644 --- a/gdbstub/gdbstub.c +++ b/gdbstub/gdbstub.c @@ -420,6 +420,19 @@ static const char *get_feature_xml(const char *p, cons= t char **newp, return NULL; } =20 +const GDBFeature *gdb_find_static_feature(const char *xmlname) +{ + const GDBFeature *feature; + + for (feature =3D gdb_static_features; feature->xmlname; feature++) { + if (!strcmp(feature->xmlname, xmlname)) { + return feature; + } + } + + g_assert_not_reached(); +} + static int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg) { CPUClass *cc =3D CPU_GET_CLASS(cpu); --=20 2.42.0 From nobody Fri May 10 19:36:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1694502787; cv=none; d=zohomail.com; s=zohoarc; b=A30+RTd5DJoulSKyQUMKJWRQSBvbsCd0lBI0ViuhbRX4ro+mu9dJTSsNorV9qpAVxj21hBi8HvkVkN3GXt9NmEZpEFsNyqys1eQE2JBCrf6+to63HLipQt1bk+b6HcNkqXACZ08cBOJOPOqCN7FNnmbfBArMaJohwikR4w69ckE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1694502787; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject; bh=aJrjmSx72mjt81zJ+nGHKdsU4ZqctUvLQl3Z6ws8Ecg=; b=Zvok8iil8sCAaE80R1PhYb9rwQ5aMkNMuBLo63f+GA1q8pTuRHw2FcOfSgbSh/UDoLGlQRBdg7PUnAFEoL+leZ5wFUDFn9mJJ1ac11L2hXpLVMhNBiV4yKpT0YuL5fxAz4qKgPDVt3M6W67Be6gS5PX38dNKq3u9oY1XJygTp2U= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1694502787365742.4439862149875; Tue, 12 Sep 2023 00:13:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qfxZg-0002TV-IS; Tue, 12 Sep 2023 03:12:40 -0400 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 1qfxZe-0002S5-ES for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:12:38 -0400 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qfxZY-0006Vn-3w for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:12:36 -0400 Received: by mail-pf1-x433.google.com with SMTP id d2e1a72fcca58-68fc292de9dso1371506b3a.0 for ; Tue, 12 Sep 2023 00:12:31 -0700 (PDT) Received: from alarm.flets-east.jp ([2400:4050:a840:1e00:78d2:b862:10a7:d486]) by smtp.gmail.com with ESMTPSA id f13-20020aa78b0d000000b0068be348e35fsm6647495pfd.166.2023.09.12.00.12.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Sep 2023 00:12:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1694502750; x=1695107550; 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=aJrjmSx72mjt81zJ+nGHKdsU4ZqctUvLQl3Z6ws8Ecg=; b=aSjzecbnZAL8EB5JkYs+3z2VDa8UBosrlXWbbU5D+iEc2VGzBB66u/rnkOSJoMWB/r gRF7EotuDMmkUX4icFjJY8RHKfL+yzZOvGrIebG1AcilKdOHVgxzDItMpjCppE2kIwSw bEeDIkD7C4VupcVX8YBEQ4JbkHorCmDlWnaUTAY+VIlaXQMBP9mpiZHPlm4uB5KwqIyl P0LX/hdhUln8pcSEPH+hntaK8+dcMDsc7MBuJIRI3AL1vbX2GW2dqSup74eXJJa1Di8s 6O6ppzcSqv3RrfQ8VDJ4Jq/wda6WMQA5vLV1PS+CSpFA7jadjWvYSvJMl57Y9PaOSVhY R6rw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694502750; x=1695107550; 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=aJrjmSx72mjt81zJ+nGHKdsU4ZqctUvLQl3Z6ws8Ecg=; b=kowEhlUOBntYH7SZ+3dxplS49BOqpa+V3FHOlMCVcM6lfvlGhml7iLPznbHPeTCr33 CjLigAUdBOOH1qtlqw6NrTO9VNv8RX84Fcftpd0aTAEANAyOC6CshwRjLDZ0fGaxGEFM ax5g+5sNa1hpoitfgU/XuSM2YQdMH4TpyuofHUXQiu3FyfP/jmW9qlJVH4QZ5LEPmvx9 uRw67IOO1Geqx0Y5jatXVtfVa9cQqJ7Znl9cMiAo0ZhvqZe2Z8czt9lCQM8F41t/JTRw 2WwQktfHBiArsRYCh1kGHc4mkCz7KKXBDoGdz9sZeymb8LIbIiUgRNXxsLeUrU/1VNWC xA5w== X-Gm-Message-State: AOJu0YwnkiRqHdDUZXKmLZ8s9kci6eGvsVkVrFtsuj82ulzxBybNbx98 IOnE8fjaZivuTLjWJyPk2a16rQ== X-Google-Smtp-Source: AGHT+IE+k0BUBvL9icqHM50ab4kRnGhzSgxlt5rcoo7PP9UM9UNmAuaRWvScbioR7kSodlokzkfG9A== X-Received: by 2002:a05:6a20:a103:b0:134:73f6:5832 with SMTP id q3-20020a056a20a10300b0013473f65832mr2649400pzk.16.1694502750559; Tue, 12 Sep 2023 00:12:30 -0700 (PDT) From: Akihiko Odaki To: Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Mikhail Tyutin , Aleksandr Anenkov , qemu-devel@nongnu.org, Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Peter Maydell , Michael Rolnik , Brian Cain , Song Gao , Xiaojuan Yang , Laurent Vivier , "Edgar E. Iglesias" , Daniel Henrique Barboza , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , David Gibson , Greg Kurz , Nicholas Piggin , Palmer Dabbelt , Alistair Francis , Bin Meng , Weiwei Li , Liu Zhiwei , Yoshinori Sato , Thomas Huth , Richard Henderson , David Hildenbrand , Ilya Leoshkevich , qemu-arm@nongnu.org (open list:ARM TCG CPUs), qemu-ppc@nongnu.org (open list:PowerPC TCG CPUs), qemu-riscv@nongnu.org (open list:RISC-V TCG CPUs), qemu-s390x@nongnu.org (open list:S390 general arch...) Subject: [PATCH v7 03/18] hw/core/cpu: Replace gdb_core_xml_file with gdb_core_feature Date: Tue, 12 Sep 2023 16:11:49 +0900 Message-ID: <20230912071206.30751-4-akihiko.odaki@daynix.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230912071206.30751-1-akihiko.odaki@daynix.com> References: <20230912071206.30751-1-akihiko.odaki@daynix.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=2607:f8b0:4864:20::433; envelope-from=akihiko.odaki@daynix.com; helo=mail-pf1-x433.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @daynix-com.20230601.gappssmtp.com) X-ZM-MESSAGEID: 1694502788074100003 Content-Type: text/plain; charset="utf-8" This is a tree-wide change to replace gdb_core_xml_file, the path to GDB XML file with gdb_core_feature, the pointer to GDBFeature. This also replaces the values assigned to gdb_num_core_regs with the num_regs member of GDBFeature where applicable to remove magic numbers. A following change will utilize additional information provided by GDBFeature to simplify XML file lookup. Signed-off-by: Akihiko Odaki --- include/hw/core/cpu.h | 5 +++-- target/s390x/cpu.h | 2 -- gdbstub/gdbstub.c | 6 +++--- target/arm/cpu.c | 4 ++-- target/arm/cpu64.c | 4 ++-- target/arm/tcg/cpu32.c | 3 ++- target/avr/cpu.c | 4 ++-- target/hexagon/cpu.c | 2 +- target/i386/cpu.c | 7 +++---- target/loongarch/cpu.c | 8 ++++---- target/m68k/cpu.c | 7 ++++--- target/microblaze/cpu.c | 4 ++-- target/ppc/cpu_init.c | 4 ++-- target/riscv/cpu.c | 7 ++++--- target/rx/cpu.c | 4 ++-- target/s390x/cpu.c | 4 ++-- 16 files changed, 38 insertions(+), 37 deletions(-) diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h index c84c631242..6feb9bf22e 100644 --- a/include/hw/core/cpu.h +++ b/include/hw/core/cpu.h @@ -23,6 +23,7 @@ #include "hw/qdev-core.h" #include "disas/dis-asm.h" #include "exec/cpu-common.h" +#include "exec/gdbstub.h" #include "exec/hwaddr.h" #include "exec/memattrs.h" #include "qapi/qapi-types-run-state.h" @@ -127,7 +128,7 @@ struct SysemuCPUOps; * breakpoint. Used by AVR to handle a gdb mis-feature with * its Harvard architecture split code and data. * @gdb_num_core_regs: Number of core registers accessible to GDB. - * @gdb_core_xml_file: File name for core registers GDB XML description. + * @gdb_core_feature: GDB core feature description. * @gdb_stop_before_watchpoint: Indicates whether GDB expects the CPU to s= top * before the insn which triggers a watchpoint rather than after= it. * @gdb_arch_name: Optional callback that returns the architecture name kn= own @@ -163,7 +164,7 @@ struct CPUClass { int (*gdb_write_register)(CPUState *cpu, uint8_t *buf, int reg); vaddr (*gdb_adjust_breakpoint)(CPUState *cpu, vaddr addr); =20 - const char *gdb_core_xml_file; + const GDBFeature *gdb_core_feature; const gchar * (*gdb_arch_name)(CPUState *cpu); const char * (*gdb_get_dynamic_xml)(CPUState *cpu, const char *xmlname= ); =20 diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h index eb5b65b7d3..c5bac3230c 100644 --- a/target/s390x/cpu.h +++ b/target/s390x/cpu.h @@ -451,8 +451,6 @@ static inline void cpu_get_tb_cpu_state(CPUS390XState *= env, vaddr *pc, #define S390_R13_REGNUM 15 #define S390_R14_REGNUM 16 #define S390_R15_REGNUM 17 -/* Total Core Registers. */ -#define S390_NUM_CORE_REGS 18 =20 static inline void setcc(S390CPU *cpu, uint64_t cc) { diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c index fd73d6d257..9044b44954 100644 --- a/gdbstub/gdbstub.c +++ b/gdbstub/gdbstub.c @@ -384,7 +384,7 @@ static const char *get_feature_xml(const char *p, const= char **newp, g_ptr_array_add( xml, g_markup_printf_escaped("", - cc->gdb_core_xml_file)); + cc->gdb_core_feature->xmlname)); for (guint i =3D 0; i < cpu->gdb_regs->len; i++) { r =3D &g_array_index(cpu->gdb_regs, GDBRegisterState, i); g_ptr_array_add( @@ -1531,7 +1531,7 @@ static void handle_query_supported(GArray *params, vo= id *user_ctx) =20 g_string_printf(gdbserver_state.str_buf, "PacketSize=3D%x", MAX_PACKET= _LENGTH); cc =3D CPU_GET_CLASS(first_cpu); - if (cc->gdb_core_xml_file) { + if (cc->gdb_core_feature) { g_string_append(gdbserver_state.str_buf, ";qXfer:features:read+"); } =20 @@ -1573,7 +1573,7 @@ static void handle_query_xfer_features(GArray *params= , void *user_ctx) =20 process =3D gdb_get_cpu_process(gdbserver_state.g_cpu); cc =3D CPU_GET_CLASS(gdbserver_state.g_cpu); - if (!cc->gdb_core_xml_file) { + if (!cc->gdb_core_feature) { gdb_put_packet(""); return; } diff --git a/target/arm/cpu.c b/target/arm/cpu.c index a13c609249..bee5dc22a5 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -2388,7 +2388,6 @@ static void arm_cpu_class_init(ObjectClass *oc, void = *data) #ifndef CONFIG_USER_ONLY cc->sysemu_ops =3D &arm_sysemu_ops; #endif - cc->gdb_num_core_regs =3D 26; cc->gdb_arch_name =3D arm_gdb_arch_name; cc->gdb_get_dynamic_xml =3D arm_gdb_get_dynamic_xml; cc->gdb_stop_before_watchpoint =3D true; @@ -2413,7 +2412,8 @@ static void cpu_register_class_init(ObjectClass *oc, = void *data) CPUClass *cc =3D CPU_CLASS(acc); =20 acc->info =3D data; - cc->gdb_core_xml_file =3D "arm-core.xml"; + cc->gdb_core_feature =3D gdb_find_static_feature("arm-core.xml"); + cc->gdb_num_core_regs =3D cc->gdb_core_feature->num_regs; } =20 void arm_cpu_register(const ARMCPUInfo *info) diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c index 6b91aab6b7..65f84bfb18 100644 --- a/target/arm/cpu64.c +++ b/target/arm/cpu64.c @@ -754,8 +754,8 @@ static void aarch64_cpu_class_init(ObjectClass *oc, voi= d *data) =20 cc->gdb_read_register =3D aarch64_cpu_gdb_read_register; cc->gdb_write_register =3D aarch64_cpu_gdb_write_register; - cc->gdb_num_core_regs =3D 34; - cc->gdb_core_xml_file =3D "aarch64-core.xml"; + cc->gdb_core_feature =3D gdb_find_static_feature("aarch64-core.xml"); + cc->gdb_num_core_regs =3D cc->gdb_core_feature->num_regs; cc->gdb_arch_name =3D aarch64_gdb_arch_name; =20 object_class_property_add_bool(oc, "aarch64", aarch64_cpu_get_aarch64, diff --git a/target/arm/tcg/cpu32.c b/target/arm/tcg/cpu32.c index 1f918ff537..bc42695af5 100644 --- a/target/arm/tcg/cpu32.c +++ b/target/arm/tcg/cpu32.c @@ -1040,7 +1040,8 @@ static void arm_v7m_class_init(ObjectClass *oc, void = *data) =20 acc->info =3D data; cc->tcg_ops =3D &arm_v7m_tcg_ops; - cc->gdb_core_xml_file =3D "arm-m-profile.xml"; + cc->gdb_core_feature =3D gdb_find_static_feature("arm-m-profile.xml"); + cc->gdb_num_core_regs =3D cc->gdb_core_feature->num_regs; } =20 #ifndef TARGET_AARCH64 diff --git a/target/avr/cpu.c b/target/avr/cpu.c index 8f741f258c..217adc64cb 100644 --- a/target/avr/cpu.c +++ b/target/avr/cpu.c @@ -246,8 +246,8 @@ static void avr_cpu_class_init(ObjectClass *oc, void *d= ata) cc->gdb_read_register =3D avr_cpu_gdb_read_register; cc->gdb_write_register =3D avr_cpu_gdb_write_register; cc->gdb_adjust_breakpoint =3D avr_cpu_gdb_adjust_breakpoint; - cc->gdb_num_core_regs =3D 35; - cc->gdb_core_xml_file =3D "avr-cpu.xml"; + cc->gdb_core_feature =3D gdb_find_static_feature("avr-cpu.xml"); + cc->gdb_num_core_regs =3D cc->gdb_core_feature->num_regs; cc->tcg_ops =3D &avr_tcg_ops; } =20 diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c index f155936289..b54162cbeb 100644 --- a/target/hexagon/cpu.c +++ b/target/hexagon/cpu.c @@ -391,7 +391,7 @@ static void hexagon_cpu_class_init(ObjectClass *c, void= *data) cc->gdb_write_register =3D hexagon_gdb_write_register; cc->gdb_num_core_regs =3D TOTAL_PER_THREAD_REGS; cc->gdb_stop_before_watchpoint =3D true; - cc->gdb_core_xml_file =3D "hexagon-core.xml"; + cc->gdb_core_feature =3D gdb_find_static_feature("hexagon-core.xml"); cc->disas_set_info =3D hexagon_cpu_disas_set_info; cc->tcg_ops =3D &hexagon_tcg_ops; } diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 5678b52472..58b7f28e8f 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -7967,12 +7967,11 @@ static void x86_cpu_common_class_init(ObjectClass *= oc, void *data) =20 cc->gdb_arch_name =3D x86_gdb_arch_name; #ifdef TARGET_X86_64 - cc->gdb_core_xml_file =3D "i386-64bit.xml"; - cc->gdb_num_core_regs =3D 66; + cc->gdb_core_feature =3D gdb_find_static_feature("i386-64bit.xml"); #else - cc->gdb_core_xml_file =3D "i386-32bit.xml"; - cc->gdb_num_core_regs =3D 50; + cc->gdb_core_feature =3D gdb_find_static_feature("i386-32bit.xml"); #endif + cc->gdb_num_core_regs =3D cc->gdb_core_feature->num_regs; cc->disas_set_info =3D x86_disas_set_info; =20 dc->user_creatable =3D true; diff --git a/target/loongarch/cpu.c b/target/loongarch/cpu.c index f88cfa93ce..d58f5cc143 100644 --- a/target/loongarch/cpu.c +++ b/target/loongarch/cpu.c @@ -772,8 +772,8 @@ static void loongarch32_cpu_class_init(ObjectClass *c, = void *data) { CPUClass *cc =3D CPU_CLASS(c); =20 - cc->gdb_num_core_regs =3D 35; - cc->gdb_core_xml_file =3D "loongarch-base32.xml"; + cc->gdb_core_feature =3D gdb_find_static_feature("loongarch-base32.xml= "); + cc->gdb_num_core_regs =3D cc->gdb_core_feature->num_regs; cc->gdb_arch_name =3D loongarch32_gdb_arch_name; } =20 @@ -786,8 +786,8 @@ static void loongarch64_cpu_class_init(ObjectClass *c, = void *data) { CPUClass *cc =3D CPU_CLASS(c); =20 - cc->gdb_num_core_regs =3D 35; - cc->gdb_core_xml_file =3D "loongarch-base64.xml"; + cc->gdb_core_feature =3D gdb_find_static_feature("loongarch-base64.xml= "); + cc->gdb_num_core_regs =3D cc->gdb_core_feature->num_regs; cc->gdb_arch_name =3D loongarch64_gdb_arch_name; } =20 diff --git a/target/m68k/cpu.c b/target/m68k/cpu.c index 70d58471dc..2bd7238aa8 100644 --- a/target/m68k/cpu.c +++ b/target/m68k/cpu.c @@ -572,7 +572,6 @@ static void m68k_cpu_class_init(ObjectClass *c, void *d= ata) #endif cc->disas_set_info =3D m68k_cpu_disas_set_info; =20 - cc->gdb_num_core_regs =3D 18; cc->tcg_ops =3D &m68k_tcg_ops; } =20 @@ -580,7 +579,8 @@ static void m68k_cpu_class_init_cf_core(ObjectClass *c,= void *data) { CPUClass *cc =3D CPU_CLASS(c); =20 - cc->gdb_core_xml_file =3D "cf-core.xml"; + cc->gdb_core_feature =3D gdb_find_static_feature("cf-core.xml"); + cc->gdb_num_core_regs =3D cc->gdb_core_feature->num_regs; } =20 #define DEFINE_M68K_CPU_TYPE_CF(model) \ @@ -595,7 +595,8 @@ static void m68k_cpu_class_init_m68k_core(ObjectClass *= c, void *data) { CPUClass *cc =3D CPU_CLASS(c); =20 - cc->gdb_core_xml_file =3D "m68k-core.xml"; + cc->gdb_core_feature =3D gdb_find_static_feature("m68k-core.xml"); + cc->gdb_num_core_regs =3D cc->gdb_core_feature->num_regs; } =20 #define DEFINE_M68K_CPU_TYPE_M68K(model) \ diff --git a/target/microblaze/cpu.c b/target/microblaze/cpu.c index 03c2c4db1f..47f37c2519 100644 --- a/target/microblaze/cpu.c +++ b/target/microblaze/cpu.c @@ -428,8 +428,8 @@ static void mb_cpu_class_init(ObjectClass *oc, void *da= ta) cc->sysemu_ops =3D &mb_sysemu_ops; #endif device_class_set_props(dc, mb_properties); - cc->gdb_num_core_regs =3D 32 + 25; - cc->gdb_core_xml_file =3D "microblaze-core.xml"; + cc->gdb_core_feature =3D gdb_find_static_feature("microblaze-core.xml"= ); + cc->gdb_num_core_regs =3D cc->gdb_core_feature->num_regs; =20 cc->disas_set_info =3D mb_disas_set_info; cc->tcg_ops =3D &mb_tcg_ops; diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c index 02b7aad9b0..eb56226865 100644 --- a/target/ppc/cpu_init.c +++ b/target/ppc/cpu_init.c @@ -7381,9 +7381,9 @@ static void ppc_cpu_class_init(ObjectClass *oc, void = *data) =20 cc->gdb_arch_name =3D ppc_gdb_arch_name; #if defined(TARGET_PPC64) - cc->gdb_core_xml_file =3D "power64-core.xml"; + cc->gdb_core_feature =3D gdb_find_static_feature("power64-core.xml"); #else - cc->gdb_core_xml_file =3D "power-core.xml"; + cc->gdb_core_feature =3D gdb_find_static_feature("power-core.xml"); #endif cc->disas_set_info =3D ppc_disas_set_info; =20 diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index ef8faaaff5..48f1426299 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -1031,11 +1031,11 @@ static void riscv_cpu_validate_misa_mxl(RISCVCPU *c= pu, Error **errp) #ifdef TARGET_RISCV64 case MXL_RV64: case MXL_RV128: - cc->gdb_core_xml_file =3D "riscv-64bit-cpu.xml"; + cc->gdb_core_feature =3D gdb_find_static_feature("riscv-64bit-cpu.= xml"); break; #endif case MXL_RV32: - cc->gdb_core_xml_file =3D "riscv-32bit-cpu.xml"; + cc->gdb_core_feature =3D gdb_find_static_feature("riscv-32bit-cpu.= xml"); break; default: g_assert_not_reached(); @@ -1045,6 +1045,8 @@ static void riscv_cpu_validate_misa_mxl(RISCVCPU *cpu= , Error **errp) error_setg(errp, "misa_mxl_max must be equal to misa_mxl"); return; } + + cc->gdb_num_core_regs =3D cc->gdb_core_feature->num_regs; } =20 /* @@ -2138,7 +2140,6 @@ static void riscv_cpu_class_init(ObjectClass *c, void= *data) cc->get_pc =3D riscv_cpu_get_pc; cc->gdb_read_register =3D riscv_cpu_gdb_read_register; cc->gdb_write_register =3D riscv_cpu_gdb_write_register; - cc->gdb_num_core_regs =3D 33; cc->gdb_stop_before_watchpoint =3D true; cc->disas_set_info =3D riscv_cpu_disas_set_info; #ifndef CONFIG_USER_ONLY diff --git a/target/rx/cpu.c b/target/rx/cpu.c index 157e57da0f..b139265728 100644 --- a/target/rx/cpu.c +++ b/target/rx/cpu.c @@ -239,8 +239,8 @@ static void rx_cpu_class_init(ObjectClass *klass, void = *data) cc->gdb_write_register =3D rx_cpu_gdb_write_register; cc->disas_set_info =3D rx_cpu_disas_set_info; =20 - cc->gdb_num_core_regs =3D 26; - cc->gdb_core_xml_file =3D "rx-core.xml"; + cc->gdb_core_feature =3D gdb_find_static_feature("rx-core.xml"); + cc->gdb_num_core_regs =3D cc->gdb_core_feature->num_regs; cc->tcg_ops =3D &rx_tcg_ops; } =20 diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c index cf4b5e43f2..ca356c2b86 100644 --- a/target/s390x/cpu.c +++ b/target/s390x/cpu.c @@ -348,8 +348,8 @@ static void s390_cpu_class_init(ObjectClass *oc, void *= data) s390_cpu_class_init_sysemu(cc); #endif cc->disas_set_info =3D s390_cpu_disas_set_info; - cc->gdb_num_core_regs =3D S390_NUM_CORE_REGS; - cc->gdb_core_xml_file =3D "s390x-core64.xml"; + cc->gdb_core_feature =3D gdb_find_static_feature("s390x-core64.xml"); + cc->gdb_num_core_regs =3D cc->gdb_core_feature->num_regs; cc->gdb_arch_name =3D s390_gdb_arch_name; =20 s390_cpu_model_class_register_props(oc); --=20 2.42.0 From nobody Fri May 10 19:36:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1694502805; cv=none; d=zohomail.com; s=zohoarc; b=JTmO5S9rx1lohMrLNsH7/0wwyJ+M4ZXFS9eRD+jFqAPZ1iS9HA0yAIU4CTmfKjumDosUe/N7HE66wJVJODqpRa+Plu59E2C1y8/JRvshBLrpjipQKS0GO47r7C31UJEZ8ihU1c/Lvy2OXZcUfwcP2xJQA6L/zFxrqmEc7X6peac= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1694502805; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject; bh=U7F7+NLv/kDye49BEzHGwBsFDwGPnZ07cj6V5tEh+C4=; b=IhaCVun6Q+OSSXVfe8cNeqKbSLW8hmZDVcB1GO5d6gdHwCbXHvv2IeFJuDFlx9ydHzDAZUJPG2QJj/4uEDXdNB/DAjUkRG5zn+Hod/eHiJJwONiD3WJ/hWnufNAjByALljCTDBFAUYwZDPaW1N8qd/Va4ZFFisvPKRlu32N3xTE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1694502805137273.9225396375581; Tue, 12 Sep 2023 00:13:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qfxZf-0002TS-UR; Tue, 12 Sep 2023 03:12:39 -0400 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 1qfxZe-0002Sh-PM for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:12:38 -0400 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qfxZa-0006WJ-7u for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:12:38 -0400 Received: by mail-pf1-x430.google.com with SMTP id d2e1a72fcca58-68fb79ef55eso1994791b3a.0 for ; Tue, 12 Sep 2023 00:12:33 -0700 (PDT) Received: from alarm.flets-east.jp ([2400:4050:a840:1e00:78d2:b862:10a7:d486]) by smtp.gmail.com with ESMTPSA id f13-20020aa78b0d000000b0068be348e35fsm6647495pfd.166.2023.09.12.00.12.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Sep 2023 00:12:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1694502753; x=1695107553; 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=U7F7+NLv/kDye49BEzHGwBsFDwGPnZ07cj6V5tEh+C4=; b=w+TCSya8Obit4cBJxxfe+tUKwArmjYQTVRY40lVhJFuN5nH4Agz4sIYjxO7LAfCmx3 8OoDMGWxbvLonfzJ4WTNfzrRMHewMC5htBKpaNnsE+5rKpY5+QmLwOQeOG2FhBTV/hdO /spY+Z11qNIsRyyNVO6KOiWG6yTfHr28h6PDBg8NMzLI4TWjmfg+08n01WBcUkMEUbCD mS7/xv/Y1Cu3zqnKyq+lIRaBqKVLikH9SYNVuX7krZelix1XANWya+Z0A7xxVqzQKzLb yWBzuG3IIu1fpFSHJUn+Y5m7wrIST0x+PR/qDMioDY1gVrQMQ2suR6MCHaVP94rEpHN5 iRrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694502753; x=1695107553; 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=U7F7+NLv/kDye49BEzHGwBsFDwGPnZ07cj6V5tEh+C4=; b=KOiLhU0pUfLTMlwg0Fkh5NruYAYXq/k8RBpzttRFWTb4a4NHFB4DOrtTDWKTFUd16q R8cwbtkrtjx78a1HTGVKcoAoSL7gcZtExmJKtJ7wkekpj0y20A77aZEWTnA+9RWy6UEx TJqzfuaR6iviTjTcnGB1KLupZ0En82pEiUHPqTMfC7cvcLQLTZdfHoEa4MRm48DgMuih xwZCuqTUm0O01wc6CEeOPHo66ynXLjzuMbysAHKjm6DuLj0GMICNiIkKNXu5eyCo6sUm iK1HFv96k4gPAXCN/DoZuUpsFo8tf5waHQlKUm4d4WlRKK/Iw99yOgsfPSU9khEaCkaC TDDg== X-Gm-Message-State: AOJu0YwbbIbnUQ/6n8S0wIvPWjC2mpUiRXtXyvavNafSm+Ne+sOVj+UC x+1RW2JPGuEcsjFmcj5/M+uGVw== X-Google-Smtp-Source: AGHT+IFdcqRsES2t1tdU4DsJSN8n/RHuHQ8CXz66apzeV6BW3l5xFPF0KsAieAWNZR0ELMyOcJrBRw== X-Received: by 2002:a05:6a20:9706:b0:154:9943:732c with SMTP id hr6-20020a056a20970600b001549943732cmr9902987pzc.30.1694502752715; Tue, 12 Sep 2023 00:12:32 -0700 (PDT) From: Akihiko Odaki To: Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Mikhail Tyutin , Aleksandr Anenkov , qemu-devel@nongnu.org, Akihiko Odaki , Richard Henderson , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v7 04/18] gdbstub: Introduce GDBFeatureBuilder Date: Tue, 12 Sep 2023 16:11:50 +0900 Message-ID: <20230912071206.30751-5-akihiko.odaki@daynix.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230912071206.30751-1-akihiko.odaki@daynix.com> References: <20230912071206.30751-1-akihiko.odaki@daynix.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=2607:f8b0:4864:20::430; envelope-from=akihiko.odaki@daynix.com; helo=mail-pf1-x430.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @daynix-com.20230601.gappssmtp.com) X-ZM-MESSAGEID: 1694502807259100001 Content-Type: text/plain; charset="utf-8" GDBFeatureBuilder unifies the logic to generate dynamic GDBFeature. Signed-off-by: Akihiko Odaki Reviewed-by: Richard Henderson --- include/exec/gdbstub.h | 20 ++++++++++++++ gdbstub/gdbstub.c | 59 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index 071021415a..d9ef2ccbff 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -16,6 +16,11 @@ typedef struct GDBFeature { int num_regs; } GDBFeature; =20 +typedef struct GDBFeatureBuilder { + GDBFeature *feature; + GPtrArray *xml; +} GDBFeatureBuilder; + =20 /* Get or set a register. Returns the size of the register. */ typedef int (*gdb_get_reg_cb)(CPUArchState *env, GByteArray *buf, int reg); @@ -44,6 +49,21 @@ void gdb_register_coprocessor(CPUState *cpu, */ int gdbserver_start(const char *port_or_device); =20 +void gdb_feature_builder_init(GDBFeatureBuilder *builder, GDBFeature *feat= ure, + const char *name, const char *xmlname); + +void gdb_feature_builder_append_tag(const GDBFeatureBuilder *builder, + const char *format, ...) + G_GNUC_PRINTF(2, 3); + +int gdb_feature_builder_append_reg(const GDBFeatureBuilder *builder, + const char *name, + int bitsize, + const char *type, + const char *group); + +void gdb_feature_builder_end(const GDBFeatureBuilder *builder); + const GDBFeature *gdb_find_static_feature(const char *xmlname); =20 void gdb_set_stop_cpu(CPUState *cpu); diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c index 9044b44954..b7bb252908 100644 --- a/gdbstub/gdbstub.c +++ b/gdbstub/gdbstub.c @@ -420,6 +420,65 @@ static const char *get_feature_xml(const char *p, cons= t char **newp, return NULL; } =20 +void gdb_feature_builder_init(GDBFeatureBuilder *builder, GDBFeature *feat= ure, + const char *name, const char *xmlname) +{ + char *header =3D g_markup_printf_escaped( + "" + "" + "", + name); + + builder->feature =3D feature; + builder->xml =3D g_ptr_array_new(); + g_ptr_array_add(builder->xml, header); + feature->xmlname =3D xmlname; + feature->num_regs =3D 0; +} + +void gdb_feature_builder_append_tag(const GDBFeatureBuilder *builder, + const char *format, ...) +{ + va_list ap; + va_start(ap, format); + g_ptr_array_add(builder->xml, g_markup_vprintf_escaped(format, ap)); + va_end(ap); +} + +int gdb_feature_builder_append_reg(const GDBFeatureBuilder *builder, + const char *name, + int bitsize, + const char *type, + const char *group) +{ + if (group) { + gdb_feature_builder_append_tag( + builder, + "", + name, bitsize, type, group); + } else { + gdb_feature_builder_append_tag( + builder, "", + name, bitsize, type); + } + + return builder->feature->num_regs++; +} + +void gdb_feature_builder_end(const GDBFeatureBuilder *builder) +{ + g_ptr_array_add(builder->xml, (void *)""); + g_ptr_array_add(builder->xml, NULL); + + builder->feature->xml =3D g_strjoinv(NULL, (void *)builder->xml->pdata= ); + + for (guint i =3D 0; i < builder->xml->len - 2; i++) { + g_free(g_ptr_array_index(builder->xml, i)); + } + + g_ptr_array_free(builder->xml, TRUE); +} + const GDBFeature *gdb_find_static_feature(const char *xmlname) { const GDBFeature *feature; --=20 2.42.0 From nobody Fri May 10 19:36:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1694502988; cv=none; d=zohomail.com; s=zohoarc; b=g6hvFebJnKcWA9zYXtyX8RiUnY6YHCzaWzns8ZuvGPiJoblvCjb6+SM19IATik97f00c2qknpxqF5P7L3FO6SZ6+1/7Y76CM/K/fS40kv+dpPiDhwVWtELPUcaWxs79jXiCFahgqxzqYk3nRztaLmS1kSjUZH7ajCPbSaQNDklQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1694502988; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject; bh=IvMWfn5XWMQXvkYo/Ix8a3RPs4tEpSZIU4YBArfTvZo=; b=Xxv39PVDs2XfoHuuKwgYX6qS+OWGmy+8I0DWBYaLurkQUaJ/Lev30C+zPcLeBVO9gtIktsnFUVf9ncsrtyo8hubGlhezNdPDf65m7ufTeqlIY9RVfBh8BZGHyMti9d91rtCjN8UNEpMKfgnsdeARIQhLiZdXGB6/1W2Ny5sbvaY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1694502988929136.66369065730476; Tue, 12 Sep 2023 00:16:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qfxZj-0002Xu-Qs; Tue, 12 Sep 2023 03:12:43 -0400 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 1qfxZh-0002Ub-Ie for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:12:41 -0400 Received: from mail-pg1-x532.google.com ([2607:f8b0:4864:20::532]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qfxZe-0006Ws-47 for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:12:41 -0400 Received: by mail-pg1-x532.google.com with SMTP id 41be03b00d2f7-573e0d471ceso3534752a12.2 for ; Tue, 12 Sep 2023 00:12:36 -0700 (PDT) Received: from alarm.flets-east.jp ([2400:4050:a840:1e00:78d2:b862:10a7:d486]) by smtp.gmail.com with ESMTPSA id f13-20020aa78b0d000000b0068be348e35fsm6647495pfd.166.2023.09.12.00.12.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Sep 2023 00:12:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1694502755; x=1695107555; 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=IvMWfn5XWMQXvkYo/Ix8a3RPs4tEpSZIU4YBArfTvZo=; b=ODAHuKpSgpPCZKC/fq5FGmjodKUTzHnT+PNmmHGijEdFhKArzlAJzgvuIq60dxXY76 kY16MjxujfSGH8p1fUWdXY3ZG92gbuUB1FpbJ7bjm2yl4sx9+IfL3pl4v1k0XJZpajYI 5hrOuK2KfU+kZthGi8QR22f0tFirCJHjla6hJDS2+XjylOgMf/PlwswD2jhumC49DLm6 FCwAiMEOGbq7IYiNHrZWquTT0f/Ub2EcfIs2JUdakpAT4JzaGGh1h8GYn/ECKyxi4+m+ 7oUskCX/Tt+cjSyNCVZ4IOevq2EtTpjy4SruqkAd4VXYgRtMwoeIIlNrCUgMFiyTe38b xFQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694502755; x=1695107555; 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=IvMWfn5XWMQXvkYo/Ix8a3RPs4tEpSZIU4YBArfTvZo=; b=jtz1VD9mXOVBea3L69InYRg+//NmW7HCBZuxOQDRP6ldK/vM2AjMl3svWtAuUBEKJ9 akGRKhzGcOpHvtJj7jhU0XxzkzvADvVR37V4tj8BixE97WTqlLz1P6iSs5qEW2Hxi9Dr twOYneoz9WaZiXCZkDXWvMnXEd/Vjm2JQOLNpzGbpeo2diRqZlH4KeT+NwVRVwukYkMB 7tlqD7f63unz9hceirkRxAenmJxIviXaDqCOwgYcL29UNiL5Ida4UDvbwPeRZ54KdJwY HSuyVZfNEAHTNi47xs2ln1N6ZYaUR/9dBlbpvOkXsnOOWDNFBeBOgfcCeTFrF9I5C1It yEww== X-Gm-Message-State: AOJu0YwR5U/33btGjQF7amXPh7zaWiHOqI4yeQQYgSc2/ZN0gQTnFYi9 Pdm1A94PED+Pw+G0W6clijVovQ== X-Google-Smtp-Source: AGHT+IFgUQxCcr1VwVE8VwVjnqAsmGbOs0fxUTwYXR/0ab5gJAM3OoBXeSrD426gXswhYeeMWuFVRQ== X-Received: by 2002:a05:6a20:4404:b0:14b:8b82:867f with SMTP id ce4-20020a056a20440400b0014b8b82867fmr12461984pzb.50.1694502755081; Tue, 12 Sep 2023 00:12:35 -0700 (PDT) From: Akihiko Odaki To: Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Mikhail Tyutin , Aleksandr Anenkov , qemu-devel@nongnu.org, Akihiko Odaki , Richard Henderson , Peter Maydell , qemu-arm@nongnu.org (open list:ARM TCG CPUs) Subject: [PATCH v7 05/18] target/arm: Use GDBFeature for dynamic XML Date: Tue, 12 Sep 2023 16:11:51 +0900 Message-ID: <20230912071206.30751-6-akihiko.odaki@daynix.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230912071206.30751-1-akihiko.odaki@daynix.com> References: <20230912071206.30751-1-akihiko.odaki@daynix.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=2607:f8b0:4864:20::532; envelope-from=akihiko.odaki@daynix.com; helo=mail-pg1-x532.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @daynix-com.20230601.gappssmtp.com) X-ZM-MESSAGEID: 1694502990498100007 Content-Type: text/plain; charset="utf-8" In preparation for a change to use GDBFeature as a parameter of gdb_register_coprocessor(), convert the internal representation of dynamic feature from plain XML to GDBFeature. Signed-off-by: Akihiko Odaki Acked-by: Richard Henderson --- target/arm/cpu.h | 20 +++--- target/arm/internals.h | 2 +- target/arm/gdbstub.c | 134 ++++++++++++++++++----------------------- target/arm/gdbstub64.c | 90 ++++++++++++--------------- 4 files changed, 108 insertions(+), 138 deletions(-) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 278cc135c2..7d698d0bf4 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -136,23 +136,21 @@ enum { */ =20 /** - * DynamicGDBXMLInfo: - * @desc: Contains the XML descriptions. - * @num: Number of the registers in this XML seen by GDB. + * DynamicGDBFeatureInfo: + * @desc: Contains the feature descriptions. * @data: A union with data specific to the set of registers * @cpregs_keys: Array that contains the corresponding Key of * a given cpreg with the same order of the cpreg * in the XML description. */ -typedef struct DynamicGDBXMLInfo { - char *desc; - int num; +typedef struct DynamicGDBFeatureInfo { + GDBFeature desc; union { struct { uint32_t *keys; } cpregs; } data; -} DynamicGDBXMLInfo; +} DynamicGDBFeatureInfo; =20 /* CPU state for each instance of a generic timer (in cp15 c14) */ typedef struct ARMGenericTimer { @@ -881,10 +879,10 @@ struct ArchCPU { uint64_t *cpreg_vmstate_values; int32_t cpreg_vmstate_array_len; =20 - DynamicGDBXMLInfo dyn_sysreg_xml; - DynamicGDBXMLInfo dyn_svereg_xml; - DynamicGDBXMLInfo dyn_m_systemreg_xml; - DynamicGDBXMLInfo dyn_m_secextreg_xml; + DynamicGDBFeatureInfo dyn_sysreg_feature; + DynamicGDBFeatureInfo dyn_svereg_feature; + DynamicGDBFeatureInfo dyn_m_systemreg_feature; + DynamicGDBFeatureInfo dyn_m_secextreg_feature; =20 /* Timers used by the generic (architected) timer */ QEMUTimer *gt_timer[NUM_GTIMERS]; diff --git a/target/arm/internals.h b/target/arm/internals.h index 5f5393b25c..58f1a66f8d 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -1385,7 +1385,7 @@ static inline uint64_t pmu_counter_mask(CPUARMState *= env) } =20 #ifdef TARGET_AARCH64 -int arm_gen_dynamic_svereg_xml(CPUState *cpu, int base_reg); +GDBFeature *arm_gen_dynamic_svereg_feature(CPUState *cpu); int aarch64_gdb_get_sve_reg(CPUARMState *env, GByteArray *buf, int reg); int aarch64_gdb_set_sve_reg(CPUARMState *env, uint8_t *buf, int reg); int aarch64_gdb_get_fpu_reg(CPUARMState *env, GByteArray *buf, int reg); diff --git a/target/arm/gdbstub.c b/target/arm/gdbstub.c index b7ace24bfc..fc0aa6f235 100644 --- a/target/arm/gdbstub.c +++ b/target/arm/gdbstub.c @@ -25,11 +25,10 @@ #include "internals.h" #include "cpregs.h" =20 -typedef struct RegisterSysregXmlParam { +typedef struct RegisterSysregFeatureParam { CPUState *cs; - GString *s; - int n; -} RegisterSysregXmlParam; + GDBFeatureBuilder builder; +} RegisterSysregFeatureParam; =20 /* Old gdb always expect FPA registers. Newer (xml-aware) gdb only expect whatever the target description contains. Due to a historical mishap @@ -215,7 +214,7 @@ static int arm_gdb_get_sysreg(CPUARMState *env, GByteAr= ray *buf, int reg) const ARMCPRegInfo *ri; uint32_t key; =20 - key =3D cpu->dyn_sysreg_xml.data.cpregs.keys[reg]; + key =3D cpu->dyn_sysreg_feature.data.cpregs.keys[reg]; ri =3D get_arm_cp_reginfo(cpu->cp_regs, key); if (ri) { if (cpreg_field_is_64bit(ri)) { @@ -232,34 +231,32 @@ static int arm_gdb_set_sysreg(CPUARMState *env, uint8= _t *buf, int reg) return 0; } =20 -static void arm_gen_one_xml_sysreg_tag(GString *s, DynamicGDBXMLInfo *dyn_= xml, +static void arm_gen_one_feature_sysreg(GDBFeatureBuilder *builder, + DynamicGDBFeatureInfo *dyn_feature, ARMCPRegInfo *ri, uint32_t ri_key, - int bitsize, int regnum) + int bitsize) { - g_string_append_printf(s, "name); - g_string_append_printf(s, " bitsize=3D\"%d\"", bitsize); - g_string_append_printf(s, " regnum=3D\"%d\"", regnum); - g_string_append_printf(s, " group=3D\"cp_regs\"/>"); - dyn_xml->data.cpregs.keys[dyn_xml->num] =3D ri_key; - dyn_xml->num++; + int num =3D gdb_feature_builder_append_reg(builder, ri->name, bitsize, + "int", "cp_regs"); + + dyn_feature->data.cpregs.keys[num] =3D ri_key; } =20 -static void arm_register_sysreg_for_xml(gpointer key, gpointer value, - gpointer p) +static void arm_register_sysreg_for_feature(gpointer key, gpointer value, + gpointer p) { uint32_t ri_key =3D (uintptr_t)key; ARMCPRegInfo *ri =3D value; - RegisterSysregXmlParam *param =3D (RegisterSysregXmlParam *)p; - GString *s =3D param->s; + RegisterSysregFeatureParam *param =3D p; ARMCPU *cpu =3D ARM_CPU(param->cs); CPUARMState *env =3D &cpu->env; - DynamicGDBXMLInfo *dyn_xml =3D &cpu->dyn_sysreg_xml; + DynamicGDBFeatureInfo *dyn_feature =3D &cpu->dyn_sysreg_feature; =20 if (!(ri->type & (ARM_CP_NO_RAW | ARM_CP_NO_GDB))) { if (arm_feature(env, ARM_FEATURE_AARCH64)) { if (ri->state =3D=3D ARM_CP_STATE_AA64) { - arm_gen_one_xml_sysreg_tag(s , dyn_xml, ri, ri_key, 64, - param->n++); + arm_gen_one_feature_sysreg(¶m->builder, dyn_feature, + ri, ri_key, 64); } } else { if (ri->state =3D=3D ARM_CP_STATE_AA32) { @@ -268,32 +265,31 @@ static void arm_register_sysreg_for_xml(gpointer key,= gpointer value, return; } if (ri->type & ARM_CP_64BIT) { - arm_gen_one_xml_sysreg_tag(s , dyn_xml, ri, ri_key, 64, - param->n++); + arm_gen_one_feature_sysreg(¶m->builder, dyn_featur= e, + ri, ri_key, 64); } else { - arm_gen_one_xml_sysreg_tag(s , dyn_xml, ri, ri_key, 32, - param->n++); + arm_gen_one_feature_sysreg(¶m->builder, dyn_featur= e, + ri, ri_key, 32); } } } } } =20 -static int arm_gen_dynamic_sysreg_xml(CPUState *cs, int base_reg) +static GDBFeature *arm_gen_dynamic_sysreg_feature(CPUState *cs) { ARMCPU *cpu =3D ARM_CPU(cs); - GString *s =3D g_string_new(NULL); - RegisterSysregXmlParam param =3D {cs, s, base_reg}; - - cpu->dyn_sysreg_xml.num =3D 0; - cpu->dyn_sysreg_xml.data.cpregs.keys =3D g_new(uint32_t, g_hash_table_= size(cpu->cp_regs)); - g_string_printf(s, ""); - g_string_append_printf(s, "= "); - g_string_append_printf(s, ""); - g_hash_table_foreach(cpu->cp_regs, arm_register_sysreg_for_xml, ¶m= ); - g_string_append_printf(s, ""); - cpu->dyn_sysreg_xml.desc =3D g_string_free(s, false); - return cpu->dyn_sysreg_xml.num; + RegisterSysregFeatureParam param =3D {cs}; + gsize num_regs =3D g_hash_table_size(cpu->cp_regs); + + gdb_feature_builder_init(¶m.builder, + &cpu->dyn_sysreg_feature.desc, + "org.qemu.gdb.arm.sys.regs", + "system-registers.xml"); + cpu->dyn_sysreg_feature.data.cpregs.keys =3D g_new(uint32_t, num_regs); + g_hash_table_foreach(cpu->cp_regs, arm_register_sysreg_for_feature, &p= aram); + gdb_feature_builder_end(¶m.builder); + return &cpu->dyn_sysreg_feature.desc; } =20 #ifdef CONFIG_TCG @@ -385,31 +381,26 @@ static int arm_gdb_set_m_systemreg(CPUARMState *env, = uint8_t *buf, int reg) return 0; /* TODO */ } =20 -static int arm_gen_dynamic_m_systemreg_xml(CPUState *cs, int orig_base_reg) +static GDBFeature *arm_gen_dynamic_m_systemreg_feature(CPUState *cs) { ARMCPU *cpu =3D ARM_CPU(cs); CPUARMState *env =3D &cpu->env; - GString *s =3D g_string_new(NULL); - int base_reg =3D orig_base_reg; + GDBFeatureBuilder builder; int i; =20 - g_string_printf(s, ""); - g_string_append_printf(s, "= "); - g_string_append_printf(s, "\n"); + gdb_feature_builder_init(&builder, &cpu->dyn_m_systemreg_feature.desc, + "org.gnu.gdb.arm.m-system", "arm-m-system.xml= "); =20 for (i =3D 0; i < ARRAY_SIZE(m_sysreg_def); i++) { if (arm_feature(env, m_sysreg_def[i].feature)) { - g_string_append_printf(s, - "\n", - m_sysreg_def[i].name, base_reg++); + gdb_feature_builder_append_reg(&builder, m_sysreg_def[i].name,= 32, + "int", NULL); } } =20 - g_string_append_printf(s, ""); - cpu->dyn_m_systemreg_xml.desc =3D g_string_free(s, false); - cpu->dyn_m_systemreg_xml.num =3D base_reg - orig_base_reg; + gdb_feature_builder_end(&builder); =20 - return cpu->dyn_m_systemreg_xml.num; + return &cpu->dyn_m_systemreg_feature.desc; } =20 #ifndef CONFIG_USER_ONLY @@ -427,31 +418,26 @@ static int arm_gdb_set_m_secextreg(CPUARMState *env, = uint8_t *buf, int reg) return 0; /* TODO */ } =20 -static int arm_gen_dynamic_m_secextreg_xml(CPUState *cs, int orig_base_reg) +static GDBFeature *arm_gen_dynamic_m_secextreg_feature(CPUState *cs) { ARMCPU *cpu =3D ARM_CPU(cs); - GString *s =3D g_string_new(NULL); - int base_reg =3D orig_base_reg; + GDBFeatureBuilder builder; + char *name; int i; =20 - g_string_printf(s, ""); - g_string_append_printf(s, "= "); - g_string_append_printf(s, "= \n"); + gdb_feature_builder_init(&builder, &cpu->dyn_m_secextreg_feature.desc, + "org.gnu.gdb.arm.secext", "arm-m-secext.xml"); =20 for (i =3D 0; i < ARRAY_SIZE(m_sysreg_def); i++) { - g_string_append_printf(s, - "\n", - m_sysreg_def[i].name, base_reg++); - g_string_append_printf(s, - "\n", - m_sysreg_def[i].name, base_reg++); + name =3D g_strconcat(m_sysreg_def[i].name, "_ns", NULL); + gdb_feature_builder_append_reg(&builder, name, 32, "int", NULL); + name =3D g_strconcat(m_sysreg_def[i].name, "_s", NULL); + gdb_feature_builder_append_reg(&builder, name, 32, "int", NULL); } =20 - g_string_append_printf(s, ""); - cpu->dyn_m_secextreg_xml.desc =3D g_string_free(s, false); - cpu->dyn_m_secextreg_xml.num =3D base_reg - orig_base_reg; + gdb_feature_builder_end(&builder); =20 - return cpu->dyn_m_secextreg_xml.num; + return &cpu->dyn_m_secextreg_feature.desc; } #endif #endif /* CONFIG_TCG */ @@ -461,14 +447,14 @@ const char *arm_gdb_get_dynamic_xml(CPUState *cs, con= st char *xmlname) ARMCPU *cpu =3D ARM_CPU(cs); =20 if (strcmp(xmlname, "system-registers.xml") =3D=3D 0) { - return cpu->dyn_sysreg_xml.desc; + return cpu->dyn_sysreg_feature.desc.xml; } else if (strcmp(xmlname, "sve-registers.xml") =3D=3D 0) { - return cpu->dyn_svereg_xml.desc; + return cpu->dyn_svereg_feature.desc.xml; } else if (strcmp(xmlname, "arm-m-system.xml") =3D=3D 0) { - return cpu->dyn_m_systemreg_xml.desc; + return cpu->dyn_m_systemreg_feature.desc.xml; #ifndef CONFIG_USER_ONLY } else if (strcmp(xmlname, "arm-m-secext.xml") =3D=3D 0) { - return cpu->dyn_m_secextreg_xml.desc; + return cpu->dyn_m_secextreg_feature.desc.xml; #endif } return NULL; @@ -486,7 +472,7 @@ void arm_cpu_register_gdb_regs_for_features(ARMCPU *cpu) */ #ifdef TARGET_AARCH64 if (isar_feature_aa64_sve(&cpu->isar)) { - int nreg =3D arm_gen_dynamic_svereg_xml(cs, cs->gdb_num_regs); + int nreg =3D arm_gen_dynamic_svereg_feature(cs)->num_regs; gdb_register_coprocessor(cs, aarch64_gdb_get_sve_reg, aarch64_gdb_set_sve_reg, nreg, "sve-registers.xml", 0); @@ -532,20 +518,20 @@ void arm_cpu_register_gdb_regs_for_features(ARMCPU *c= pu) 1, "arm-m-profile-mve.xml", 0); } gdb_register_coprocessor(cs, arm_gdb_get_sysreg, arm_gdb_set_sysreg, - arm_gen_dynamic_sysreg_xml(cs, cs->gdb_num_re= gs), + arm_gen_dynamic_sysreg_feature(cs)->num_regs, "system-registers.xml", 0); =20 #ifdef CONFIG_TCG if (arm_feature(env, ARM_FEATURE_M) && tcg_enabled()) { gdb_register_coprocessor(cs, arm_gdb_get_m_systemreg, arm_gdb_set_m_systemreg, - arm_gen_dynamic_m_systemreg_xml(cs, cs->gdb_num_regs), + arm_gen_dynamic_m_systemreg_feature(cs)->num_regs, "arm-m-system.xml", 0); #ifndef CONFIG_USER_ONLY if (arm_feature(env, ARM_FEATURE_M_SECURITY)) { gdb_register_coprocessor(cs, arm_gdb_get_m_secextreg, arm_gdb_set_m_secextreg, - arm_gen_dynamic_m_secextreg_xml(cs, cs->gdb_num_regs), + arm_gen_dynamic_m_secextreg_feature(cs)->num_regs, "arm-m-secext.xml", 0); } #endif diff --git a/target/arm/gdbstub64.c b/target/arm/gdbstub64.c index d7b79a6589..632ac2a520 100644 --- a/target/arm/gdbstub64.c +++ b/target/arm/gdbstub64.c @@ -247,7 +247,7 @@ int aarch64_gdb_set_pauth_reg(CPUARMState *env, uint8_t= *buf, int reg) return 0; } =20 -static void output_vector_union_type(GString *s, int reg_width, +static void output_vector_union_type(GDBFeatureBuilder *builder, int reg_w= idth, const char *name) { struct TypeSize { @@ -282,10 +282,10 @@ static void output_vector_union_type(GString *s, int = reg_width, =20 /* First define types and totals in a whole VL */ for (i =3D 0; i < ARRAY_SIZE(vec_lanes); i++) { - g_string_append_printf(s, - "", - name, vec_lanes[i].sz, vec_lanes[i].suffix, - vec_lanes[i].gdb_type, reg_width / vec_lane= s[i].size); + gdb_feature_builder_append_tag( + builder, "", + name, vec_lanes[i].sz, vec_lanes[i].suffix, + vec_lanes[i].gdb_type, reg_width / vec_lanes[i].size); } =20 /* @@ -296,86 +296,72 @@ static void output_vector_union_type(GString *s, int = reg_width, for (i =3D 0; i < ARRAY_SIZE(suf); i++) { int bits =3D 8 << i; =20 - g_string_append_printf(s, "", name, suf[i]); + gdb_feature_builder_append_tag(builder, "", + name, suf[i]); for (j =3D 0; j < ARRAY_SIZE(vec_lanes); j++) { if (vec_lanes[j].size =3D=3D bits) { - g_string_append_printf(s, "", - vec_lanes[j].suffix, name, - vec_lanes[j].sz, vec_lanes[j].suffi= x); + gdb_feature_builder_append_tag( + builder, "", + vec_lanes[j].suffix, name, + vec_lanes[j].sz, vec_lanes[j].suffix); } } - g_string_append(s, ""); + gdb_feature_builder_append_tag(builder, ""); } =20 /* And now the final union of unions */ - g_string_append_printf(s, "", name); + gdb_feature_builder_append_tag(builder, "", name); for (i =3D ARRAY_SIZE(suf) - 1; i >=3D 0; i--) { - g_string_append_printf(s, "= ", - suf[i], name, suf[i]); + gdb_feature_builder_append_tag(builder, + "", + suf[i], name, suf[i]); } - g_string_append(s, ""); + gdb_feature_builder_append_tag(builder, ""); } =20 -int arm_gen_dynamic_svereg_xml(CPUState *cs, int orig_base_reg) +GDBFeature *arm_gen_dynamic_svereg_feature(CPUState *cs) { ARMCPU *cpu =3D ARM_CPU(cs); - GString *s =3D g_string_new(NULL); - DynamicGDBXMLInfo *info =3D &cpu->dyn_svereg_xml; int reg_width =3D cpu->sve_max_vq * 128; int pred_width =3D cpu->sve_max_vq * 16; - int base_reg =3D orig_base_reg; + GDBFeatureBuilder builder; + char *name; int i; =20 - g_string_printf(s, ""); - g_string_append_printf(s, "= "); - g_string_append_printf(s, ""); + gdb_feature_builder_init(&builder, &cpu->dyn_svereg_feature.desc, + "org.gnu.gdb.aarch64.sve", "sve-registers.xml= "); =20 /* Create the vector union type. */ - output_vector_union_type(s, reg_width, "svev"); + output_vector_union_type(&builder, reg_width, "svev"); =20 /* Create the predicate vector type. */ - g_string_append_printf(s, - "", - pred_width / 8); + gdb_feature_builder_append_tag( + &builder, "= ", + pred_width / 8); =20 /* Define the vector registers. */ for (i =3D 0; i < 32; i++) { - g_string_append_printf(s, - "", - i, reg_width, base_reg++); + name =3D g_strdup_printf("z%d", i); + gdb_feature_builder_append_reg(&builder, name, reg_width, "svev", = NULL); } =20 /* fpscr & status registers */ - g_string_append_printf(s, "", base_reg++); - g_string_append_printf(s, "", base_reg++); + gdb_feature_builder_append_reg(&builder, "fpsr", 32, "int", "float"); + gdb_feature_builder_append_reg(&builder, "fpcr", 32, "int", "float"); =20 /* Define the predicate registers. */ for (i =3D 0; i < 16; i++) { - g_string_append_printf(s, - "", - i, pred_width, base_reg++); + name =3D g_strdup_printf("p%d", i); + gdb_feature_builder_append_reg(&builder, name, pred_width, + "svep", NULL); } - g_string_append_printf(s, - "", - pred_width, base_reg++); + gdb_feature_builder_append_reg(&builder, "ffr", pred_width, + "svep", "vector"); =20 /* Define the vector length pseudo-register. */ - g_string_append_printf(s, - "", - base_reg++); + gdb_feature_builder_append_reg(&builder, "vg", 64, "int", NULL); =20 - g_string_append_printf(s, ""); + gdb_feature_builder_end(&builder); =20 - info->desc =3D g_string_free(s, false); - info->num =3D base_reg - orig_base_reg; - return info->num; + return &cpu->dyn_svereg_feature.desc; } --=20 2.42.0 From nobody Fri May 10 19:36:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1694502912; cv=none; d=zohomail.com; s=zohoarc; b=P1XB9Bp1yEbbHq1PqiEWwocPgIbKr1lBWiH3LGw4AXwYn73qkZcHMSxTN9W6ZzZueTJr5MKt2Zm6gG+lLN3w6KpQ9xvKYYRUv5RQ0Reh+iyEoqv7Dx/i6Zj9sm+2TtoGKSPYJZKZS3O52DXklWnG+WHYOAYUKvu9oDwwQJliyqU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1694502912; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject; bh=pYYj8pcFFtMPtJAhC1Ypdj99Nqtuz96wx5UFLEJSN58=; b=DS9MSlT4LpEU5CamUyL9kFSZtNTi1y+hRbyfbQRh6EPQ5GBkJBjgk/IQ2QPuXE+dxJdakYjMWexs+eWL9F2FzMQ8MBgK+PM+aMSvsJJGMhEHUW86hKp9Cssfp7oi3fQs7cEn26thQJ7pamLI1kjvrKuuM68cN7l7c6ObjV+dQNs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1694502912866885.5572536867842; Tue, 12 Sep 2023 00:15:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qfxZk-0002Yp-RR; Tue, 12 Sep 2023 03:12:44 -0400 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 1qfxZj-0002XA-HR for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:12:43 -0400 Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qfxZf-0006Xb-7c for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:12:43 -0400 Received: by mail-pg1-x52b.google.com with SMTP id 41be03b00d2f7-5774750a6efso1797529a12.1 for ; Tue, 12 Sep 2023 00:12:38 -0700 (PDT) Received: from alarm.flets-east.jp ([2400:4050:a840:1e00:78d2:b862:10a7:d486]) by smtp.gmail.com with ESMTPSA id f13-20020aa78b0d000000b0068be348e35fsm6647495pfd.166.2023.09.12.00.12.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Sep 2023 00:12:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1694502758; x=1695107558; 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=pYYj8pcFFtMPtJAhC1Ypdj99Nqtuz96wx5UFLEJSN58=; b=j6Q1YSUICQHvxL8TWWUr1TtF4szz/rmdKSuF6sNV/OLyN11i/xuiv/nx3R+egg90rB dDsl1GTc7klZRUzj9hNlw3kEHegt4GYaHhUPR/YH1exqNIunWnPMOc231hxfPEfkVWQX n+gtMjxDl/TE/2jo9yt3woIqb1guAC1Y5XywbJ5qnLSVu7onjC1jw82al/ywES1hAY1Q kQJJBvMq3q1kcn+M9z1araSEk8DU5yFOjET8g2h90dJJzEX1ZVziSJP18SdNePjj/Brz lRFXtxz8S3ASZM1LAPefZJMzc29+jINiFNB5UCZcovAT5QLuO8pz/xMwyIOsOYMvhJrw rjuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694502758; x=1695107558; 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=pYYj8pcFFtMPtJAhC1Ypdj99Nqtuz96wx5UFLEJSN58=; b=T82ngoHE8/Wp3Qrpsli/xm5ZuhhNrdmkLU8qOC5K+8F2iPeb9IpNTP4OsOS7lQwJBy 6OtRnSx2G9P8muFSK+kzRz62kQjz5FMqgBd86e95KOK/amGiCECly/2sibo+hHQIQuce AZPICn7IkAQ4SyDyWDC3odBOF0SPR8vhH6xIv4sQzpSU7/J6fDrZrtx+Ks1YxH0aJTkw XXpUr44JcFVzlEljr7OzhUAf7LugfWmhtOS2IWAYUlrCBHaVNsECnOseCWDxfPI03CCi sbPW1+jypZqXnL/jHjCLXM7jnaE2YYcr9tYd0C4CqrJ1XATomL1aBoSbzDXC8yuC7h2E QX1w== X-Gm-Message-State: AOJu0Yz4BKpSqpknfK/Op3fSKGWpHcE+52HOpYHe2tlk9GAVkiZo0fVW xe61ebNEPlSVBkYhVRU1FshHWw== X-Google-Smtp-Source: AGHT+IFCiqYfXyirJgMufIND4fjVu8rmr9IyQXxswKi2Kzy4RR5DdDpGPvbevGZXgaCEIi+Luz6h8w== X-Received: by 2002:a05:6a20:1442:b0:14c:6397:ac6e with SMTP id a2-20020a056a20144200b0014c6397ac6emr11863979pzi.23.1694502758064; Tue, 12 Sep 2023 00:12:38 -0700 (PDT) From: Akihiko Odaki To: Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Mikhail Tyutin , Aleksandr Anenkov , qemu-devel@nongnu.org, Akihiko Odaki , Richard Henderson , Daniel Henrique Barboza , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , David Gibson , Greg Kurz , Nicholas Piggin , qemu-ppc@nongnu.org (open list:PowerPC TCG CPUs) Subject: [PATCH v7 06/18] target/ppc: Use GDBFeature for dynamic XML Date: Tue, 12 Sep 2023 16:11:52 +0900 Message-ID: <20230912071206.30751-7-akihiko.odaki@daynix.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230912071206.30751-1-akihiko.odaki@daynix.com> References: <20230912071206.30751-1-akihiko.odaki@daynix.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=2607:f8b0:4864:20::52b; envelope-from=akihiko.odaki@daynix.com; helo=mail-pg1-x52b.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @daynix-com.20230601.gappssmtp.com) X-ZM-MESSAGEID: 1694502914572100005 Content-Type: text/plain; charset="utf-8" In preparation for a change to use GDBFeature as a parameter of gdb_register_coprocessor(), convert the internal representation of dynamic feature from plain XML to GDBFeature. Signed-off-by: Akihiko Odaki Reviewed-by: Richard Henderson --- target/ppc/cpu-qom.h | 3 +-- target/ppc/cpu.h | 2 +- target/ppc/cpu_init.c | 2 +- target/ppc/gdbstub.c | 45 ++++++++++++++----------------------------- 4 files changed, 17 insertions(+), 35 deletions(-) diff --git a/target/ppc/cpu-qom.h b/target/ppc/cpu-qom.h index be33786bd8..633fb402b5 100644 --- a/target/ppc/cpu-qom.h +++ b/target/ppc/cpu-qom.h @@ -186,8 +186,7 @@ struct PowerPCCPUClass { int bfd_mach; uint32_t l1_dcache_size, l1_icache_size; #ifndef CONFIG_USER_ONLY - unsigned int gdb_num_sprs; - const char *gdb_spr_xml; + GDBFeature gdb_spr; #endif const PPCHash64Options *hash64_opts; struct ppc_radix_page_info *radix_page_info; diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h index 25fac9577a..5f251bdffe 100644 --- a/target/ppc/cpu.h +++ b/target/ppc/cpu.h @@ -1381,7 +1381,7 @@ int ppc_cpu_gdb_write_register(CPUState *cpu, uint8_t= *buf, int reg); int ppc_cpu_gdb_write_register_apple(CPUState *cpu, uint8_t *buf, int reg); #ifndef CONFIG_USER_ONLY hwaddr ppc_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr); -void ppc_gdb_gen_spr_xml(PowerPCCPU *cpu); +void ppc_gdb_gen_spr_feature(PowerPCCPU *cpu); const char *ppc_gdb_get_dynamic_xml(CPUState *cs, const char *xml_name); #endif int ppc64_cpu_write_elf64_note(WriteCoreDumpFunction f, CPUState *cs, diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c index eb56226865..938cd2b7e1 100644 --- a/target/ppc/cpu_init.c +++ b/target/ppc/cpu_init.c @@ -6673,7 +6673,7 @@ static void init_ppc_proc(PowerPCCPU *cpu) (*pcc->init_proc)(env); =20 #if !defined(CONFIG_USER_ONLY) - ppc_gdb_gen_spr_xml(cpu); + ppc_gdb_gen_spr_feature(cpu); #endif =20 /* MSR bits & flags consistency checks */ diff --git a/target/ppc/gdbstub.c b/target/ppc/gdbstub.c index ec5731e5d6..43de40ac36 100644 --- a/target/ppc/gdbstub.c +++ b/target/ppc/gdbstub.c @@ -300,15 +300,21 @@ int ppc_cpu_gdb_write_register_apple(CPUState *cs, ui= nt8_t *mem_buf, int n) } =20 #ifndef CONFIG_USER_ONLY -void ppc_gdb_gen_spr_xml(PowerPCCPU *cpu) +void ppc_gdb_gen_spr_feature(PowerPCCPU *cpu) { PowerPCCPUClass *pcc =3D POWERPC_CPU_GET_CLASS(cpu); CPUPPCState *env =3D &cpu->env; - GString *xml; - char *spr_name; + GDBFeatureBuilder builder; unsigned int num_regs =3D 0; int i; =20 + if (pcc->gdb_spr.xml) { + return; + } + + gdb_feature_builder_init(&builder, &pcc->gdb_spr, + "org.qemu.power.spr", "power-spr.xml"); + for (i =3D 0; i < ARRAY_SIZE(env->spr_cb); i++) { ppc_spr_t *spr =3D &env->spr_cb[i]; =20 @@ -326,35 +332,12 @@ void ppc_gdb_gen_spr_xml(PowerPCCPU *cpu) */ spr->gdb_id =3D num_regs; num_regs++; - } - - if (pcc->gdb_spr_xml) { - return; - } - - xml =3D g_string_new(""); - g_string_append(xml, ""); - g_string_append(xml, ""); =20 - for (i =3D 0; i < ARRAY_SIZE(env->spr_cb); i++) { - ppc_spr_t *spr =3D &env->spr_cb[i]; - - if (!spr->name) { - continue; - } - - spr_name =3D g_ascii_strdown(spr->name, -1); - g_string_append_printf(xml, ""); + gdb_feature_builder_append_reg(&builder, g_ascii_strdown(spr->name= , -1), + TARGET_LONG_BITS, "int", "spr"); } =20 - g_string_append(xml, ""); - - pcc->gdb_num_sprs =3D num_regs; - pcc->gdb_spr_xml =3D g_string_free(xml, false); + gdb_feature_builder_end(&builder); } =20 const char *ppc_gdb_get_dynamic_xml(CPUState *cs, const char *xml_name) @@ -362,7 +345,7 @@ const char *ppc_gdb_get_dynamic_xml(CPUState *cs, const= char *xml_name) PowerPCCPUClass *pcc =3D POWERPC_CPU_GET_CLASS(cs); =20 if (strcmp(xml_name, "power-spr.xml") =3D=3D 0) { - return pcc->gdb_spr_xml; + return pcc->gdb_spr.xml; } return NULL; } @@ -600,6 +583,6 @@ void ppc_gdb_init(CPUState *cs, PowerPCCPUClass *pcc) } #ifndef CONFIG_USER_ONLY gdb_register_coprocessor(cs, gdb_get_spr_reg, gdb_set_spr_reg, - pcc->gdb_num_sprs, "power-spr.xml", 0); + pcc->gdb_spr.num_regs, "power-spr.xml", 0); #endif } --=20 2.42.0 From nobody Fri May 10 19:36:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1694502913; cv=none; d=zohomail.com; s=zohoarc; b=HjRvrc/4cqK7RxZpfRds8V9oa0T60tQ/2w3t1bw87NB/rnmhS9KgDVc+hOQwiEMxoIYZH05Ga85QgFdFaPWflpZVZpDaTc9xOTTgUtEFJD5k54XWh+aCUsVQCl015CZK9Kd5YHGN5TMIweCmLAfQFmYrVhR01YhnfyvMi89dImk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1694502913; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject; bh=t+8gtXQLkZ5PR95dA/2IY/7GW/8nDUoQWZBqSaQ3Mw4=; b=QSWXKIXNBQMKj9uLkD5jI1YIxex+hN3I0X6otCj1AJcRCQNHsTvvAVxfA1PzI6HlUUYkJ46febjCIMNXxXy5P7wS+l1Fn245iPr7zyMGNNTCb5rFMqDM7FNWCiQyVoQ4ZVuWYtl8ZvVgW5VRF6NQTbgyjuyXdFRfrVM47qjv+5o= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1694502913102572.5531849237676; Tue, 12 Sep 2023 00:15:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qfxZm-0002Zo-Id; Tue, 12 Sep 2023 03:12:46 -0400 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 1qfxZk-0002Yj-Jq for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:12:44 -0400 Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qfxZi-0006Y6-75 for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:12:44 -0400 Received: by mail-pg1-x52b.google.com with SMTP id 41be03b00d2f7-57767b2058cso1096274a12.1 for ; Tue, 12 Sep 2023 00:12:41 -0700 (PDT) Received: from alarm.flets-east.jp ([2400:4050:a840:1e00:78d2:b862:10a7:d486]) by smtp.gmail.com with ESMTPSA id f13-20020aa78b0d000000b0068be348e35fsm6647495pfd.166.2023.09.12.00.12.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Sep 2023 00:12:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1694502761; x=1695107561; 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=t+8gtXQLkZ5PR95dA/2IY/7GW/8nDUoQWZBqSaQ3Mw4=; b=AhhVV8AERVzOZBivuyYYUoGKfFULoGxf3GCqOS6RQWRdri5ccaYWAnsvULzwOnX9M3 3LwPcmhHjXbIBPxDD3JVQsgKOnPAMnXdiUTsgu69W7MYh/2mNzobGkfWPi/SoMo49tzo xP/lMXzz6+fv68g4u/sa20jiJp9PygfNTOj/631hJl6EDm0oSdPz9/rynEQyr4flgexL pkifdmBOl4FtwOqAndgDNThXQa3Mljx1VUWrp3pLK36uQSoAMfn9GWkYNdgKIOVTKl8g OvSECM9zHXADrf32i4+Tz0VM/JkJERITro3FNvsP+exgAIBtkbjxRouv0+/h4cRBKKPo GYIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694502761; x=1695107561; 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=t+8gtXQLkZ5PR95dA/2IY/7GW/8nDUoQWZBqSaQ3Mw4=; b=OldsHVnJv3e0ruDBqKyyOVyx4QewXZqMKngEUWemaKQ2pw0tvqC/cgOqgR/AWCR99e 29oDKPNEIrfIqIrqk6ggD9SGkwUoUMBdX7PpuZeJQ/pRuxTvFutFUDaC7YSIgLHfrgpe jVXcpB33ztfYYgpMsa9tp/a9+7lzIWdaW+8D+bJj5lXBRv6q2EwsYAMdYjckaLN1X/Ul wZPsmyN/utTK6IDfUswdUATDrtqLED2nza7B2PWjxtH5qPXJbwAEF9uBd7hR8eTQxDh9 L9/NR8w/TzLE2wcgn36OzbsrZu33dtxN4vqq7kYCDezo+b1vcI0bvXFmBg2TFk3ZgATK +EEQ== X-Gm-Message-State: AOJu0YwijtTUsjcwbHJP17LlaEveL3HndTo1lya8dj5N4iUHNMelRt5g QtSEXVIDUKZGckG6yGnSYBUfAA== X-Google-Smtp-Source: AGHT+IFrk1GKsViOzabd4hF3pqm4jHs34fvEIEgmmhZMcBI1m/1wHfedStuwv8BDexlEbB5UHEQK7A== X-Received: by 2002:a05:6a21:3381:b0:14c:a2e1:65fd with SMTP id yy1-20020a056a21338100b0014ca2e165fdmr12627101pzb.9.1694502760969; Tue, 12 Sep 2023 00:12:40 -0700 (PDT) From: Akihiko Odaki To: Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Mikhail Tyutin , Aleksandr Anenkov , qemu-devel@nongnu.org, Akihiko Odaki , Palmer Dabbelt , Alistair Francis , Bin Meng , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , qemu-riscv@nongnu.org (open list:RISC-V TCG CPUs) Subject: [PATCH v7 07/18] target/riscv: Use GDBFeature for dynamic XML Date: Tue, 12 Sep 2023 16:11:53 +0900 Message-ID: <20230912071206.30751-8-akihiko.odaki@daynix.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230912071206.30751-1-akihiko.odaki@daynix.com> References: <20230912071206.30751-1-akihiko.odaki@daynix.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=2607:f8b0:4864:20::52b; envelope-from=akihiko.odaki@daynix.com; helo=mail-pg1-x52b.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @daynix-com.20230601.gappssmtp.com) X-ZM-MESSAGEID: 1694502914484100001 Content-Type: text/plain; charset="utf-8" In preparation for a change to use GDBFeature as a parameter of gdb_register_coprocessor(), convert the internal representation of dynamic feature from plain XML to GDBFeature. Signed-off-by: Akihiko Odaki --- target/riscv/cpu.h | 4 +-- target/riscv/cpu.c | 4 +-- target/riscv/gdbstub.c | 77 ++++++++++++++++++------------------------ 3 files changed, 37 insertions(+), 48 deletions(-) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 6ea22e0eea..f67751d5b7 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -391,8 +391,8 @@ struct ArchCPU { CPUNegativeOffsetState neg; CPURISCVState env; =20 - char *dyn_csr_xml; - char *dyn_vreg_xml; + GDBFeature dyn_csr_feature; + GDBFeature dyn_vreg_feature; =20 /* Configuration Settings */ RISCVCPUConfig cfg; diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 48f1426299..86a477bfc0 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -1962,9 +1962,9 @@ static const char *riscv_gdb_get_dynamic_xml(CPUState= *cs, const char *xmlname) RISCVCPU *cpu =3D RISCV_CPU(cs); =20 if (strcmp(xmlname, "riscv-csr.xml") =3D=3D 0) { - return cpu->dyn_csr_xml; + return cpu->dyn_csr_feature.xml; } else if (strcmp(xmlname, "riscv-vector.xml") =3D=3D 0) { - return cpu->dyn_vreg_xml; + return cpu->dyn_vreg_feature.xml; } =20 return NULL; diff --git a/target/riscv/gdbstub.c b/target/riscv/gdbstub.c index 524bede865..cdae406751 100644 --- a/target/riscv/gdbstub.c +++ b/target/riscv/gdbstub.c @@ -212,12 +212,13 @@ static int riscv_gdb_set_virtual(CPURISCVState *cs, u= int8_t *mem_buf, int n) return 0; } =20 -static int riscv_gen_dynamic_csr_xml(CPUState *cs, int base_reg) +static GDBFeature *riscv_gen_dynamic_csr_feature(CPUState *cs) { RISCVCPU *cpu =3D RISCV_CPU(cs); CPURISCVState *env =3D &cpu->env; - GString *s =3D g_string_new(NULL); + GDBFeatureBuilder builder; riscv_csr_predicate_fn predicate; + const char *name; int bitsize =3D 16 << env->misa_mxl_max; int i; =20 @@ -230,9 +231,8 @@ static int riscv_gen_dynamic_csr_xml(CPUState *cs, int = base_reg) bitsize =3D 64; } =20 - g_string_printf(s, ""); - g_string_append_printf(s, ""); - g_string_append_printf(s, ""= ); + gdb_feature_builder_init(&builder, &cpu->dyn_csr_feature, + "org.gnu.gdb.riscv.csr", "riscv-csr.xml"); =20 for (i =3D 0; i < CSR_TABLE_SIZE; i++) { if (env->priv_ver < csr_ops[i].min_priv_ver) { @@ -240,72 +240,63 @@ static int riscv_gen_dynamic_csr_xml(CPUState *cs, in= t base_reg) } predicate =3D csr_ops[i].predicate; if (predicate && (predicate(env, i) =3D=3D RISCV_EXCP_NONE)) { - if (csr_ops[i].name) { - g_string_append_printf(s, "", base_reg + i); + + gdb_feature_builder_append_reg(&builder, name, bitsize, + "int", NULL); } } =20 - g_string_append_printf(s, ""); - - cpu->dyn_csr_xml =3D g_string_free(s, false); + gdb_feature_builder_end(&builder); =20 #if !defined(CONFIG_USER_ONLY) env->debugger =3D false; #endif =20 - return CSR_TABLE_SIZE; + return &cpu->dyn_csr_feature; } =20 -static int ricsv_gen_dynamic_vector_xml(CPUState *cs, int base_reg) +static GDBFeature *ricsv_gen_dynamic_vector_feature(CPUState *cs) { RISCVCPU *cpu =3D RISCV_CPU(cs); - GString *s =3D g_string_new(NULL); - g_autoptr(GString) ts =3D g_string_new(""); + GDBFeatureBuilder builder; int reg_width =3D cpu->cfg.vlen; - int num_regs =3D 0; int i; =20 - g_string_printf(s, ""); - g_string_append_printf(s, "= "); - g_string_append_printf(s, ""); + gdb_feature_builder_init(&builder, &cpu->dyn_vreg_feature, + "org.gnu.gdb.riscv.vector", "riscv-vector.xml= "); =20 /* First define types and totals in a whole VL */ for (i =3D 0; i < ARRAY_SIZE(vec_lanes); i++) { int count =3D reg_width / vec_lanes[i].size; - g_string_printf(ts, "%s", vec_lanes[i].id); - g_string_append_printf(s, - "", - ts->str, vec_lanes[i].gdb_type, count); + gdb_feature_builder_append_tag( + &builder, "", + vec_lanes[i].id, vec_lanes[i].gdb_type, count); } =20 /* Define unions */ - g_string_append_printf(s, ""); + gdb_feature_builder_append_tag(&builder, ""); for (i =3D 0; i < ARRAY_SIZE(vec_lanes); i++) { - g_string_append_printf(s, "", - vec_lanes[i].suffix, - vec_lanes[i].id); + gdb_feature_builder_append_tag(&builder, + "", + vec_lanes[i].suffix, vec_lanes[i].i= d); } - g_string_append(s, ""); + gdb_feature_builder_append_tag(&builder, ""); =20 /* Define vector registers */ for (i =3D 0; i < 32; i++) { - g_string_append_printf(s, - "", - i, reg_width, base_reg++); - num_regs++; + gdb_feature_builder_append_reg(&builder, g_strdup_printf("v%d", i), + reg_width, "riscv_vector", "vector"= ); } =20 - g_string_append_printf(s, ""); + gdb_feature_builder_end(&builder); =20 - cpu->dyn_vreg_xml =3D g_string_free(s, false); - return num_regs; + return &cpu->dyn_vreg_feature; } =20 void riscv_cpu_register_gdb_regs_for_features(CPUState *cs) @@ -320,10 +311,9 @@ void riscv_cpu_register_gdb_regs_for_features(CPUState= *cs) 32, "riscv-32bit-fpu.xml", 0); } if (env->misa_ext & RVV) { - int base_reg =3D cs->gdb_num_regs; gdb_register_coprocessor(cs, riscv_gdb_get_vector, riscv_gdb_set_vector, - ricsv_gen_dynamic_vector_xml(cs, base_reg= ), + ricsv_gen_dynamic_vector_feature(cs)->num= _regs, "riscv-vector.xml", 0); } switch (env->misa_mxl_max) { @@ -343,9 +333,8 @@ void riscv_cpu_register_gdb_regs_for_features(CPUState = *cs) } =20 if (cpu->cfg.ext_icsr) { - int base_reg =3D cs->gdb_num_regs; gdb_register_coprocessor(cs, riscv_gdb_get_csr, riscv_gdb_set_csr, - riscv_gen_dynamic_csr_xml(cs, base_reg), + riscv_gen_dynamic_csr_feature(cs)->num_re= gs, "riscv-csr.xml", 0); } } --=20 2.42.0 From nobody Fri May 10 19:36:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1694502912; cv=none; d=zohomail.com; s=zohoarc; b=U0EiKI67WTA3mZEFoPd+to9o2HKLx95IInLQemPuvlhvaCwKL3N+mVsCDJzdoT5sXmY8msQHZnwpMTss0g6B5MdvSSV8LQxvVgRJoxEkkXQv2hTqfjkojw072tmi61oi8MXEXUGJA0IPi+nAoLoB4fPOkydvDfq9b0uDZ29TKxc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1694502912; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject; bh=JMOmibQujFknNAxH7Ym9Tku/lEKYtvQAIZKWdBjMklY=; b=cJXs3+H3vtTA84tY2UqQxNyAf45ZWg0SCt7s5d9oRRH13qaAFax9/QzrXYTE3uWZtCeE2zkogCeZGRfBtqKAJPDnFe4vHhOslLy5WvcTA2SDI8QB58iwTae7CqPi6mRatStzGh7qQN6/qXqibFWeRIHSE7MmTWrLjhMJ/Ti3q2I= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1694502912935379.1249208685605; Tue, 12 Sep 2023 00:15:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qfxZt-0002kn-7v; Tue, 12 Sep 2023 03:12:53 -0400 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 1qfxZs-0002jj-93 for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:12:52 -0400 Received: from mail-pf1-x435.google.com ([2607:f8b0: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 1qfxZo-0006b7-1e for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:12:52 -0400 Received: by mail-pf1-x435.google.com with SMTP id d2e1a72fcca58-68fdd6011f2so818011b3a.3 for ; Tue, 12 Sep 2023 00:12:47 -0700 (PDT) Received: from alarm.flets-east.jp ([2400:4050:a840:1e00:78d2:b862:10a7:d486]) by smtp.gmail.com with ESMTPSA id f13-20020aa78b0d000000b0068be348e35fsm6647495pfd.166.2023.09.12.00.12.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Sep 2023 00:12:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1694502767; x=1695107567; 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=JMOmibQujFknNAxH7Ym9Tku/lEKYtvQAIZKWdBjMklY=; b=tnyuvv1Pq/4lnGWXzMX8yMbHTt875kdnI1V+gTMAc5Gi2HGZRfV18+m77Wuk521cHF YlUD6bX9S3iu3eve3AH3LVa/WrftLzc7iRosaISPLQSuzpftD7mLQIIg9rClFWyTcOXn lSw/7cxEIonYD61rdATnezrUSqdmFEYx2jFpWdsHnyxlHm98+sYYrsqNY3mxCNngBYc8 /TIvF+UVJhNdbWeazHDTq1cYJsnDu5xUIRsJUdlh5gNmsa3wcZVGQJXiXG3GpVfH8Wlh i2MP3DcPdcad9q1rzucFPv5Eu1NTzP2hEv+3Il8G4EXdhyb2NZD6gyLnp6Ze/xoDlQYH R9CA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694502767; x=1695107567; 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=JMOmibQujFknNAxH7Ym9Tku/lEKYtvQAIZKWdBjMklY=; b=q/aZbeLFJYPoEik5Ghmb2WH0IS4tYPB57FoEy4YYIco4dT/QDLGFuM4E1uJtP3J0di vV1+IVGjhYVq0wzyFOq4ztro7zuiPrLIU3yQt587MvRSGkKxRTqo2EGfMmMCxrX/9kHB 7FsEyvGrrw2FGfRQY6YZtMTwj2dDLFrCdSejsXhRvrUJN+wk524fXPyAa0LtlzTvtPT0 k/wUBCph7H+yKJwTI+NNYwg+M0sVfSP6jTxeKyclxkYsFCv27aLDe3LA9k+kM7utBu52 JEwU7jviyHVxczJ8oHU6WUckgHwTSgYpuq6qeIBAsKaacqOEYJS6SWFUSGGoPxB8Th1n WD6A== X-Gm-Message-State: AOJu0Yzl4ShPA3lG+tKoFjbKw6VxO0C+ytuikxoua/XwQHPs+2G44U0M MxQ3LfeumnIfbe09k0t6HvBEnQ== X-Google-Smtp-Source: AGHT+IH9FrAg5DgPST8SwMrRgrR4JzLQfYkW8fjD2n0w1oezSiZPAPZbCwUwrfXHEyRUZDAin5sfmQ== X-Received: by 2002:a05:6a21:66c5:b0:137:fa5:8519 with SMTP id ze5-20020a056a2166c500b001370fa58519mr10389170pzb.31.1694502766798; Tue, 12 Sep 2023 00:12:46 -0700 (PDT) From: Akihiko Odaki To: Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Mikhail Tyutin , Aleksandr Anenkov , qemu-devel@nongnu.org, Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Maydell , Brian Cain , Song Gao , Xiaojuan Yang , Laurent Vivier , "Edgar E. Iglesias" , Daniel Henrique Barboza , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , David Gibson , Greg Kurz , Nicholas Piggin , Palmer Dabbelt , Alistair Francis , Bin Meng , Weiwei Li , Liu Zhiwei , Richard Henderson , David Hildenbrand , Ilya Leoshkevich , Thomas Huth , qemu-arm@nongnu.org (open list:ARM TCG CPUs), qemu-ppc@nongnu.org (open list:PowerPC TCG CPUs), qemu-riscv@nongnu.org (open list:RISC-V TCG CPUs), qemu-s390x@nongnu.org (open list:S390 TCG CPUs) Subject: [PATCH v7 08/18] gdbstub: Use GDBFeature for gdb_register_coprocessor Date: Tue, 12 Sep 2023 16:11:54 +0900 Message-ID: <20230912071206.30751-9-akihiko.odaki@daynix.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230912071206.30751-1-akihiko.odaki@daynix.com> References: <20230912071206.30751-1-akihiko.odaki@daynix.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=2607:f8b0:4864:20::435; envelope-from=akihiko.odaki@daynix.com; helo=mail-pf1-x435.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @daynix-com.20230601.gappssmtp.com) X-ZM-MESSAGEID: 1694502914915100010 This is a tree-wide change to introduce GDBFeature parameter to gdb_register_coprocessor(). The new parameter just replaces num_regs and xml parameters for now. GDBFeature will be utilized to simplify XML lookup in a following change. Signed-off-by: Akihiko Odaki Acked-by: Alex Benn=C3=A9e --- include/exec/gdbstub.h | 2 +- gdbstub/gdbstub.c | 13 +++++++------ target/arm/gdbstub.c | 34 ++++++++++++++++++---------------- target/hexagon/cpu.c | 3 +-- target/loongarch/gdbstub.c | 2 +- target/m68k/helper.c | 6 +++--- target/microblaze/cpu.c | 5 +++-- target/ppc/gdbstub.c | 11 ++++++----- target/riscv/gdbstub.c | 18 ++++++++++-------- target/s390x/gdbstub.c | 28 +++++++--------------------- 10 files changed, 57 insertions(+), 65 deletions(-) diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index d9ef2ccbff..5525eea090 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -37,7 +37,7 @@ typedef int (*gdb_set_reg_cb)(CPUArchState *env, uint8_t = *buf, int reg); */ void gdb_register_coprocessor(CPUState *cpu, gdb_get_reg_cb get_reg, gdb_set_reg_cb set_r= eg, - int num_regs, const char *xml, int g_pos); + const GDBFeature *feature, int g_pos); =20 /** * gdbserver_start: start the gdb server diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c index b7bb252908..a30ffdd6b8 100644 --- a/gdbstub/gdbstub.c +++ b/gdbstub/gdbstub.c @@ -532,7 +532,7 @@ static int gdb_write_register(CPUState *cpu, uint8_t *m= em_buf, int reg) =20 void gdb_register_coprocessor(CPUState *cpu, gdb_get_reg_cb get_reg, gdb_set_reg_cb set_r= eg, - int num_regs, const char *xml, int g_pos) + const GDBFeature *feature, int g_pos) { GDBRegisterState *s; guint i; @@ -541,7 +541,7 @@ void gdb_register_coprocessor(CPUState *cpu, for (i =3D 0; i < cpu->gdb_regs->len; i++) { /* Check for duplicates. */ s =3D &g_array_index(cpu->gdb_regs, GDBRegisterState, i); - if (strcmp(s->xml, xml) =3D=3D 0) + if (strcmp(s->xml, feature->xmlname) =3D=3D 0) return; } } else { @@ -552,17 +552,18 @@ void gdb_register_coprocessor(CPUState *cpu, g_array_set_size(cpu->gdb_regs, i + 1); s =3D &g_array_index(cpu->gdb_regs, GDBRegisterState, i); s->base_reg =3D cpu->gdb_num_regs; - s->num_regs =3D num_regs; + s->num_regs =3D feature->num_regs; s->get_reg =3D get_reg; s->set_reg =3D set_reg; - s->xml =3D xml; + s->xml =3D feature->xml; =20 /* Add to end of list. */ - cpu->gdb_num_regs +=3D num_regs; + cpu->gdb_num_regs +=3D feature->num_regs; if (g_pos) { if (g_pos !=3D s->base_reg) { error_report("Error: Bad gdb register numbering for '%s', " - "expected %d got %d", xml, g_pos, s->base_reg); + "expected %d got %d", feature->xml, + g_pos, s->base_reg); } else { cpu->gdb_num_g_regs =3D cpu->gdb_num_regs; } diff --git a/target/arm/gdbstub.c b/target/arm/gdbstub.c index fc0aa6f235..99040e0c4c 100644 --- a/target/arm/gdbstub.c +++ b/target/arm/gdbstub.c @@ -472,14 +472,14 @@ void arm_cpu_register_gdb_regs_for_features(ARMCPU *c= pu) */ #ifdef TARGET_AARCH64 if (isar_feature_aa64_sve(&cpu->isar)) { - int nreg =3D arm_gen_dynamic_svereg_feature(cs)->num_regs; + GDBFeature *feature =3D arm_gen_dynamic_svereg_feature(cs); gdb_register_coprocessor(cs, aarch64_gdb_get_sve_reg, - aarch64_gdb_set_sve_reg, nreg, - "sve-registers.xml", 0); + aarch64_gdb_set_sve_reg, feature, 0); } else { gdb_register_coprocessor(cs, aarch64_gdb_get_fpu_reg, aarch64_gdb_set_fpu_reg, - 34, "aarch64-fpu.xml", 0); + gdb_find_static_feature("aarch64-fpu.= xml"), + 0); } /* * Note that we report pauth information via the feature name @@ -490,19 +490,22 @@ void arm_cpu_register_gdb_regs_for_features(ARMCPU *c= pu) if (isar_feature_aa64_pauth(&cpu->isar)) { gdb_register_coprocessor(cs, aarch64_gdb_get_pauth_reg, aarch64_gdb_set_pauth_reg, - 4, "aarch64-pauth.xml", 0); + gdb_find_static_feature("aarch64-paut= h.xml"), + 0); } #endif } else { if (arm_feature(env, ARM_FEATURE_NEON)) { gdb_register_coprocessor(cs, vfp_gdb_get_reg, vfp_gdb_set_reg, - 49, "arm-neon.xml", 0); + gdb_find_static_feature("arm-neon.xml= "), + 0); } else if (cpu_isar_feature(aa32_simd_r32, cpu)) { gdb_register_coprocessor(cs, vfp_gdb_get_reg, vfp_gdb_set_reg, - 33, "arm-vfp3.xml", 0); + gdb_find_static_feature("arm-vfp3.xml= "), + 0); } else if (cpu_isar_feature(aa32_vfp_simd, cpu)) { gdb_register_coprocessor(cs, vfp_gdb_get_reg, vfp_gdb_set_reg, - 17, "arm-vfp.xml", 0); + gdb_find_static_feature("arm-vfp.xml"= ), 0); } if (!arm_feature(env, ARM_FEATURE_M)) { /* @@ -510,29 +513,28 @@ void arm_cpu_register_gdb_regs_for_features(ARMCPU *c= pu) * expose to gdb. */ gdb_register_coprocessor(cs, vfp_gdb_get_sysreg, vfp_gdb_set_s= ysreg, - 2, "arm-vfp-sysregs.xml", 0); + gdb_find_static_feature("arm-vfp-sysr= egs.xml"), + 0); } } if (cpu_isar_feature(aa32_mve, cpu) && tcg_enabled()) { gdb_register_coprocessor(cs, mve_gdb_get_reg, mve_gdb_set_reg, - 1, "arm-m-profile-mve.xml", 0); + gdb_find_static_feature("arm-m-profile-mv= e.xml"), + 0); } gdb_register_coprocessor(cs, arm_gdb_get_sysreg, arm_gdb_set_sysreg, - arm_gen_dynamic_sysreg_feature(cs)->num_regs, - "system-registers.xml", 0); + arm_gen_dynamic_sysreg_feature(cs), 0); =20 #ifdef CONFIG_TCG if (arm_feature(env, ARM_FEATURE_M) && tcg_enabled()) { gdb_register_coprocessor(cs, arm_gdb_get_m_systemreg, arm_gdb_set_m_systemreg, - arm_gen_dynamic_m_systemreg_feature(cs)->num_regs, - "arm-m-system.xml", 0); + arm_gen_dynamic_m_systemreg_feature(cs), 0); #ifndef CONFIG_USER_ONLY if (arm_feature(env, ARM_FEATURE_M_SECURITY)) { gdb_register_coprocessor(cs, arm_gdb_get_m_secextreg, arm_gdb_set_m_secextreg, - arm_gen_dynamic_m_secextreg_feature(cs)->num_regs, - "arm-m-secext.xml", 0); + arm_gen_dynamic_m_secextreg_feature(cs), 0); } #endif } diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c index b54162cbeb..6732efc5de 100644 --- a/target/hexagon/cpu.c +++ b/target/hexagon/cpu.c @@ -342,8 +342,7 @@ static void hexagon_cpu_realize(DeviceState *dev, Error= **errp) =20 gdb_register_coprocessor(cs, hexagon_hvx_gdb_read_register, hexagon_hvx_gdb_write_register, - NUM_VREGS + NUM_QREGS, - "hexagon-hvx.xml", 0); + gdb_find_static_feature("hexagon-hvx.xml"), 0= ); =20 qemu_init_vcpu(cs); cpu_reset(cs); diff --git a/target/loongarch/gdbstub.c b/target/loongarch/gdbstub.c index b09804b62f..e04742c202 100644 --- a/target/loongarch/gdbstub.c +++ b/target/loongarch/gdbstub.c @@ -117,5 +117,5 @@ static int loongarch_gdb_set_fpu(CPULoongArchState *env, void loongarch_cpu_register_gdb_regs_for_features(CPUState *cs) { gdb_register_coprocessor(cs, loongarch_gdb_get_fpu, loongarch_gdb_set_= fpu, - 41, "loongarch-fpu.xml", 0); + gdb_find_static_feature("loongarch-fpu.xml"),= 0); } diff --git a/target/m68k/helper.c b/target/m68k/helper.c index 0a1544cd68..675f2dcd5a 100644 --- a/target/m68k/helper.c +++ b/target/m68k/helper.c @@ -152,10 +152,10 @@ void m68k_cpu_init_gdb(M68kCPU *cpu) =20 if (m68k_feature(env, M68K_FEATURE_CF_FPU)) { gdb_register_coprocessor(cs, cf_fpu_gdb_get_reg, cf_fpu_gdb_set_re= g, - 11, "cf-fp.xml", 18); + gdb_find_static_feature("cf-fp.xml"), 18); } else if (m68k_feature(env, M68K_FEATURE_FPU)) { - gdb_register_coprocessor(cs, m68k_fpu_gdb_get_reg, - m68k_fpu_gdb_set_reg, 11, "m68k-fp.xml", = 18); + gdb_register_coprocessor(cs, m68k_fpu_gdb_get_reg, m68k_fpu_gdb_se= t_reg, + gdb_find_static_feature("m68k-fp.xml"), 1= 8); } /* TODO: Add [E]MAC registers. */ } diff --git a/target/microblaze/cpu.c b/target/microblaze/cpu.c index 47f37c2519..c804622ab9 100644 --- a/target/microblaze/cpu.c +++ b/target/microblaze/cpu.c @@ -298,8 +298,9 @@ static void mb_cpu_initfn(Object *obj) =20 cpu_set_cpustate_pointers(cpu); gdb_register_coprocessor(CPU(cpu), mb_cpu_gdb_read_stack_protect, - mb_cpu_gdb_write_stack_protect, 2, - "microblaze-stack-protect.xml", 0); + mb_cpu_gdb_write_stack_protect, + gdb_find_static_feature("microblaze-stack-pro= tect.xml"), + 0); =20 set_float_rounding_mode(float_round_nearest_even, &env->fp_status); =20 diff --git a/target/ppc/gdbstub.c b/target/ppc/gdbstub.c index 43de40ac36..9f2aad7aa9 100644 --- a/target/ppc/gdbstub.c +++ b/target/ppc/gdbstub.c @@ -567,22 +567,23 @@ void ppc_gdb_init(CPUState *cs, PowerPCCPUClass *pcc) { if (pcc->insns_flags & PPC_FLOAT) { gdb_register_coprocessor(cs, gdb_get_float_reg, gdb_set_float_reg, - 33, "power-fpu.xml", 0); + gdb_find_static_feature("power-fpu.xml"),= 0); } if (pcc->insns_flags & PPC_ALTIVEC) { gdb_register_coprocessor(cs, gdb_get_avr_reg, gdb_set_avr_reg, - 34, "power-altivec.xml", 0); + gdb_find_static_feature("power-altivec.xm= l"), + 0); } if (pcc->insns_flags & PPC_SPE) { gdb_register_coprocessor(cs, gdb_get_spe_reg, gdb_set_spe_reg, - 34, "power-spe.xml", 0); + gdb_find_static_feature("power-spe.xml"),= 0); } if (pcc->insns_flags2 & PPC2_VSX) { gdb_register_coprocessor(cs, gdb_get_vsx_reg, gdb_set_vsx_reg, - 32, "power-vsx.xml", 0); + gdb_find_static_feature("power-vsx.xml"),= 0); } #ifndef CONFIG_USER_ONLY gdb_register_coprocessor(cs, gdb_get_spr_reg, gdb_set_spr_reg, - pcc->gdb_spr.num_regs, "power-spr.xml", 0); + &pcc->gdb_spr, 0); #endif } diff --git a/target/riscv/gdbstub.c b/target/riscv/gdbstub.c index cdae406751..d4f9eb1516 100644 --- a/target/riscv/gdbstub.c +++ b/target/riscv/gdbstub.c @@ -305,28 +305,31 @@ void riscv_cpu_register_gdb_regs_for_features(CPUStat= e *cs) CPURISCVState *env =3D &cpu->env; if (env->misa_ext & RVD) { gdb_register_coprocessor(cs, riscv_gdb_get_fpu, riscv_gdb_set_fpu, - 32, "riscv-64bit-fpu.xml", 0); + gdb_find_static_feature("riscv-64bit-fpu.= xml"), + 0); } else if (env->misa_ext & RVF) { gdb_register_coprocessor(cs, riscv_gdb_get_fpu, riscv_gdb_set_fpu, - 32, "riscv-32bit-fpu.xml", 0); + gdb_find_static_feature("riscv-32bit-fpu.= xml"), + 0); } if (env->misa_ext & RVV) { gdb_register_coprocessor(cs, riscv_gdb_get_vector, riscv_gdb_set_vector, - ricsv_gen_dynamic_vector_feature(cs)->num= _regs, - "riscv-vector.xml", 0); + ricsv_gen_dynamic_vector_feature(cs), 0); } switch (env->misa_mxl_max) { case MXL_RV32: gdb_register_coprocessor(cs, riscv_gdb_get_virtual, riscv_gdb_set_virtual, - 1, "riscv-32bit-virtual.xml", 0); + gdb_find_static_feature("riscv-32bit-virt= ual.xml"), + 0); break; case MXL_RV64: case MXL_RV128: gdb_register_coprocessor(cs, riscv_gdb_get_virtual, riscv_gdb_set_virtual, - 1, "riscv-64bit-virtual.xml", 0); + gdb_find_static_feature("riscv-64bit-virt= ual.xml"), + 0); break; default: g_assert_not_reached(); @@ -334,7 +337,6 @@ void riscv_cpu_register_gdb_regs_for_features(CPUState = *cs) =20 if (cpu->cfg.ext_icsr) { gdb_register_coprocessor(cs, riscv_gdb_get_csr, riscv_gdb_set_csr, - riscv_gen_dynamic_csr_feature(cs)->num_re= gs, - "riscv-csr.xml", 0); + riscv_gen_dynamic_csr_feature(cs), 0); } } diff --git a/target/s390x/gdbstub.c b/target/s390x/gdbstub.c index 6fbfd41bc8..02c388dc32 100644 --- a/target/s390x/gdbstub.c +++ b/target/s390x/gdbstub.c @@ -69,8 +69,6 @@ int s390_cpu_gdb_write_register(CPUState *cs, uint8_t *me= m_buf, int n) /* the values represent the positions in s390-acr.xml */ #define S390_A0_REGNUM 0 #define S390_A15_REGNUM 15 -/* total number of registers in s390-acr.xml */ -#define S390_NUM_AC_REGS 16 =20 static int cpu_read_ac_reg(CPUS390XState *env, GByteArray *buf, int n) { @@ -98,8 +96,6 @@ static int cpu_write_ac_reg(CPUS390XState *env, uint8_t *= mem_buf, int n) #define S390_FPC_REGNUM 0 #define S390_F0_REGNUM 1 #define S390_F15_REGNUM 16 -/* total number of registers in s390-fpr.xml */ -#define S390_NUM_FP_REGS 17 =20 static int cpu_read_fp_reg(CPUS390XState *env, GByteArray *buf, int n) { @@ -132,8 +128,6 @@ static int cpu_write_fp_reg(CPUS390XState *env, uint8_t= *mem_buf, int n) #define S390_V15L_REGNUM 15 #define S390_V16_REGNUM 16 #define S390_V31_REGNUM 31 -/* total number of registers in s390-vx.xml */ -#define S390_NUM_VREGS 32 =20 static int cpu_read_vreg(CPUS390XState *env, GByteArray *buf, int n) { @@ -172,8 +166,6 @@ static int cpu_write_vreg(CPUS390XState *env, uint8_t *= mem_buf, int n) /* the values represent the positions in s390-cr.xml */ #define S390_C0_REGNUM 0 #define S390_C15_REGNUM 15 -/* total number of registers in s390-cr.xml */ -#define S390_NUM_C_REGS 16 =20 #ifndef CONFIG_USER_ONLY static int cpu_read_c_reg(CPUS390XState *env, GByteArray *buf, int n) @@ -206,8 +198,6 @@ static int cpu_write_c_reg(CPUS390XState *env, uint8_t = *mem_buf, int n) #define S390_VIRT_CPUTM_REGNUM 1 #define S390_VIRT_BEA_REGNUM 2 #define S390_VIRT_PREFIX_REGNUM 3 -/* total number of registers in s390-virt.xml */ -#define S390_NUM_VIRT_REGS 4 =20 static int cpu_read_virt_reg(CPUS390XState *env, GByteArray *mem_buf, int = n) { @@ -254,8 +244,6 @@ static int cpu_write_virt_reg(CPUS390XState *env, uint8= _t *mem_buf, int n) #define S390_VIRT_KVM_PFT_REGNUM 1 #define S390_VIRT_KVM_PFS_REGNUM 2 #define S390_VIRT_KVM_PFC_REGNUM 3 -/* total number of registers in s390-virt-kvm.xml */ -#define S390_NUM_VIRT_KVM_REGS 4 =20 static int cpu_read_virt_kvm_reg(CPUS390XState *env, GByteArray *mem_buf, = int n) { @@ -303,8 +291,6 @@ static int cpu_write_virt_kvm_reg(CPUS390XState *env, u= int8_t *mem_buf, int n) #define S390_GS_GSD_REGNUM 1 #define S390_GS_GSSM_REGNUM 2 #define S390_GS_GSEPLA_REGNUM 3 -/* total number of registers in s390-gs.xml */ -#define S390_NUM_GS_REGS 4 =20 static int cpu_read_gs_reg(CPUS390XState *env, GByteArray *buf, int n) { @@ -322,33 +308,33 @@ void s390_cpu_gdb_init(CPUState *cs) { gdb_register_coprocessor(cs, cpu_read_ac_reg, cpu_write_ac_reg, - S390_NUM_AC_REGS, "s390-acr.xml", 0); + gdb_find_static_feature("s390-acr.xml"), 0); =20 gdb_register_coprocessor(cs, cpu_read_fp_reg, cpu_write_fp_reg, - S390_NUM_FP_REGS, "s390-fpr.xml", 0); + gdb_find_static_feature("s390-fpr.xml"), 0); =20 gdb_register_coprocessor(cs, cpu_read_vreg, cpu_write_vreg, - S390_NUM_VREGS, "s390-vx.xml", 0); + gdb_find_static_feature("s390-vx.xml"), 0); =20 gdb_register_coprocessor(cs, cpu_read_gs_reg, cpu_write_gs_reg, - S390_NUM_GS_REGS, "s390-gs.xml", 0); + gdb_find_static_feature("s390-gs.xml"), 0); =20 #ifndef CONFIG_USER_ONLY gdb_register_coprocessor(cs, cpu_read_c_reg, cpu_write_c_reg, - S390_NUM_C_REGS, "s390-cr.xml", 0); + gdb_find_static_feature("s390-cr.xml"), 0); =20 gdb_register_coprocessor(cs, cpu_read_virt_reg, cpu_write_virt_reg, - S390_NUM_VIRT_REGS, "s390-virt.xml", 0); + gdb_find_static_feature("s390-virt.xml"), 0); =20 if (kvm_enabled()) { gdb_register_coprocessor(cs, cpu_read_virt_kvm_reg, cpu_write_virt_kvm_reg, - S390_NUM_VIRT_KVM_REGS, "s390-virt-kvm.xm= l", + gdb_find_static_feature("s390-virt-kvm.xm= l"), 0); } #endif --=20 2.42.0 From nobody Fri May 10 19:36:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1694503011; cv=none; d=zohomail.com; s=zohoarc; b=DKoCsRRsPpFNppHd3yDXN6lVGcqN/YkuJtqqN66rE/BVXlMKdIkauiJ4bC8TmJbbHP1uCpqIqwBHLG5vqJ+zTzQAAOTVVPD3CMii8wS+ygNtQrHIN6TkGrONEP1C3+ha6i7LzXPAmjw04lNg8EHcRP5ji9GF/TIC3hxYblnZ9mQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1694503011; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject; bh=t7BoVj8YCjLAGwVUCL1fmwUCD+gEibvnpmUSo+oMN5o=; b=EKobNb5+jrXSgrFl0Mfv3FWkvaSnI3o4AA8KO1PkXHkgDrKblTlBWs5YpvANI2sDXEFRmabcOWO5vkPctEyirQuTIGeNT8su/bIuDGHki01opXeeTknhkLp2dEE87djw3nJMM6P9wiVTpcMA1bTuVWdo2hJDqbT3yzxZNfCrJeE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1694503011025455.21221173473873; Tue, 12 Sep 2023 00:16:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qfxZu-0002l3-E5; Tue, 12 Sep 2023 03:12:55 -0400 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 1qfxZs-0002kS-Vr for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:12:52 -0400 Received: from mail-ot1-x32a.google.com ([2607:f8b0:4864:20::32a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qfxZp-0006bX-W1 for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:12:52 -0400 Received: by mail-ot1-x32a.google.com with SMTP id 46e09a7af769-6bf2427b947so3415276a34.3 for ; Tue, 12 Sep 2023 00:12:49 -0700 (PDT) Received: from alarm.flets-east.jp ([2400:4050:a840:1e00:78d2:b862:10a7:d486]) by smtp.gmail.com with ESMTPSA id f13-20020aa78b0d000000b0068be348e35fsm6647495pfd.166.2023.09.12.00.12.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Sep 2023 00:12:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1694502769; x=1695107569; 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=t7BoVj8YCjLAGwVUCL1fmwUCD+gEibvnpmUSo+oMN5o=; b=W+bLDbQfNk3J5RluPkblyktxp3YlTUn1pKp7NMW3JswSvudFBN8vbucEcAJNWrVKYP SalbfDVqJIwKgKyjp8xh+RSLRqK/XRLEu7M18/soAvZXIe52QdYdV2sijn7y7el3WAGV wQEKoxchyRKUHdDjq9VdSwvPiWXwkwKW3AfG9MdVwUP9TCf6US+FjzwO/yOocWMizhG4 k3QJtIMBd9aWwpxMzdqB2xD2bdqM9zUBoaieXSepFZTn25Gbs7Yu2FNNIabEdcotfen6 nnMx7MLy5tyWIo2xG1EhAvhncL1h0pWXC+GU+YhyRThybOrGwPKe+rGMBDz3csITAXcn xmNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694502769; x=1695107569; 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=t7BoVj8YCjLAGwVUCL1fmwUCD+gEibvnpmUSo+oMN5o=; b=K3UCSE6FQZDmELcxpEk1BJxgHX2q3ASXmNH02zYpjOzVXm3ogMfSRWriallNARXWmF fOT6WHUfRFDDJE1x7YBGlvRKiDM0jeM+rmtlJ27P89JjN4SFjyT+HBHVY7zPbc8Po65X I56XEPxViWeL4BxvlQDAXtvU7nEU4lC8LbFjfGUHEb+oAY1DbDh9wpm3j/ybAb8tVK25 4lZAGc8QMHzBdWnjikdATYu5az/363AjsP4fDy52gsYxM/ZQLnETTOpa0tP1C2oOjjUg 8IXp4MH9jJIOzgDQLYLk/lO59ixuHCotS+QMDRJ46MdvIKJq7H8EZkr79an4KCYa3Q4o AZWw== X-Gm-Message-State: AOJu0Yyi5CBfVhSa1+B1/M14lUYW/tDyTdF8onG5cAk0w8m6jaA/4xNO e615wALa0W88cQkhAJTUuvK/pA== X-Google-Smtp-Source: AGHT+IEqzwcamTJ9CDOa5RRYBnik1DgXAOkZfNuN+FGLw5acECY+KHTM7XrJnUj3ZpsrsznmKdu93w== X-Received: by 2002:a05:6830:16c1:b0:6b9:c49f:1af7 with SMTP id l1-20020a05683016c100b006b9c49f1af7mr11374170otr.20.1694502768973; Tue, 12 Sep 2023 00:12:48 -0700 (PDT) From: Akihiko Odaki To: Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Mikhail Tyutin , Aleksandr Anenkov , qemu-devel@nongnu.org, Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v7 09/18] gdbstub: Use GDBFeature for GDBRegisterState Date: Tue, 12 Sep 2023 16:11:55 +0900 Message-ID: <20230912071206.30751-10-akihiko.odaki@daynix.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230912071206.30751-1-akihiko.odaki@daynix.com> References: <20230912071206.30751-1-akihiko.odaki@daynix.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=2607:f8b0:4864:20::32a; envelope-from=akihiko.odaki@daynix.com; helo=mail-ot1-x32a.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @daynix-com.20230601.gappssmtp.com) X-ZM-MESSAGEID: 1694503012933100003 Content-Type: text/plain; charset="utf-8" Simplify GDBRegisterState by replacing num_regs and xml members with one member that points to GDBFeature. Signed-off-by: Akihiko Odaki --- gdbstub/gdbstub.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c index a30ffdd6b8..7554318118 100644 --- a/gdbstub/gdbstub.c +++ b/gdbstub/gdbstub.c @@ -47,10 +47,9 @@ =20 typedef struct GDBRegisterState { int base_reg; - int num_regs; gdb_get_reg_cb get_reg; gdb_set_reg_cb set_reg; - const char *xml; + const GDBFeature *feature; } GDBRegisterState; =20 GDBState gdbserver_state; @@ -390,7 +389,7 @@ static const char *get_feature_xml(const char *p, const= char **newp, g_ptr_array_add( xml, g_markup_printf_escaped("", - r->xml)); + r->feature->xmlname)); } g_ptr_array_add(xml, g_strdup("")); g_ptr_array_add(xml, NULL); @@ -504,7 +503,7 @@ static int gdb_read_register(CPUState *cpu, GByteArray = *buf, int reg) =20 for (guint i =3D 0; i < cpu->gdb_regs->len; i++) { r =3D &g_array_index(cpu->gdb_regs, GDBRegisterState, i); - if (r->base_reg <=3D reg && reg < r->base_reg + r->num_regs) { + if (r->base_reg <=3D reg && reg < r->base_reg + r->feature->num_re= gs) { return r->get_reg(env, buf, reg - r->base_reg); } } @@ -523,7 +522,7 @@ static int gdb_write_register(CPUState *cpu, uint8_t *m= em_buf, int reg) =20 for (guint i =3D 0; i < cpu->gdb_regs->len; i++) { r =3D &g_array_index(cpu->gdb_regs, GDBRegisterState, i); - if (r->base_reg <=3D reg && reg < r->base_reg + r->num_regs) { + if (r->base_reg <=3D reg && reg < r->base_reg + r->feature->num_re= gs) { return r->set_reg(env, mem_buf, reg - r->base_reg); } } @@ -541,7 +540,7 @@ void gdb_register_coprocessor(CPUState *cpu, for (i =3D 0; i < cpu->gdb_regs->len; i++) { /* Check for duplicates. */ s =3D &g_array_index(cpu->gdb_regs, GDBRegisterState, i); - if (strcmp(s->xml, feature->xmlname) =3D=3D 0) + if (s->feature =3D=3D feature) return; } } else { @@ -552,10 +551,9 @@ void gdb_register_coprocessor(CPUState *cpu, g_array_set_size(cpu->gdb_regs, i + 1); s =3D &g_array_index(cpu->gdb_regs, GDBRegisterState, i); s->base_reg =3D cpu->gdb_num_regs; - s->num_regs =3D feature->num_regs; s->get_reg =3D get_reg; s->set_reg =3D set_reg; - s->xml =3D feature->xml; + s->feature =3D feature; =20 /* Add to end of list. */ cpu->gdb_num_regs +=3D feature->num_regs; --=20 2.42.0 From nobody Fri May 10 19:36:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1694502931; cv=none; d=zohomail.com; s=zohoarc; b=CSq+y3J7yyjQAruokIuDs4xtrQYoUoJk+QMA1h2b3DkG4pftbMrqS74xf0THeE4Vdlr/h8sqZ8frQzY2lbRu9dE4OZlqk4Q1kOYnV4yBMCX3nxT3ZmNRJr6V45R/ZRzi+IC6ZgD+EuHUTWDtOajr3kUYXrR8uCsQWEOav26aNPA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1694502931; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject; bh=HIHlVenx/RhzjGmmo1wY84kTXKwuVoMzutK7Eoq9w/g=; b=BSvMGEpSrHm/7P6CD2kI8hTcKEoNSKy8rGz/1ZpkfKJ1mv6kzGdL/gZptFf7AybAyhOhDTnTXc9cK84IvL5c3KPJYNZOoBLv0XjJkM8ingEym0Lef5aIt2l9EXidk6gU3PgUbVojCldryqmxZRVjRMtg99hiSmgneer54ZUHUw4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1694502931103177.26283981608026; Tue, 12 Sep 2023 00:15:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qfxZx-0002vu-FE; Tue, 12 Sep 2023 03:12:57 -0400 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 1qfxZu-0002l5-HB for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:12:55 -0400 Received: from mail-pf1-x429.google.com ([2607:f8b0:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qfxZs-0006br-Ct for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:12:54 -0400 Received: by mail-pf1-x429.google.com with SMTP id d2e1a72fcca58-68fdcc37827so783040b3a.0 for ; Tue, 12 Sep 2023 00:12:52 -0700 (PDT) Received: from alarm.flets-east.jp ([2400:4050:a840:1e00:78d2:b862:10a7:d486]) by smtp.gmail.com with ESMTPSA id f13-20020aa78b0d000000b0068be348e35fsm6647495pfd.166.2023.09.12.00.12.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Sep 2023 00:12:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1694502771; x=1695107571; 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=HIHlVenx/RhzjGmmo1wY84kTXKwuVoMzutK7Eoq9w/g=; b=MkgvozBV0w15M7RlxfQ/y+PgYdpAZa4O/AfJDulSAHu0Q0CjJqhlLdzc2QoPmZmohN EedhHfaLHV/sdpYYBqwf28lYA5QacdnmxRbGisTxxSRZA90sQvCYA2ZmIAge5Xt8PGX8 M9SZgAxQVZqa/FlZcFqhLqIIWwgP3ntAMIJhwEPOzKsGe4fuYixMCLHlZ85DuEepFSuj aRNnAnEAmDgjQUrzRfdL6EJGeQcfIfHDaBnbZuwrGZnmAxnpIKezNqdgYwLFuA3+86yx 1LzoXi6Dz2IaJRJzv7HeMl0UzjJuOSaPjUgBEyHtzkPiMhnVrCZ5BweHsKA0tgV4n/LG 1/Xg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694502771; x=1695107571; 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=HIHlVenx/RhzjGmmo1wY84kTXKwuVoMzutK7Eoq9w/g=; b=b0ITfGXUyQlbveEKZv+hXDBAuJsKInvbQdZrKeV6byB/sg99S574WS+71nn95qx18Q pqmNZmw4WrtgZu3VmDZeNzfP4Fpe5lMahwlW00k0VXLki1VuIXuwtmlTPjOGstl8X5lK TQAAkgrJYyGqJZtkFZmqw057fH7qActCTwiow1uMGPLt6UYI98d65cFkg6imGIWw8Xmg 7Drqw7sVSoV87OPHgbBtZB6r//Nv3JMrcQyrs1WRycs0dPsQpgSpebPH7M5lpvRDHYDH tfa31X3ojrCar1neXlUF6hPcGybK8gBpg4d5qybtqgLBUC73XU3u/0ry1X1kh5aCUf6C t8Zg== X-Gm-Message-State: AOJu0Yxozq71R5uSN4yzbVwP6Ukg8B17v7Bm8Jz2HSBgmcCIv56jJve2 /iNcEMGZFk5XqBznNbKAgrvU1g== X-Google-Smtp-Source: AGHT+IFMp8ODVfzQihgxiEFbiJIsT1M9zJ/og4jDKx+VwmCwZb+6XHEZxiceGXswwng0NfFxLqTA5g== X-Received: by 2002:a05:6a20:9381:b0:153:4ea6:d12e with SMTP id x1-20020a056a20938100b001534ea6d12emr2431636pzh.17.1694502770982; Tue, 12 Sep 2023 00:12:50 -0700 (PDT) From: Akihiko Odaki To: Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Mikhail Tyutin , Aleksandr Anenkov , qemu-devel@nongnu.org, Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v7 10/18] gdbstub: Simplify XML lookup Date: Tue, 12 Sep 2023 16:11:56 +0900 Message-ID: <20230912071206.30751-11-akihiko.odaki@daynix.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230912071206.30751-1-akihiko.odaki@daynix.com> References: <20230912071206.30751-1-akihiko.odaki@daynix.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=2607:f8b0:4864:20::429; envelope-from=akihiko.odaki@daynix.com; helo=mail-pf1-x429.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @daynix-com.20230601.gappssmtp.com) X-ZM-MESSAGEID: 1694502933247100003 Content-Type: text/plain; charset="utf-8" Now we know all instances of GDBFeature that is used in CPU so we can traverse them to find XML. This removes the need for a CPU-specific lookup function for dynamic XMLs. Signed-off-by: Akihiko Odaki --- gdbstub/gdbstub.c | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c index 7554318118..90dc78832b 100644 --- a/gdbstub/gdbstub.c +++ b/gdbstub/gdbstub.c @@ -352,6 +352,7 @@ static const char *get_feature_xml(const char *p, const= char **newp, { CPUState *cpu =3D gdb_get_first_cpu_in_process(process); CPUClass *cc =3D CPU_GET_CLASS(cpu); + GDBRegisterState *r; size_t len; =20 /* @@ -365,7 +366,6 @@ static const char *get_feature_xml(const char *p, const= char **newp, /* Is it the main target xml? */ if (strncmp(p, "target.xml", len) =3D=3D 0) { if (!process->target_xml) { - GDBRegisterState *r; g_autoptr(GPtrArray) xml =3D g_ptr_array_new_with_free_func(g_= free); =20 g_ptr_array_add( @@ -398,20 +398,15 @@ static const char *get_feature_xml(const char *p, con= st char **newp, } return process->target_xml; } - /* Is it dynamically generated by the target? */ - if (cc->gdb_get_dynamic_xml) { - g_autofree char *xmlname =3D g_strndup(p, len); - const char *xml =3D cc->gdb_get_dynamic_xml(cpu, xmlname); - if (xml) { - return xml; - } + /* Is it the core feature? */ + if (strncmp(p, cc->gdb_core_feature->xmlname, len) =3D=3D 0) { + return cc->gdb_core_feature->xml; } - /* Is it one of the encoded gdb-xml/ files? */ - for (int i =3D 0; gdb_static_features[i].xmlname; i++) { - const char *name =3D gdb_static_features[i].xmlname; - if ((strncmp(name, p, len) =3D=3D 0) && - strlen(name) =3D=3D len) { - return gdb_static_features[i].xml; + /* Is it one of the coprocessor features? */ + for (guint i =3D 0; i < cpu->gdb_regs->len; i++) { + r =3D &g_array_index(cpu->gdb_regs, GDBRegisterState, i); + if (strncmp(p, r->feature->xmlname, len) =3D=3D 0) { + return r->feature->xml; } } =20 --=20 2.42.0 From nobody Fri May 10 19:36:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1694503007; cv=none; d=zohomail.com; s=zohoarc; b=b7TLsOM3fw/jOekuIiMu4RrGHWgI0ZrRALL+LiKiPS4evt9/bV75cLfnlbgYlDBpvnGnSdQkdvHZSIwUXdMyGCtOSqjCuJKtk+LXT+wnA4f1i39W/+/idZFc5SnuvG6DfaISvJg0GuyyCOmVCy+Qjl/9AiU2TCuUxvryVOBuWm0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1694503007; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject; bh=+aU3pt53IRqOP1elGAUjUcGWsMhpBr+2bOKlb7C1dSc=; b=e9dzxkWn5CKWC7/5Wf0n/FyQPbaoclpZY4lrYhnY13UjcpSTsgcfO+Qzq0P+vjp7le0gigu+t15hRkEJDucpltKgASpuxnWQqeX7s9nHdNRj1/axQMCIv4uEVYbIU0ZTFrBCjwXh9OWWtGjC5J2mLsw8eS90OihELN/CuvDCow8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1694503007163831.2037718715779; Tue, 12 Sep 2023 00:16:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qfxa2-00034X-0C; Tue, 12 Sep 2023 03:13:02 -0400 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 1qfxZz-000335-G3 for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:12:59 -0400 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qfxZw-0006cv-U8 for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:12:59 -0400 Received: by mail-pf1-x430.google.com with SMTP id d2e1a72fcca58-68fb5bd8f02so1842160b3a.0 for ; Tue, 12 Sep 2023 00:12:56 -0700 (PDT) Received: from alarm.flets-east.jp ([2400:4050:a840:1e00:78d2:b862:10a7:d486]) by smtp.gmail.com with ESMTPSA id f13-20020aa78b0d000000b0068be348e35fsm6647495pfd.166.2023.09.12.00.12.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Sep 2023 00:12:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1694502775; x=1695107575; 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=+aU3pt53IRqOP1elGAUjUcGWsMhpBr+2bOKlb7C1dSc=; b=ltSRiMtI0OG5Gpyy5hntk9dmu/EgIavi4aKwdNUr9l/2rjt0zfYTuTeUpYQVRaDwvQ VIdT7cEjMBFPc90WC1rqNpdBLi1qKw5CugWgk9+5Oh5z5JfBloico2dAqQfSOEEMyjo9 PQzeFAA7wA+6eE0qIidk3bSFx+59Aa9g8yfqPWgRbz1Bs2UP5NtWcWHsXNp2i64L9NBj Tv6aVV9vT8fJFezVTMMdGX03SYgxYjcyiLWS/JiNPu7/5RZCRma0l9C9+x46+VjGiVwU N0bHbpGjBeoYk1KE6A4U+SU+X8Mjcy1eUpqT/AaIjux6BRbgOsTr3CYxboUoJcxU9Qss 8dsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694502775; x=1695107575; 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=+aU3pt53IRqOP1elGAUjUcGWsMhpBr+2bOKlb7C1dSc=; b=TTbLT3Jj5Kk/vp/ABVegnpycL6TFkgDe2jW0ee2rM8xKHWcsp2a+We6NIYg5wjc1os 3Y8GWgAAfiey1rOIF3Blbov0bHR83en6947lZdjFjC7ywIjV09eR1i0WVqs7SrzRXC/J vjvFpBNicuz3hBJrP+K3wGz5CSJAtpxL57TwgUO8N0oRgZgGub6A9G67E0fCumO56fOA hGZjwEbeO2zdKPKtHUzptuGTfVut3fFmzebRYNCd3HOraPEQiY2ja4628bMBu/7YtE8p TP0kFgzTFE1a2H26B7GEpXlkTUFeMztvyOmf7fr00wf8UBEBTDNADPakjt22iZw9ISQ/ MC1w== X-Gm-Message-State: AOJu0YzfD/5q9HiaakuaMJ62Oa3qF7LG+2hQ+GzZtcOrtc3l8gX1R6AD w5lgEhye4FWHo8/X082oRfL+2g== X-Google-Smtp-Source: AGHT+IEDPshjgKusYpa3x3doNH9zd4sVU82Od8jSWrl9Ew2xkaZ9OV2T5T3rB2/wNe04oJyZ8MNtMQ== X-Received: by 2002:a05:6a20:9489:b0:133:bbe0:2ff1 with SMTP id hs9-20020a056a20948900b00133bbe02ff1mr9449914pzb.44.1694502775648; Tue, 12 Sep 2023 00:12:55 -0700 (PDT) From: Akihiko Odaki To: Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Mikhail Tyutin , Aleksandr Anenkov , qemu-devel@nongnu.org, Akihiko Odaki , Eduardo Habkost , Marcel Apfelbaum , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Yanan Wang , Peter Maydell , Daniel Henrique Barboza , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , David Gibson , Greg Kurz , Nicholas Piggin , Palmer Dabbelt , Alistair Francis , Bin Meng , Weiwei Li , Liu Zhiwei , qemu-arm@nongnu.org (open list:ARM TCG CPUs), qemu-ppc@nongnu.org (open list:PowerPC TCG CPUs), qemu-riscv@nongnu.org (open list:RISC-V TCG CPUs) Subject: [PATCH v7 11/18] hw/core/cpu: Remove gdb_get_dynamic_xml member Date: Tue, 12 Sep 2023 16:11:57 +0900 Message-ID: <20230912071206.30751-12-akihiko.odaki@daynix.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230912071206.30751-1-akihiko.odaki@daynix.com> References: <20230912071206.30751-1-akihiko.odaki@daynix.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=2607:f8b0:4864:20::430; envelope-from=akihiko.odaki@daynix.com; helo=mail-pf1-x430.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @daynix-com.20230601.gappssmtp.com) X-ZM-MESSAGEID: 1694503009103100003 Content-Type: text/plain; charset="utf-8" This function is no longer used. Signed-off-by: Akihiko Odaki --- include/hw/core/cpu.h | 4 ---- target/arm/cpu.h | 6 ------ target/ppc/cpu.h | 1 - target/arm/cpu.c | 1 - target/arm/gdbstub.c | 18 ------------------ target/ppc/cpu_init.c | 3 --- target/ppc/gdbstub.c | 10 ---------- target/riscv/cpu.c | 14 -------------- 8 files changed, 57 deletions(-) diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h index 6feb9bf22e..5799a26541 100644 --- a/include/hw/core/cpu.h +++ b/include/hw/core/cpu.h @@ -133,9 +133,6 @@ struct SysemuCPUOps; * before the insn which triggers a watchpoint rather than after= it. * @gdb_arch_name: Optional callback that returns the architecture name kn= own * to GDB. The caller must free the returned string with g_free. - * @gdb_get_dynamic_xml: Callback to return dynamically generated XML for = the - * gdb stub. Returns a pointer to the XML contents for the specified XML= file - * or NULL if the CPU doesn't have a dynamically generated content for i= t. * @disas_set_info: Setup architecture specific components of disassembly = info * @adjust_watchpoint_address: Perform a target-specific adjustment to an * address before attempting to match it against watchpoints. @@ -166,7 +163,6 @@ struct CPUClass { =20 const GDBFeature *gdb_core_feature; const gchar * (*gdb_arch_name)(CPUState *cpu); - const char * (*gdb_get_dynamic_xml)(CPUState *cpu, const char *xmlname= ); =20 void (*disas_set_info)(CPUState *cpu, disassemble_info *info); =20 diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 7d698d0bf4..f2a669b5a0 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -1135,12 +1135,6 @@ hwaddr arm_cpu_get_phys_page_attrs_debug(CPUState *c= pu, vaddr addr, int arm_cpu_gdb_read_register(CPUState *cpu, GByteArray *buf, int reg); int arm_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg); =20 -/* Returns the dynamically generated XML for the gdb stub. - * Returns a pointer to the XML contents for the specified XML file or NULL - * if the XML name doesn't match the predefined one. - */ -const char *arm_gdb_get_dynamic_xml(CPUState *cpu, const char *xmlname); - int arm_cpu_write_elf64_note(WriteCoreDumpFunction f, CPUState *cs, int cpuid, DumpState *s); int arm_cpu_write_elf32_note(WriteCoreDumpFunction f, CPUState *cs, diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h index 5f251bdffe..3dc6e545e3 100644 --- a/target/ppc/cpu.h +++ b/target/ppc/cpu.h @@ -1382,7 +1382,6 @@ int ppc_cpu_gdb_write_register_apple(CPUState *cpu, u= int8_t *buf, int reg); #ifndef CONFIG_USER_ONLY hwaddr ppc_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr); void ppc_gdb_gen_spr_feature(PowerPCCPU *cpu); -const char *ppc_gdb_get_dynamic_xml(CPUState *cs, const char *xml_name); #endif int ppc64_cpu_write_elf64_note(WriteCoreDumpFunction f, CPUState *cs, int cpuid, DumpState *s); diff --git a/target/arm/cpu.c b/target/arm/cpu.c index bee5dc22a5..4d1f10be42 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -2389,7 +2389,6 @@ static void arm_cpu_class_init(ObjectClass *oc, void = *data) cc->sysemu_ops =3D &arm_sysemu_ops; #endif cc->gdb_arch_name =3D arm_gdb_arch_name; - cc->gdb_get_dynamic_xml =3D arm_gdb_get_dynamic_xml; cc->gdb_stop_before_watchpoint =3D true; cc->disas_set_info =3D arm_disas_set_info; =20 diff --git a/target/arm/gdbstub.c b/target/arm/gdbstub.c index 99040e0c4c..40c3f50c89 100644 --- a/target/arm/gdbstub.c +++ b/target/arm/gdbstub.c @@ -442,24 +442,6 @@ static GDBFeature *arm_gen_dynamic_m_secextreg_feature= (CPUState *cs) #endif #endif /* CONFIG_TCG */ =20 -const char *arm_gdb_get_dynamic_xml(CPUState *cs, const char *xmlname) -{ - ARMCPU *cpu =3D ARM_CPU(cs); - - if (strcmp(xmlname, "system-registers.xml") =3D=3D 0) { - return cpu->dyn_sysreg_feature.desc.xml; - } else if (strcmp(xmlname, "sve-registers.xml") =3D=3D 0) { - return cpu->dyn_svereg_feature.desc.xml; - } else if (strcmp(xmlname, "arm-m-system.xml") =3D=3D 0) { - return cpu->dyn_m_systemreg_feature.desc.xml; -#ifndef CONFIG_USER_ONLY - } else if (strcmp(xmlname, "arm-m-secext.xml") =3D=3D 0) { - return cpu->dyn_m_secextreg_feature.desc.xml; -#endif - } - return NULL; -} - void arm_cpu_register_gdb_regs_for_features(ARMCPU *cpu) { CPUState *cs =3D CPU(cpu); diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c index 938cd2b7e1..a3153c4e9f 100644 --- a/target/ppc/cpu_init.c +++ b/target/ppc/cpu_init.c @@ -7370,9 +7370,6 @@ static void ppc_cpu_class_init(ObjectClass *oc, void = *data) #endif =20 cc->gdb_num_core_regs =3D 71; -#ifndef CONFIG_USER_ONLY - cc->gdb_get_dynamic_xml =3D ppc_gdb_get_dynamic_xml; -#endif #ifdef USE_APPLE_GDB cc->gdb_read_register =3D ppc_cpu_gdb_read_register_apple; cc->gdb_write_register =3D ppc_cpu_gdb_write_register_apple; diff --git a/target/ppc/gdbstub.c b/target/ppc/gdbstub.c index 9f2aad7aa9..5af9a0cbe3 100644 --- a/target/ppc/gdbstub.c +++ b/target/ppc/gdbstub.c @@ -339,16 +339,6 @@ void ppc_gdb_gen_spr_feature(PowerPCCPU *cpu) =20 gdb_feature_builder_end(&builder); } - -const char *ppc_gdb_get_dynamic_xml(CPUState *cs, const char *xml_name) -{ - PowerPCCPUClass *pcc =3D POWERPC_CPU_GET_CLASS(cs); - - if (strcmp(xml_name, "power-spr.xml") =3D=3D 0) { - return pcc->gdb_spr.xml; - } - return NULL; -} #endif =20 #if !defined(CONFIG_USER_ONLY) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 86a477bfc0..e12b6ef7f6 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -1957,19 +1957,6 @@ static const gchar *riscv_gdb_arch_name(CPUState *cs) } } =20 -static const char *riscv_gdb_get_dynamic_xml(CPUState *cs, const char *xml= name) -{ - RISCVCPU *cpu =3D RISCV_CPU(cs); - - if (strcmp(xmlname, "riscv-csr.xml") =3D=3D 0) { - return cpu->dyn_csr_feature.xml; - } else if (strcmp(xmlname, "riscv-vector.xml") =3D=3D 0) { - return cpu->dyn_vreg_feature.xml; - } - - return NULL; -} - #ifndef CONFIG_USER_ONLY static int64_t riscv_get_arch_id(CPUState *cs) { @@ -2147,7 +2134,6 @@ static void riscv_cpu_class_init(ObjectClass *c, void= *data) cc->get_arch_id =3D riscv_get_arch_id; #endif cc->gdb_arch_name =3D riscv_gdb_arch_name; - cc->gdb_get_dynamic_xml =3D riscv_gdb_get_dynamic_xml; cc->tcg_ops =3D &riscv_tcg_ops; =20 object_class_property_add(c, "mvendorid", "uint32", cpu_get_mvendorid, --=20 2.42.0 From nobody Fri May 10 19:36:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1694502902; cv=none; d=zohomail.com; s=zohoarc; b=WIgnA811X++Iao8vCcW0C0Eu100lymKA5F9oBebET30gn6YtgDwPg/IdTcjSdu4viFKKuu6K2VkAKpnY6C3H0nfqpyN8YbdSAfjLMlaQ23HLT0szU89oKTf8C/auXgLqMu50aScE5IOdtnwa4lz6vTsrvf4uNglht1uQ4XvaY3k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1694502902; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject; bh=srXFWAv99pVEzfPpo6Wq1X4hccLz/vqribgIorMXmKI=; b=lLo1eMmEOueVDYpMTBHzETvv/Vf3XfGduZ5ikUpiJSHiW3L33OC1yGX4FAa5DQiVWS//KLCg4gKF0NuSIsT78NbljbYga/bdZQ2LpdnYs56YofySGokdg7p0ceu8PAv5zr2+G8u1F9QYx+FVBdgiE/SZtf1tv2lKApHaXYqlhwA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1694502902047834.3026000621614; Tue, 12 Sep 2023 00:15:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qfxa4-000363-I0; Tue, 12 Sep 2023 03:13:04 -0400 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 1qfxa2-000357-Iy for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:13:02 -0400 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qfxa0-0006dw-6D for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:13:02 -0400 Received: by mail-pf1-x42d.google.com with SMTP id d2e1a72fcca58-68fbd31d9deso1635276b3a.3 for ; Tue, 12 Sep 2023 00:12:59 -0700 (PDT) Received: from alarm.flets-east.jp ([2400:4050:a840:1e00:78d2:b862:10a7:d486]) by smtp.gmail.com with ESMTPSA id f13-20020aa78b0d000000b0068be348e35fsm6647495pfd.166.2023.09.12.00.12.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Sep 2023 00:12:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1694502779; x=1695107579; 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=srXFWAv99pVEzfPpo6Wq1X4hccLz/vqribgIorMXmKI=; b=qbgZbEisEJoO5XkCCQNtt9/FJH4Pw66BOVmBixkdYcGRiY9BpzxFqe3ayup6+gaAvX bbl/hDN7MsfyuEYzty6dqntalakMgy8qEFeSAcnt0sNyMrfsxzF1ZmNF3l+p52SGYrzj m13Ckkkk8uqBMYD0P+5nv7vF/kFf3zzViC84Qvk1rVtkREvcQrSfq2qaBIRz4pgSiBSm MU/e/bEKCzaDf0SV46wiXvE4Qj5WYPOTS6D5WzSYYUh4hfe092sGcN6STQ7+zvygbPYD c+3VfMwcZBCxkSLGqPVdypL2MsEB9KAl1DRIfyFv8N6vfT/IeDGSc+Q/0rzUfh3PGUaf dYyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694502779; x=1695107579; 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=srXFWAv99pVEzfPpo6Wq1X4hccLz/vqribgIorMXmKI=; b=B6aqevxQw7RnOtOiObNHSUSh15Mwybpu6PmC1dl2w1CNGJjM7PGJxJ6uKxCJvIIOgG MwHtgj0SRRiA1Y44JBqHUHiI3omd1c2ZORSYBhWV02UOkYR/68rMvfr0nDrbz/GF3+Kx afGUXt+KkmtnclYXTxIF2urtfs9m7tPLXRpvVV+KzgnXSJBGG5ZSv9EGhHHRKhuwghL5 Rrmj2tzkhIoafFM89SZ+1SNMBrIT2TDOGmuq+CQAuq+kZOWl7QFRye4HN/Envwyihhg/ 9DmYJnO1mc36Ko2sMe6LRmOFuiGPo+GHhd1VeCQ/bdenR7pHmLvARCSdNe901hFXkfIA MO2Q== X-Gm-Message-State: AOJu0Yyn6UzoYHhrlnQI6Mnra/DdHCbmFdOqjYJjPT4wuzAPfYGUC99/ BmvAx2Xbup5bJ0z9dBUImO1Fzg== X-Google-Smtp-Source: AGHT+IEQOLIVOWbtiEEYf65tvy1XH9dMDvgdJed5bWD2EhfxzVUAvNVuhshP3JQ/yUD7+nXJmioyhA== X-Received: by 2002:a05:6a00:24c6:b0:68a:553a:c0da with SMTP id d6-20020a056a0024c600b0068a553ac0damr11180091pfv.24.1694502779029; Tue, 12 Sep 2023 00:12:59 -0700 (PDT) From: Akihiko Odaki To: Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Mikhail Tyutin , Aleksandr Anenkov , qemu-devel@nongnu.org, Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , John Snow , Cleber Rosa , Palmer Dabbelt , Alistair Francis , Bin Meng , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , qemu-riscv@nongnu.org (open list:RISC-V TCG CPUs) Subject: [PATCH v7 12/18] gdbstub: Add members to identify registers to GDBFeature Date: Tue, 12 Sep 2023 16:11:58 +0900 Message-ID: <20230912071206.30751-13-akihiko.odaki@daynix.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230912071206.30751-1-akihiko.odaki@daynix.com> References: <20230912071206.30751-1-akihiko.odaki@daynix.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=2607:f8b0:4864:20::42d; envelope-from=akihiko.odaki@daynix.com; helo=mail-pf1-x42d.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @daynix-com.20230601.gappssmtp.com) X-ZM-MESSAGEID: 1694502904087100003 Content-Type: text/plain; charset="utf-8" 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 --- include/exec/gdbstub.h | 3 +++ gdbstub/gdbstub.c | 10 ++++++++-- target/riscv/gdbstub.c | 4 +--- scripts/feature_to_c.py | 14 +++++++++++++- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index 5525eea090..340ab35d74 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; =20 typedef struct GDBFeatureBuilder { GDBFeature *feature; GPtrArray *xml; + GPtrArray *regs; } GDBFeatureBuilder; =20 =20 diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c index 90dc78832b..60faae8b2b 100644 --- a/gdbstub/gdbstub.c +++ b/gdbstub/gdbstub.c @@ -425,9 +425,10 @@ void gdb_feature_builder_init(GDBFeatureBuilder *build= er, GDBFeature *feature, =20 builder->feature =3D feature; builder->xml =3D g_ptr_array_new(); + builder->regs =3D g_ptr_array_new(); g_ptr_array_add(builder->xml, header); feature->xmlname =3D xmlname; - feature->num_regs =3D 0; + feature->name =3D name; } =20 void gdb_feature_builder_append_tag(const GDBFeatureBuilder *builder, @@ -456,7 +457,9 @@ int gdb_feature_builder_append_reg(const GDBFeatureBuil= der *builder, name, bitsize, type); } =20 - return builder->feature->num_regs++; + g_ptr_array_add(builder->regs, (void *)name); + + return builder->regs->len; } =20 void gdb_feature_builder_end(const GDBFeatureBuilder *builder) @@ -471,6 +474,9 @@ void gdb_feature_builder_end(const GDBFeatureBuilder *b= uilder) } =20 g_ptr_array_free(builder->xml, TRUE); + + builder->feature->num_regs =3D builder->regs->len; + builder->feature->regs =3D (void *)g_ptr_array_free(builder->regs, FAL= SE); } =20 const GDBFeature *gdb_find_static_feature(const char *xmlname) diff --git a/target/riscv/gdbstub.c b/target/riscv/gdbstub.c index d4f9eb1516..a2ec9a3701 100644 --- a/target/riscv/gdbstub.c +++ b/target/riscv/gdbstub.c @@ -240,11 +240,9 @@ static GDBFeature *riscv_gen_dynamic_csr_feature(CPUSt= ate *cs) } predicate =3D csr_ops[i].predicate; if (predicate && (predicate(env, i) =3D=3D RISCV_EXCP_NONE)) { - g_autofree char *dynamic_name =3D NULL; name =3D csr_ops[i].name; if (!name) { - dynamic_name =3D g_strdup_printf("csr%03x", i); - name =3D dynamic_name; + name =3D g_strdup_printf("csr%03x", i); } =20 gdb_feature_builder_append_reg(&builder, name, bitsize, diff --git a/scripts/feature_to_c.py b/scripts/feature_to_c.py index e04d6b2df7..807af0e685 100755 --- 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) =20 + feature_name =3D element.attrib['name'] regnum =3D 0 + regnames =3D [] regnums =3D [] tags =3D ['feature'] for event, element in events: @@ -67,6 +69,7 @@ def writeliteral(indent, bytes): if 'regnum' in element.attrib: regnum =3D int(element.attrib['regnum']) =20 + regnames.append(element.attrib['name']) regnums.append(regnum) regnum +=3D 1 =20 @@ -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}] =3D\n= ') + writeliteral(16, bytes(regname, 'utf-8')) + sys.stdout.write(',\n') + + sys.stdout.write(f' }},\n {num_regs},\n }},\n') =20 sys.stdout.write(' { NULL }\n};\n') --=20 2.42.0 From nobody Fri May 10 19:36:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1694502989; cv=none; d=zohomail.com; s=zohoarc; b=HXPlG924q3dNOjKCa0xEy2azPlZ4rZSu4qWyf9mSOXYS8kshZZcgnYvCetnU4V2YZkE/qO7Pqd6GMOZYDH608w4cG48K9TVjBg5o0gstPoogfJytEFmXAP2MiAd1+o96vxi4O69OrwxQIbxtuC4Xf5wimqsrjNm/Dpg318xGHOw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1694502989; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject; bh=bEKtDuASEWKDvEP+xkUOZezCbwlPMpFkAjXmA+mjC/E=; b=LUwNWamnJpmIYjxvsPVBmJXHKt5EvEsugXPnbr/dMs/vtHDUbrCjiwZn6+C/F6q1Ocv4konOEfP2Q2DxImTUYIAu4KiIXha0u7c4cfxXXnpgAHhLtB/IohTaWr5oVxCrxFX1ObfgAvySxRMYGUt4CYb5i7vj/8QtoJobYdo2U/k= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1694502989888233.30797495370052; Tue, 12 Sep 2023 00:16:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qfxa6-00039f-7a; Tue, 12 Sep 2023 03:13:06 -0400 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 1qfxa4-000366-Ed for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:13:04 -0400 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qfxa2-0006eT-6Q for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:13:04 -0400 Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-68fdcc37827so783129b3a.0 for ; Tue, 12 Sep 2023 00:13:01 -0700 (PDT) Received: from alarm.flets-east.jp ([2400:4050:a840:1e00:78d2:b862:10a7:d486]) by smtp.gmail.com with ESMTPSA id f13-20020aa78b0d000000b0068be348e35fsm6647495pfd.166.2023.09.12.00.12.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Sep 2023 00:13:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1694502781; x=1695107581; 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=bEKtDuASEWKDvEP+xkUOZezCbwlPMpFkAjXmA+mjC/E=; b=r4CMOwG+yuKy6Jx0F6jMaxaYZYDW8pD9lLMFRNNIvQrECuch+DAcmnd/ci6e7www4S s8JUulE/y3z9CdcMxC+Z9mxoVn8FR6qoRZLKJgHEqjVRtERMzq181wY9SqmB0FzCSEeV ILaMXLhwVnKxhgWtj3qCafnF7TVazvDawcaMhpAbvMP7lEiLNEwHd7h3ac3Ocun/Tjyx Dau3AeKduGxL2Crs7uFk2DYB+5WtFo/IP6nTU20cUCgP7uEh/HtHOTHptrB3TcDvXGrV wWSEw7duN2HP5pGUMfk4ydsg+oILfCjmnk+c/1UaKpgABNYg8YoCbjddcYvhJCdogXPN Ek+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694502781; x=1695107581; 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=bEKtDuASEWKDvEP+xkUOZezCbwlPMpFkAjXmA+mjC/E=; b=GJacXXHDhOcsU+247MCX0JM8fytlqMG22xC9ZdBS0YBK1f2MMdzWPqTrySl9hQ1loh 8jJM1NqlCFr0HXT0WXInbID54Aq7C+T1evfi4WvDTfXfZvkCTlnubr6i4nrGLDntkNZY QTroPMPAJBUb6wh8ChytXzkgKzqoOrxPr4EEqIOoMD9i1phACuahL5S3jorbQ/xrmM2X YHybJolIyVDZXtJ6phn9Sb5IwxGsO9Zj6XJydUzhYd1uEr3pciKrm6DNiOgM0iaHFIjp 1be1ig2NDt/NWbWP68hJyRpovOGaMI9SGaZrv7Wlo1dUqB7WVkn9pFaN3p+NGDxRkytG aQzg== X-Gm-Message-State: AOJu0YxWnuhrqYXB8LcJTupLkmNYMlJRpp4WovIJlhLOFohMClH6t1tM U05z221dBBliddwGPOzLtyMKdz47tMkXqyzrhPQ= X-Google-Smtp-Source: AGHT+IGm3JEK1jdqBzv8DJLPHLnpVZ3XigDkMy4s5I4nrD0mkX5tUFyvv8wbBgollAt2MMNBOkO7pQ== X-Received: by 2002:a05:6a20:158a:b0:13f:de94:fb97 with SMTP id h10-20020a056a20158a00b0013fde94fb97mr2185870pzj.27.1694502781090; Tue, 12 Sep 2023 00:13:01 -0700 (PDT) From: Akihiko Odaki To: Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Mikhail Tyutin , Aleksandr Anenkov , qemu-devel@nongnu.org, Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v7 13/18] gdbstub: Expose functions to read registers Date: Tue, 12 Sep 2023 16:11:59 +0900 Message-ID: <20230912071206.30751-14-akihiko.odaki@daynix.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230912071206.30751-1-akihiko.odaki@daynix.com> References: <20230912071206.30751-1-akihiko.odaki@daynix.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=2607:f8b0:4864:20::432; envelope-from=akihiko.odaki@daynix.com; helo=mail-pf1-x432.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @daynix-com.20230601.gappssmtp.com) X-ZM-MESSAGEID: 1694502990442100002 Content-Type: text/plain; charset="utf-8" gdb_find_feature() and gdb_find_feature_register() find registers. gdb_read_register() actually reads registers. Signed-off-by: Akihiko Odaki --- include/exec/gdbstub.h | 5 +++++ gdbstub/gdbstub.c | 50 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index 340ab35d74..e6ba2a2886 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -69,6 +69,11 @@ void gdb_feature_builder_end(const GDBFeatureBuilder *bu= ilder); =20 const GDBFeature *gdb_find_static_feature(const char *xmlname); =20 +int gdb_find_feature(CPUState *cpu, const char *name); +int gdb_find_feature_register(CPUState *cpu, int feature, const char *name= ); + +int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg); + void gdb_set_stop_cpu(CPUState *cpu); =20 /* in gdbstub-xml.c, generated by scripts/feature_to_c.py */ diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c index 60faae8b2b..fc780ae6fe 100644 --- a/gdbstub/gdbstub.c +++ b/gdbstub/gdbstub.c @@ -492,7 +492,55 @@ const GDBFeature *gdb_find_static_feature(const char *= xmlname) g_assert_not_reached(); } =20 -static int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg) +int gdb_find_feature(CPUState *cpu, const char *name) +{ + CPUClass *cc =3D CPU_GET_CLASS(cpu); + GDBRegisterState *r; + + if (!cc->gdb_core_feature) { + return -1; + } + + if (!strcmp(name, cc->gdb_core_feature->name)) { + return 0; + } + + for (guint i =3D 0; i < cpu->gdb_regs->len; i++) { + r =3D &g_array_index(cpu->gdb_regs, GDBRegisterState, i); + if (!strcmp(name, r->feature->name)) { + return i + 1; + } + } + + return -1; +} + +int gdb_find_feature_register(CPUState *cpu, int feature, const char *name) +{ + CPUClass *cc =3D CPU_GET_CLASS(cpu); + const GDBFeature *p; + int base_reg; + + if (feature) { + GDBRegisterState *r =3D + &g_array_index(cpu->gdb_regs, GDBRegisterState, feature - 1); + p =3D r->feature; + base_reg =3D r->base_reg; + } else { + p =3D cc->gdb_core_feature; + base_reg =3D 0; + } + + for (int i =3D 0; i < p->num_regs; i++) { + if (p->regs[i] && !strcmp(name, p->regs[i])) { + return base_reg + i; + } + } + + return -1; +} + +int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg) { CPUClass *cc =3D CPU_GET_CLASS(cpu); CPUArchState *env =3D cpu->env_ptr; --=20 2.42.0 From nobody Fri May 10 19:36:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1694502808; cv=none; d=zohomail.com; s=zohoarc; b=ApdiHaP6sq7cu1FrY3Gp8Y4QHRa2aaoFCIxF6Qg9xghxPuQzeL8f7NeAleRi9sdlPhuy2DrgSSiyD8Z94KkPbpfZJ+LALA9KkuccNp0RVOnjC6xAtcUqTj/TmdWwQ0MBGHpxm/WCM4FMLinyfWTwUOOZPdCbVlKmpgvv5Jn8Lq0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1694502808; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject; bh=742GFhBpf1pg2BKTTUHd5JgdDLCS73N6xC6sRLNFg04=; b=iSnBFTMM+7grq223dF++7z1bIfokKp2rA82SWljkJtXgKXhLFkBSD6kDQLGSJ8MbVeWlC9dZYXfN9m49OKvoE/fO3MzEtYv0jhSQMQa8sg0xLm8RmmDctwiKxCunwdwNKB2SsyAlCvy4j64oChLPgeiTCXIo41kjMyAkg+u1ICA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1694502808127228.76780619954775; Tue, 12 Sep 2023 00:13:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qfxaB-0003Bb-3X; Tue, 12 Sep 2023 03:13:11 -0400 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 1qfxa9-0003B7-EH for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:13:09 -0400 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qfxa6-0006fO-5B for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:13:09 -0400 Received: by mail-pf1-x431.google.com with SMTP id d2e1a72fcca58-68fbb10dec7so1742459b3a.3 for ; Tue, 12 Sep 2023 00:13:05 -0700 (PDT) Received: from alarm.flets-east.jp ([2400:4050:a840:1e00:78d2:b862:10a7:d486]) by smtp.gmail.com with ESMTPSA id f13-20020aa78b0d000000b0068be348e35fsm6647495pfd.166.2023.09.12.00.13.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Sep 2023 00:13:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1694502785; x=1695107585; 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=742GFhBpf1pg2BKTTUHd5JgdDLCS73N6xC6sRLNFg04=; b=0kGpxa3xPDvLo1n9ZnPi4pW6rA0+DLTtaiVsk3VMx+2B96K1L+aLmTuizmWYZFElsN JgJZUBRv8+/F44TREZpkDF6bmgkRYJVae7tM6F7qzwG7plFbttlTXJLcz7YHcrvndvn6 YRw9+mOxnXR1Dj+sXA4unvF50R+Hm3oOLqt2FESCEbfBtQMtTw8ShE33SZ1rK1zvcYkl 9+fs0Ii1TLv8Hx7ra6R6uCjoDh41zhTYUFWVUteUYrvuCksMkHF979ot1rcfB5waTlKL VpqkP8sIU3WXseavrQSf9M08w1NVrYxzozakyZ8RX7usFisNaraDQT4jdwd4NBH6rBjE a5Dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694502785; x=1695107585; 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=742GFhBpf1pg2BKTTUHd5JgdDLCS73N6xC6sRLNFg04=; b=qnNGTRUvnws1p1pxX5g8T4NSn7Ff9F6kHX7+trKQXwGevj2I9poEi9Yf3beqU/8eKQ +wh0/t2qz0OgW6wgy5Hm5+/mg92Yy4TwtRwgnHPBXhMSkYTiSnrSiedOA0UZ3WhzPjB2 U71PlKtYyvHffjRklJGhnbKiinPzsltg5IcS+X+QcGQam8gVIcQGNaMR4Kf31iF0NmVn JxBlB+3DGns2oCdwjJZT9rlphl8QvlmbPLgYO4uXx+EIISD2wxeS3leLMqIlg92EpBwF us9Y0IznxQxfkchUoPN8YQ6yUP+27X/Tao8vYVTBCYb2iesbfjyubTSH+ng0Wf+CzLO+ QIxw== X-Gm-Message-State: AOJu0Yxhn7KZJS5ZRK0uON5TDaXdZ42mheKqzt81UuhP/HdIO+vctBg0 n5DEYZciAo4rm9LES4sQIX8rr+xeQ+QFHq8lYj4= X-Google-Smtp-Source: AGHT+IGq66jeVsH6sSj2LVMrqzLU2ma0yVFfb6+UtSbehYqZavofSKf7LGYoxz7MAYdkWlobnSIi8A== X-Received: by 2002:a05:6a00:1d0e:b0:68f:c215:a825 with SMTP id a14-20020a056a001d0e00b0068fc215a825mr4379036pfx.12.1694502783484; Tue, 12 Sep 2023 00:13:03 -0700 (PDT) From: Akihiko Odaki To: Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Mikhail Tyutin , Aleksandr Anenkov , qemu-devel@nongnu.org, Akihiko Odaki , Eduardo Habkost , Marcel Apfelbaum , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Yanan Wang Subject: [PATCH v7 14/18] cpu: Call plugin hooks only when ready Date: Tue, 12 Sep 2023 16:12:00 +0900 Message-ID: <20230912071206.30751-15-akihiko.odaki@daynix.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230912071206.30751-1-akihiko.odaki@daynix.com> References: <20230912071206.30751-1-akihiko.odaki@daynix.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=2607:f8b0:4864:20::431; envelope-from=akihiko.odaki@daynix.com; helo=mail-pf1-x431.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @daynix-com.20230601.gappssmtp.com) X-ZM-MESSAGEID: 1694502809325100004 Content-Type: text/plain; charset="utf-8" The initialization and exit hooks will not affect the state of vCPU, but they may depend on the state of vCPU. Therefore, it's better to call plugin hooks after the vCPU state is fully initialized and before it gets uninitialized. Signed-off-by: Akihiko Odaki --- cpu.c | 11 ----------- hw/core/cpu-common.c | 10 ++++++++++ 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/cpu.c b/cpu.c index 1c948d1161..2552c85249 100644 --- a/cpu.c +++ b/cpu.c @@ -42,7 +42,6 @@ #include "hw/core/accel-cpu.h" #include "trace/trace-root.h" #include "qemu/accel.h" -#include "qemu/plugin.h" =20 uintptr_t qemu_host_page_size; intptr_t qemu_host_page_mask; @@ -148,11 +147,6 @@ void cpu_exec_realizefn(CPUState *cpu, Error **errp) /* Wait until cpu initialization complete before exposing cpu. */ cpu_list_add(cpu); =20 - /* Plugin initialization must wait until cpu_index assigned. */ - if (tcg_enabled()) { - qemu_plugin_vcpu_init_hook(cpu); - } - #ifdef CONFIG_USER_ONLY assert(qdev_get_vmsd(DEVICE(cpu)) =3D=3D NULL || qdev_get_vmsd(DEVICE(cpu))->unmigratable); @@ -179,11 +173,6 @@ void cpu_exec_unrealizefn(CPUState *cpu) } #endif =20 - /* Call the plugin hook before clearing cpu->cpu_index in cpu_list_rem= ove */ - if (tcg_enabled()) { - qemu_plugin_vcpu_exit_hook(cpu); - } - cpu_list_remove(cpu); /* * Now that the vCPU has been removed from the RCU list, we can call diff --git a/hw/core/cpu-common.c b/hw/core/cpu-common.c index ced66c2b34..be1544687e 100644 --- a/hw/core/cpu-common.c +++ b/hw/core/cpu-common.c @@ -209,6 +209,11 @@ static void cpu_common_realizefn(DeviceState *dev, Err= or **errp) cpu_resume(cpu); } =20 + /* Plugin initialization must wait until the cpu is fully realized. */ + if (tcg_enabled()) { + qemu_plugin_vcpu_init_hook(cpu); + } + /* NOTE: latest generic point where the cpu is fully realized */ } =20 @@ -216,6 +221,11 @@ static void cpu_common_unrealizefn(DeviceState *dev) { CPUState *cpu =3D CPU(dev); =20 + /* Call the plugin hook before clearing the cpu is fully unrealized */ + if (tcg_enabled()) { + qemu_plugin_vcpu_exit_hook(cpu); + } + /* NOTE: latest generic point before the cpu is fully unrealized */ cpu_exec_unrealizefn(cpu); } --=20 2.42.0 From nobody Fri May 10 19:36:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1694502905; cv=none; d=zohomail.com; s=zohoarc; b=nufFJQsl/Dx4Y0HaV72jerKO4PNIrgBSWzXoHBU2w3vFHuMgNCroUg4C7jp2oWhJnn0Czs6ajePHd9eDIZPivxEqkp29N4G8ubB577mVPbKAfWrEKVOcAkBCmjVw6GcsSb4EXiU4XLm6u5DtUvBuU9gjeVsO86MrN3Gh/T21VhE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1694502905; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject; bh=o9oVdd+t06nDVDslKXpymgoxS7/FxbKmqvjq+wOi+FM=; b=DMS/giNQ50dsun7GuQBKHWDqKre3ftCpou/VyA1s6lpP4kwtSAfFTrFZ/Zt17RBK2t/wV3vUNqAVlK1UeC++Q0tiX1y7WO2HzvOsTLPf2t869s+Z2pud1DSvESy4JBRZu/orFvRtW76V1+rnX2zvPabzU0AySiAwUJW46V0fDhg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1694502905265160.7008319503865; Tue, 12 Sep 2023 00:15:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qfxaB-0003Bj-Nc; Tue, 12 Sep 2023 03:13:11 -0400 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 1qfxaA-0003BQ-9C for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:13:10 -0400 Received: from mail-pf1-x42e.google.com ([2607:f8b0:4864:20::42e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qfxa6-0006ff-Lo for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:13:10 -0400 Received: by mail-pf1-x42e.google.com with SMTP id d2e1a72fcca58-68c576d35feso5123048b3a.2 for ; Tue, 12 Sep 2023 00:13:06 -0700 (PDT) Received: from alarm.flets-east.jp ([2400:4050:a840:1e00:78d2:b862:10a7:d486]) by smtp.gmail.com with ESMTPSA id f13-20020aa78b0d000000b0068be348e35fsm6647495pfd.166.2023.09.12.00.13.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Sep 2023 00:13:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1694502785; x=1695107585; 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=o9oVdd+t06nDVDslKXpymgoxS7/FxbKmqvjq+wOi+FM=; b=T/h4KT3QcitXrn7BIUvizkP+3mf1EjU7m1mhBk6vN2FVpavRkybMfh8zwzbaG34T6U 7PwuvEO/z24uOcqEYVICPIoAJkj6vaZuzF15Iv0avDmL3hM4YfXbrfVpzNq3ZWRo/PDO 39/pQoWZDP6cEAaxi2dyJmVrbjrGCGGQNar7xu8l/cpYdg/5xvY6H9h95fkWC1bOEMBR YpYpQRLUBXCdvHD4K6wA0v/u1LFqNlSmbL/VQI9iq9Pq4zOmtxYIwHFysA7GLBW6HQIY 748RK/ftf5te5WHuBQASKESmNzbD2klKzHNgiKF4TidLlBEvIwytebfKiS5cd8q0YrcO tHmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694502785; x=1695107585; 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=o9oVdd+t06nDVDslKXpymgoxS7/FxbKmqvjq+wOi+FM=; b=wVuSg7B/pPDvnqe9Wnb8ldWLNK6vAy00XvawfZDoU3sH5NoLhbOQxnsTBFrGJ89kg9 wueWaMix7vdIg2+fRM5lUDeOIvrkP07nKXE5lQ7FXXSqNciqEgKie+/C9+thXaOQx4e7 ym9qU6upyj9rUYt/P1/MXg0q6se0axjSavdNTz5Y3zGZKqE6mkEvDZX5GuSbRR1lylTn f21O6ZO2GTTUTmGzJxgrCbYUEwAgDvdAqoe1YILJhh/WiOjiYvyDK5OJPxkD3WYEC+YZ h5Iuj4wahojP28VtpeikvrHVxbd2BX+5osAtWQRfW1wuXHFfVngpyMvBhu0FXFKEZ5Qc v0Nw== X-Gm-Message-State: AOJu0Yxjgg5chrTsjXHxyYctLfZM8mygn6NPiFfVM+kzu5INYIsG0zjn 2SrZZYKJVQ7EUCpT9S9W9VlGqA== X-Google-Smtp-Source: AGHT+IGwG7624LdctCwuuFLJvrUXLa/I/0ChrWz6YUW9+NB0AClEqooMhKr4h3SdJHRkIHV894Lx8w== X-Received: by 2002:a05:6a00:cc1:b0:68a:5cf8:dac5 with SMTP id b1-20020a056a000cc100b0068a5cf8dac5mr14717527pfv.22.1694502785581; Tue, 12 Sep 2023 00:13:05 -0700 (PDT) From: Akihiko Odaki To: Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Mikhail Tyutin , Aleksandr Anenkov , qemu-devel@nongnu.org, Akihiko Odaki , Alexandre Iooss , Mahmoud Mandour Subject: [PATCH v7 15/18] plugins: Allow to read registers Date: Tue, 12 Sep 2023 16:12:01 +0900 Message-ID: <20230912071206.30751-16-akihiko.odaki@daynix.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230912071206.30751-1-akihiko.odaki@daynix.com> References: <20230912071206.30751-1-akihiko.odaki@daynix.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=2607:f8b0:4864:20::42e; envelope-from=akihiko.odaki@daynix.com; helo=mail-pf1-x42e.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @daynix-com.20230601.gappssmtp.com) X-ZM-MESSAGEID: 1694502906425100001 Content-Type: text/plain; charset="utf-8" It is based on GDB protocol to ensure interface stability. The timing of the vcpu init hook is also changed so that the hook will get called after GDB features are initialized. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1706 Signed-off-by: Akihiko Odaki --- include/qemu/qemu-plugin.h | 52 +++++++++++++++++++++++++++++++++--- plugins/api.c | 19 +++++++++++++ plugins/qemu-plugins.symbols | 3 +++ 3 files changed, 71 insertions(+), 3 deletions(-) diff --git a/include/qemu/qemu-plugin.h b/include/qemu/qemu-plugin.h index 50a9957279..40aae8db68 100644 --- a/include/qemu/qemu-plugin.h +++ b/include/qemu/qemu-plugin.h @@ -11,6 +11,7 @@ #ifndef QEMU_QEMU_PLUGIN_H #define QEMU_QEMU_PLUGIN_H =20 +#include #include #include #include @@ -51,7 +52,7 @@ typedef uint64_t qemu_plugin_id_t; =20 extern QEMU_PLUGIN_EXPORT int qemu_plugin_version; =20 -#define QEMU_PLUGIN_VERSION 1 +#define QEMU_PLUGIN_VERSION 2 =20 /** * struct qemu_info_t - system information for plugins @@ -218,8 +219,8 @@ struct qemu_plugin_insn; * @QEMU_PLUGIN_CB_R_REGS: callback reads the CPU's regs * @QEMU_PLUGIN_CB_RW_REGS: callback reads and writes the CPU's regs * - * Note: currently unused, plugins cannot read or change system - * register state. + * Note: currently QEMU_PLUGIN_CB_RW_REGS is unused, plugins cannot change + * system register state. */ enum qemu_plugin_cb_flags { QEMU_PLUGIN_CB_NO_REGS, @@ -664,4 +665,49 @@ uint64_t qemu_plugin_end_code(void); */ uint64_t qemu_plugin_entry_code(void); =20 +/** + * qemu_plugin_find_register_file() - find register file + * + * @vcpu_index: the index of the vcpu context + * @name: the name of the register file. + * + * Returns the identifier of the register file if it was found, and a nega= tive + * value otherwise. + * + * The names of register files are identical with names of GDB's standard + * target features with some extensions. For details, see: + * https://sourceware.org/gdb/onlinedocs/gdb/Standard-Target-Features.html + */ +int qemu_plugin_find_register_file(unsigned int vcpu_index, const char *na= me); + +/** + * qemu_plugin_find_register() - find register + * + * @vcpu_index: the index of the vcpu context + * @file: the register file identifier determined with + * qemu_plugin_find_register_file(). + * @name: the name of the register. + * + * The names of register are identical with names used in GDB's standard + * target features with some extensions. For details, see: + * https://sourceware.org/gdb/onlinedocs/gdb/Standard-Target-Features.html + */ +int qemu_plugin_find_register(unsigned int vcpu_index, int file, + const char *name); + +/** + * qemu_plugin_read_register() - read register + * + * @buf: the byte array to append the read register content to. + * @reg: the register identifier determined with + * qemu_plugin_find_register(). + * + * This function is only available in a context that register read access = is + * explicitly requested. + * + * Returns the size of the read register. The content of @buf is in target= byte + * order. + */ +int qemu_plugin_read_register(GByteArray *buf, int reg); + #endif /* QEMU_QEMU_PLUGIN_H */ diff --git a/plugins/api.c b/plugins/api.c index 2078b16edb..242a483884 100644 --- a/plugins/api.c +++ b/plugins/api.c @@ -35,6 +35,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/main-loop.h" #include "qemu/plugin.h" #include "qemu/log.h" #include "tcg/tcg.h" @@ -442,3 +443,21 @@ uint64_t qemu_plugin_entry_code(void) #endif return entry; } + +int qemu_plugin_find_register_file(unsigned int vcpu_index, const char *na= me) +{ + QEMU_IOTHREAD_LOCK_GUARD(); + return gdb_find_feature(qemu_get_cpu(vcpu_index), name); +} + +int qemu_plugin_find_register(unsigned int vcpu_index, int file, + const char *name) +{ + QEMU_IOTHREAD_LOCK_GUARD(); + return gdb_find_feature_register(qemu_get_cpu(vcpu_index), file, name); +} + +int qemu_plugin_read_register(GByteArray *buf, int reg) +{ + return gdb_read_register(current_cpu, buf, reg); +} diff --git a/plugins/qemu-plugins.symbols b/plugins/qemu-plugins.symbols index 71f6c90549..977f1fcfcb 100644 --- a/plugins/qemu-plugins.symbols +++ b/plugins/qemu-plugins.symbols @@ -42,4 +42,7 @@ qemu_plugin_tb_vaddr; qemu_plugin_uninstall; qemu_plugin_vcpu_for_each; + qemu_plugin_find_register_file; + qemu_plugin_find_register; + qemu_plugin_read_register; }; --=20 2.42.0 From nobody Fri May 10 19:36:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1694502932; cv=none; d=zohomail.com; s=zohoarc; b=PJIYrN1fmgVQqJEKJMiTHAFRkRjd9LTmwZecN8+JB5EeRWGiCprY87+9M5qheQnAp/2kjPUq0I9GOcBCD/wvKfsc5+ek3b1TPDDT0rBahkj1kXH8kk974ydtMT8DZ/Vsc008xIDcuxKS2+x5lPFUnUSjSCMSgW++cov9/NatFNE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1694502932; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject; bh=JCJCzqQ6Ba4FCVkTkN3rupr67lFRisvbzNM+HnYlWm0=; b=EYWkG1uqc6HiP6SaoH/3+esiJWpdcgnEYAEal3EUHWx67aANFhWBqX/zIcDz86DGRK5Dnw9qoSgdV7NjOEfe39WO6s0v/1K3Fijv/xoxoVK74YvJMDFBbfdMu/BaUuI0hyol+fBoHdf9Cbv25uPliAuLZDH550VpTmtopQ5bWO0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1694502932141888.3379867739445; Tue, 12 Sep 2023 00:15:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qfxaD-0003CV-OW; Tue, 12 Sep 2023 03:13:13 -0400 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 1qfxaC-0003Bn-4x for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:13:12 -0400 Received: from mail-ot1-x333.google.com ([2607:f8b0:4864:20::333]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qfxa9-0006fy-9m for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:13:11 -0400 Received: by mail-ot1-x333.google.com with SMTP id 46e09a7af769-6bcb5df95c5so3805775a34.1 for ; Tue, 12 Sep 2023 00:13:08 -0700 (PDT) Received: from alarm.flets-east.jp ([2400:4050:a840:1e00:78d2:b862:10a7:d486]) by smtp.gmail.com with ESMTPSA id f13-20020aa78b0d000000b0068be348e35fsm6647495pfd.166.2023.09.12.00.13.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Sep 2023 00:13:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1694502788; x=1695107588; 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=JCJCzqQ6Ba4FCVkTkN3rupr67lFRisvbzNM+HnYlWm0=; b=FC1b05LH78/ON+Xv13SxqLK9sFO48hYIXtot5YlEeOucRIv93Tcku8hVbgY1JA7EPY KGLStUMjmMd5zssNtFt8QvDbCYjjklr1WNOps1o7uPW6YB3xCdhisSsa8Xj3HG1iFMbj JIEFktLTj5j8toomJnuuohIxQv2pgwNarE62u7dpRccpSWngOMvVf5Vzv3KdFTHMDgDX JIGkHdwwc7oBrQcIVIUtq2hDXHwq0mOS8epx1EzxqLmilP0DAdVzwVzzHh7tgwKVxjb3 iLANoOiqt5OJ1X9WW+GkP5Y8zqRJUuN0+x8H0KCZ54Xp4MjeCXv66pX66MKt2T8VuJTw m91Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694502788; x=1695107588; 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=JCJCzqQ6Ba4FCVkTkN3rupr67lFRisvbzNM+HnYlWm0=; b=NQ0a4Gwz2h4ukuVbA5x8QzRqCOuXRaQ/RxiFo9XcZqhSOgaBPCQ0sgOdoTI0kaZYbV VD8KUr+Kh+XYmJrNMTYGT+8pcVR+gtLn2J12uqX+DDuw0CRmjkaPvHJwRFet1ngDZ8gh 84++5TGswkXt1boIxEJrEpUD+XnUf+awkf6l1txSCyFkP7GBWDmogcnfgGt8jUTWX/s6 ce30hMB2AfzaZ1YTXuQ4lzrSqFZNoAWMCuUHaWMPLReQOQaJjjnjYC6b42/BdQ24ki8V Q4D8i1Y5n1DP0Y4kxz6ueG4939tOsdvG089wmvvMzWTdzCylfEmbXkUPZk0JoqM83VfJ 30/Q== X-Gm-Message-State: AOJu0Yz1poLocJVUKVgCrgPvaTQqXsRX0sC35xoAq0OvNz7Ti/+F15P5 UGFyw52O3q0NP/8lanLehj31+OUeM5Y1M9NmShE= X-Google-Smtp-Source: AGHT+IGwOelZlbCfSJpQ8EmWnRt5I4JfzpQnbkjJ7QApr9CQhCDaxmf9iRzSkujZf958GL6Y8mVhBw== X-Received: by 2002:a05:6358:9992:b0:13e:b477:8015 with SMTP id j18-20020a056358999200b0013eb4778015mr13248448rwb.9.1694502787999; Tue, 12 Sep 2023 00:13:07 -0700 (PDT) From: Akihiko Odaki To: Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Mikhail Tyutin , Aleksandr Anenkov , qemu-devel@nongnu.org, Akihiko Odaki , Alexandre Iooss , Mahmoud Mandour , Richard Henderson , Paolo Bonzini Subject: [PATCH v7 16/18] contrib/plugins: Allow to log registers Date: Tue, 12 Sep 2023 16:12:02 +0900 Message-ID: <20230912071206.30751-17-akihiko.odaki@daynix.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230912071206.30751-1-akihiko.odaki@daynix.com> References: <20230912071206.30751-1-akihiko.odaki@daynix.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=2607:f8b0:4864:20::333; envelope-from=akihiko.odaki@daynix.com; helo=mail-ot1-x333.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @daynix-com.20230601.gappssmtp.com) X-ZM-MESSAGEID: 1694502933289100006 Content-Type: text/plain; charset="utf-8" This demonstrates how a register can be read from a plugin. Signed-off-by: Akihiko Odaki --- docs/devel/tcg-plugins.rst | 10 +++- contrib/plugins/execlog.c | 120 +++++++++++++++++++++++++++---------- 2 files changed, 97 insertions(+), 33 deletions(-) diff --git a/docs/devel/tcg-plugins.rst b/docs/devel/tcg-plugins.rst index 81dcd43a61..c9f8b27590 100644 --- a/docs/devel/tcg-plugins.rst +++ b/docs/devel/tcg-plugins.rst @@ -497,6 +497,15 @@ arguments if required:: $ qemu-system-arm $(QEMU_ARGS) \ -plugin ./contrib/plugins/libexeclog.so,ifilter=3Dst1w,afilter=3D0x400= 01808 -d plugin =20 +This plugin can also dump a specified register. The specification of regis= ter +follows `GDB standard target features `__. + +Specify the name of the feature that contains the register and the name of= the +register with ``rfile`` and ``reg`` options, respectively:: + + $ qemu-system-arm $(QEMU_ARGS) \ + -plugin ./contrib/plugins/libexeclog.so,rfile=3Dorg.gnu.gdb.arm.core,r= eg=3Dsp -d plugin + - contrib/plugins/cache.c =20 Cache modelling plugin that measures the performance of a given L1 cache @@ -583,4 +592,3 @@ The following API is generated from the inline document= ation in include the full kernel-doc annotations. =20 .. kernel-doc:: include/qemu/qemu-plugin.h - diff --git a/contrib/plugins/execlog.c b/contrib/plugins/execlog.c index 82dc2f584e..f3e714c888 100644 --- a/contrib/plugins/execlog.c +++ b/contrib/plugins/execlog.c @@ -15,27 +15,43 @@ =20 #include =20 +typedef struct CPU { + /* Store last executed instruction on each vCPU as a GString */ + GString *last_exec; + GByteArray *reg_history[2]; + + int reg; +} CPU; + QEMU_PLUGIN_EXPORT int qemu_plugin_version =3D QEMU_PLUGIN_VERSION; =20 -/* Store last executed instruction on each vCPU as a GString */ -static GPtrArray *last_exec; +static CPU *cpus; +static int num_cpus; static GRWLock expand_array_lock; =20 static GPtrArray *imatches; static GArray *amatches; =20 +static char *rfile_name; +static char *reg_name; + /* - * Expand last_exec array. + * Expand cpu array. * * As we could have multiple threads trying to do this we need to * serialise the expansion under a lock. */ -static void expand_last_exec(int cpu_index) +static void expand_cpu(int cpu_index) { g_rw_lock_writer_lock(&expand_array_lock); - while (cpu_index >=3D last_exec->len) { - GString *s =3D g_string_new(NULL); - g_ptr_array_add(last_exec, s); + if (cpu_index >=3D num_cpus) { + cpus =3D g_realloc_n(cpus, cpu_index + 1, sizeof(*cpus)); + while (cpu_index >=3D num_cpus) { + cpus[num_cpus].last_exec =3D g_string_new(NULL); + cpus[num_cpus].reg_history[0] =3D g_byte_array_new(); + cpus[num_cpus].reg_history[1] =3D g_byte_array_new(); + num_cpus++; + } } g_rw_lock_writer_unlock(&expand_array_lock); } @@ -50,8 +66,8 @@ static void vcpu_mem(unsigned int cpu_index, qemu_plugin_= meminfo_t info, =20 /* Find vCPU in array */ g_rw_lock_reader_lock(&expand_array_lock); - g_assert(cpu_index < last_exec->len); - s =3D g_ptr_array_index(last_exec, cpu_index); + g_assert(cpu_index < num_cpus); + s =3D cpus[cpu_index].last_exec; g_rw_lock_reader_unlock(&expand_array_lock); =20 /* Indicate type of memory access */ @@ -77,28 +93,42 @@ static void vcpu_mem(unsigned int cpu_index, qemu_plugi= n_meminfo_t info, */ static void vcpu_insn_exec(unsigned int cpu_index, void *udata) { - GString *s; + int n; + int i; =20 - /* Find or create vCPU in array */ g_rw_lock_reader_lock(&expand_array_lock); - if (cpu_index >=3D last_exec->len) { - g_rw_lock_reader_unlock(&expand_array_lock); - expand_last_exec(cpu_index); - g_rw_lock_reader_lock(&expand_array_lock); - } - s =3D g_ptr_array_index(last_exec, cpu_index); - g_rw_lock_reader_unlock(&expand_array_lock); =20 /* Print previous instruction in cache */ - if (s->len) { - qemu_plugin_outs(s->str); + if (cpus[cpu_index].last_exec->len) { + if (cpus[cpu_index].reg >=3D 0) { + GByteArray *current =3D cpus[cpu_index].reg_history[0]; + GByteArray *last =3D cpus[cpu_index].reg_history[1]; + + g_byte_array_set_size(current, 0); + n =3D qemu_plugin_read_register(current, cpus[cpu_index].reg); + + if (n !=3D last->len || memcmp(current->data, last->data, n)) { + g_string_append(cpus[cpu_index].last_exec, ", reg,"); + for (i =3D 0; i < n; i++) { + g_string_append_printf(cpus[cpu_index].last_exec, " %0= 2x", + current->data[i]); + } + } + + cpus[cpu_index].reg_history[0] =3D last; + cpus[cpu_index].reg_history[1] =3D current; + } + + qemu_plugin_outs(cpus[cpu_index].last_exec->str); qemu_plugin_outs("\n"); } =20 /* Store new instruction in cache */ /* vcpu_mem will add memory access information to last_exec */ - g_string_printf(s, "%u, ", cpu_index); - g_string_append(s, (char *)udata); + g_string_printf(cpus[cpu_index].last_exec, "%u, ", cpu_index); + g_string_append(cpus[cpu_index].last_exec, (char *)udata); + + g_rw_lock_reader_unlock(&expand_array_lock); } =20 /** @@ -167,8 +197,10 @@ static void vcpu_tb_trans(qemu_plugin_id_t id, struct = qemu_plugin_tb *tb) QEMU_PLUGIN_MEM_RW, NULL); =20 /* Register callback on instruction */ - qemu_plugin_register_vcpu_insn_exec_cb(insn, vcpu_insn_exec, - QEMU_PLUGIN_CB_NO_REGS,= output); + qemu_plugin_register_vcpu_insn_exec_cb( + insn, vcpu_insn_exec, + rfile_name ? QEMU_PLUGIN_CB_R_REGS : QEMU_PLUGIN_CB_NO_REG= S, + output); =20 /* reset skip */ skip =3D (imatches || amatches); @@ -177,17 +209,33 @@ static void vcpu_tb_trans(qemu_plugin_id_t id, struct= qemu_plugin_tb *tb) } } =20 +static void vcpu_init(qemu_plugin_id_t id, unsigned int vcpu_index) +{ + int reg =3D -1; + + expand_cpu(vcpu_index); + + if (rfile_name) { + int rfile =3D qemu_plugin_find_register_file(vcpu_index, rfile_nam= e); + if (rfile >=3D 0) { + reg =3D qemu_plugin_find_register(vcpu_index, rfile, reg_name); + } + } + + g_rw_lock_writer_lock(&expand_array_lock); + cpus[vcpu_index].reg =3D reg; + g_rw_lock_writer_unlock(&expand_array_lock); +} + /** * On plugin exit, print last instruction in cache */ static void plugin_exit(qemu_plugin_id_t id, void *p) { guint i; - GString *s; - for (i =3D 0; i < last_exec->len; i++) { - s =3D g_ptr_array_index(last_exec, i); - if (s->str) { - qemu_plugin_outs(s->str); + for (i =3D 0; i < num_cpus; i++) { + if (cpus[i].last_exec->str) { + qemu_plugin_outs(cpus[i].last_exec->str); qemu_plugin_outs("\n"); } } @@ -224,9 +272,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_= id_t id, * we don't know the size before emulation. */ if (info->system_emulation) { - last_exec =3D g_ptr_array_sized_new(info->system.max_vcpus); - } else { - last_exec =3D g_ptr_array_new(); + cpus =3D g_new(CPU, info->system.max_vcpus); } =20 for (int i =3D 0; i < argc; i++) { @@ -236,13 +282,23 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugi= n_id_t id, parse_insn_match(tokens[1]); } else if (g_strcmp0(tokens[0], "afilter") =3D=3D 0) { parse_vaddr_match(tokens[1]); + } else if (g_strcmp0(tokens[0], "rfile") =3D=3D 0) { + rfile_name =3D g_strdup(tokens[1]); + } else if (g_strcmp0(tokens[0], "reg") =3D=3D 0) { + reg_name =3D g_strdup(tokens[1]); } else { fprintf(stderr, "option parsing failed: %s\n", opt); return -1; } } =20 + if ((!rfile_name) !=3D (!reg_name)) { + fputs("file and reg need to be set at the same time\n", stderr); + return -1; + } + /* Register translation block and exit callbacks */ + qemu_plugin_register_vcpu_init_cb(id, vcpu_init); qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans); qemu_plugin_register_atexit_cb(id, plugin_exit, NULL); =20 --=20 2.42.0 From nobody Fri May 10 19:36:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1694502918; cv=none; d=zohomail.com; s=zohoarc; b=HNDwGPAEHR6P7knQakuGzqJtEzVIGLIByz4xu/pwcrshKUSqnXkSLSb4dH6H0ngHDwWAKcsxIvBWjdTRSmj7/gai8VK2pw/piuj8/LzFjQHrYFJ5oVki9syDG8K2pF7txP8O0+ycpkDAZ1AkDnJvTrS6whjrQnXyFfxVK9ne1kI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1694502918; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject; bh=SHEeIOFIQeEybg1OP9uxYR6frP9B0kGaVRtOZCYAkPQ=; b=GKdpqwvdgzGmrj5+bJSKSgIwrUgTy/UjLfoXMbNBq6XlgM/v29cyJovV2JMSj/86n7a8bzlykR587QUlQ9o7kP2EQR53NxMxTX1cW7xynzNWLlbDPaiRt6WaDSIWo4Q3MTHJkfAo2/kLS/0tY1/LHKN/YsGLOuJRwGKq8C1kzC8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1694502918270114.47004918463699; Tue, 12 Sep 2023 00:15:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qfxaF-0003DE-55; Tue, 12 Sep 2023 03:13:15 -0400 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 1qfxaD-0003CZ-UQ for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:13:13 -0400 Received: from mail-pf1-x434.google.com ([2607:f8b0:4864:20::434]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qfxaB-0006gX-Fx for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:13:13 -0400 Received: by mail-pf1-x434.google.com with SMTP id d2e1a72fcca58-68fb7fb537dso1842225b3a.2 for ; Tue, 12 Sep 2023 00:13:11 -0700 (PDT) Received: from alarm.flets-east.jp ([2400:4050:a840:1e00:78d2:b862:10a7:d486]) by smtp.gmail.com with ESMTPSA id f13-20020aa78b0d000000b0068be348e35fsm6647495pfd.166.2023.09.12.00.13.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Sep 2023 00:13:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1694502790; x=1695107590; 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=SHEeIOFIQeEybg1OP9uxYR6frP9B0kGaVRtOZCYAkPQ=; b=S/xHtX2EOPT4EFBxlvq4qoTuB/fFOZDJyqBRmFlykOO2VF/lgLNoa8H4OhovrQEt5S 2IdrIDVpkyU2XpmWpRKhHKizfqao9Clvfw7APZtnRqf8G8b0ps28UydXVj8me5zfR3SA r/d0tSwEH/1wtc4AMfQ+6lBGaz3AVW5sLG7cspKrum8N69Ht6qDInZ3R2vznPyzicl8I PviKpjAVwTuU6i9Ae0a4hiJ3nYrq63vZTFZy+wVFeBG7FtrGIgdLvMMfqonX+iLOfbF1 aoVOha1cmU3aUQxPrsJPhPt9MPPQd/jCDLsU8SewPjtfns8tRhMhsuEB79BTR7reGbuF hNJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694502790; x=1695107590; 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=SHEeIOFIQeEybg1OP9uxYR6frP9B0kGaVRtOZCYAkPQ=; b=hozMrnAtm0XVd/GTIPorFZwN3bvwHi6qUDrPj8PSHMmeZEDGjBHaeeHFIttAuYFGsd jxhoOzZCYwUf1E142XFHJZo7eOIEkAU0T92w89n/elSkD1NFOa6z1fZ+SnRILkAIiBjM CrYoh21kOUV6e+IDIEr+QgWNeUTPhAMYIhTZr4lbjuLZzZjWc20P3kF1kLudoNi8iwxU P6F+8LN/thq7OdRTQ9/TttJ+6frqjz3n4lxSYXXwbFSkyh+21tzGTIQJkK0gSaJRY55Z 8kgbMuRWrvrnIPmmCeFiphkGwzVpWECLCtJbYxTqxFkbigZ+6umaBoTPJjI3H2p5cEr6 ufGA== X-Gm-Message-State: AOJu0Yz99sCGXgfztDZMsC8Ui4GxXksKlcaW+O+YJr3k6LcFp8bKK/Sc 3+qpd921LuN4iNbZOF7H59KXLw== X-Google-Smtp-Source: AGHT+IFOWa/5WVd3ut2t/YYtS2DGi4oaar3stg80ZJ5ZNpOVJqPOHD/OlfVpQ6chDpdRtQ0YIYuiIg== X-Received: by 2002:a05:6a00:3088:b0:68f:e810:e86f with SMTP id bh8-20020a056a00308800b0068fe810e86fmr774590pfb.28.1694502790317; Tue, 12 Sep 2023 00:13:10 -0700 (PDT) From: Akihiko Odaki To: Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Mikhail Tyutin , Aleksandr Anenkov , qemu-devel@nongnu.org, Akihiko Odaki Subject: [PATCH v7 17/18] plugins: Support C++ Date: Tue, 12 Sep 2023 16:12:03 +0900 Message-ID: <20230912071206.30751-18-akihiko.odaki@daynix.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230912071206.30751-1-akihiko.odaki@daynix.com> References: <20230912071206.30751-1-akihiko.odaki@daynix.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=2607:f8b0:4864:20::434; envelope-from=akihiko.odaki@daynix.com; helo=mail-pf1-x434.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @daynix-com.20230601.gappssmtp.com) X-ZM-MESSAGEID: 1694502918978100003 Content-Type: text/plain; charset="utf-8" Make qemu-plugin.h consumable for C++ platform. Signed-off-by: Akihiko Odaki --- include/qemu/qemu-plugin.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/qemu/qemu-plugin.h b/include/qemu/qemu-plugin.h index 40aae8db68..55f514ca6c 100644 --- a/include/qemu/qemu-plugin.h +++ b/include/qemu/qemu-plugin.h @@ -16,6 +16,8 @@ #include #include =20 +G_BEGIN_DECLS + /* * For best performance, build the plugin with -fvisibility=3Dhidden so th= at * QEMU_PLUGIN_LOCAL is implicit. Then, just mark qemu_plugin_install with @@ -710,4 +712,6 @@ int qemu_plugin_find_register(unsigned int vcpu_index, = int file, */ int qemu_plugin_read_register(GByteArray *buf, int reg); =20 +G_END_DECLS + #endif /* QEMU_QEMU_PLUGIN_H */ --=20 2.42.0 From nobody Fri May 10 19:36:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1694502989; cv=none; d=zohomail.com; s=zohoarc; b=RZpWKT2K4IEqxxJ3h1+ErlRP1ooJFIWZ97mrdoP2xszp22CVkjUdytgilAshWgdcX7VCxynAO7cjXGhJWZ4WQ/n844RUusrWJWM23twWLVwI7yEeZVFwpWZb7Z5tkTv5Jes9WMCyvCkZr4yLB9T7lWwRmwRXue4tBXXuKbVfuX8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1694502989; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject; bh=UJRUv8O4TokTXkVqeubhuAV8gl+wRJjs7dLP5rlsco4=; b=WHzk21jFzn3OgexXMdEuLNpk6DLOuoLA03nISQUqire7knxxH/RUvvS/VaA8ahUeuBfXgg3RomkgOOuzbxYIoZKr4SQoSyTce0k3xzmzc7ngpZgGLyLg/j6BQhg9spWB8H+xFJrvuQQJnvWReOF97sZP1NlCOmzFmf6kC+OTu3g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1694502989247368.54392109719663; Tue, 12 Sep 2023 00:16:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qfxaN-0003Kp-G3; Tue, 12 Sep 2023 03:13:24 -0400 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 1qfxaG-0003Dg-A1 for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:13:16 -0400 Received: from mail-ot1-x330.google.com ([2607:f8b0:4864:20::330]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qfxaE-0006h5-0d for qemu-devel@nongnu.org; Tue, 12 Sep 2023 03:13:16 -0400 Received: by mail-ot1-x330.google.com with SMTP id 46e09a7af769-6c0bbbbad81so3241572a34.3 for ; Tue, 12 Sep 2023 00:13:13 -0700 (PDT) Received: from alarm.flets-east.jp ([2400:4050:a840:1e00:78d2:b862:10a7:d486]) by smtp.gmail.com with ESMTPSA id f13-20020aa78b0d000000b0068be348e35fsm6647495pfd.166.2023.09.12.00.13.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Sep 2023 00:13:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1694502793; x=1695107593; 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=UJRUv8O4TokTXkVqeubhuAV8gl+wRJjs7dLP5rlsco4=; b=iT9R1jY2Sm0WYzrnybPkQzUVrqwNnpQGa/ZyWEXMXoNs1qGEyPOolJbXq7lgt8zN6n BoNMg9pad1nGhdfGa/+vPEVsxnRlKz39iZ+3E4PvnE+1NwEnSPIOJxXnecIOc8eT18i9 ImUj+st4ZCeGtmucZHdoRD82br5cpeGbWGlS8lHZ1VUVmgym2wI9nq6d6DUowICW+huq JE4AIckwmTGys1LVxMWuqplXES9mKOUt460HlPXcF7D80ldMDY7JW1Nj4FsL89/MfNrd T+l0Wxa1UHnc++zL5CHZDluiKZVl5LIqN0Fsi0i4ZYP/MFehdblYK6Sw0eZZjJck/6s6 j+yw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694502793; x=1695107593; 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=UJRUv8O4TokTXkVqeubhuAV8gl+wRJjs7dLP5rlsco4=; b=IssysNct7rxwNlCkDy4W7atdZb9TRaMKfSKbKC/jIDwhiT78Md2DVft3x5ro0Wmr1T 5CV62/gh1erhglhs0FumM59qtiC8nLBpmNqo/MXDR2dX0URuANTNrcuM6VM+pbXanlHd lPh4CMYF0OHcP7wpuMmVn39p7gH8GyJxwOFY+FnAn8zZpqDtrX5g2mBEtWor41KnWcLB XcrAF+HShoOL6Y2eYXAMcwcooBTyWKsoS4q3GmNXLWPLzEmAPymCzjGEyenOaUHgtyhV DrZS2LmdnXRZadhlSFHGdSBRooXD54co4Y2/xi7IMOl82b8diQtlg384fuIAOcuBvBff Vozg== X-Gm-Message-State: AOJu0YxKx1xW4cddoTmBaGwRdru+vTjKnE1AdcoMYCT2eV3nCqO5KuX2 s+irxzwqTU+XqCpyj8sfwDfYpA== X-Google-Smtp-Source: AGHT+IHItpms03KXongM82cEE9tfs/RWCPKvo6cAAnLqT5at8V7xHjpGYa8P8FiehY8pk9Gt1FaBPA== X-Received: by 2002:a05:6358:2789:b0:134:c859:d32a with SMTP id l9-20020a056358278900b00134c859d32amr11061179rwb.25.1694502793054; Tue, 12 Sep 2023 00:13:13 -0700 (PDT) From: Akihiko Odaki To: Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Mikhail Tyutin , Aleksandr Anenkov , qemu-devel@nongnu.org, Akihiko Odaki , Paolo Bonzini , Thomas Huth , Alexandre Iooss , Mahmoud Mandour , Richard Henderson , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v7 18/18] contrib/plugins: Add cc plugin Date: Tue, 12 Sep 2023 16:12:04 +0900 Message-ID: <20230912071206.30751-19-akihiko.odaki@daynix.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230912071206.30751-1-akihiko.odaki@daynix.com> References: <20230912071206.30751-1-akihiko.odaki@daynix.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=2607:f8b0:4864:20::330; envelope-from=akihiko.odaki@daynix.com; helo=mail-ot1-x330.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @daynix-com.20230601.gappssmtp.com) X-ZM-MESSAGEID: 1694502990723100011 Content-Type: text/plain; charset="utf-8" This demonstrates how to write a plugin in C++. Signed-off-by: Akihiko Odaki --- docs/devel/tcg-plugins.rst | 8 ++++++++ configure | 15 ++++++++++++--- contrib/plugins/Makefile | 5 +++++ contrib/plugins/cc.cc | 17 +++++++++++++++++ tests/tcg/Makefile.target | 3 +++ 5 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 contrib/plugins/cc.cc diff --git a/docs/devel/tcg-plugins.rst b/docs/devel/tcg-plugins.rst index c9f8b27590..0a11f8036c 100644 --- a/docs/devel/tcg-plugins.rst +++ b/docs/devel/tcg-plugins.rst @@ -584,6 +584,14 @@ The plugin has a number of arguments, all of them are = optional: configuration arguments implies ``l2=3Don``. (default: N =3D 2097152 (2MB), B =3D 64, A =3D 16) =20 +- contrib/plugins/cc.cc + +cc plugin demonstrates how to write a plugin in C++. It simply outputs +"hello, world" to the plugin log:: + + $ qemu-system-arm $(QEMU_ARGS) \ + -plugin ./contrib/plugins/libcc.so -d plugin + API --- =20 diff --git a/configure b/configure index b9bd008592..c3cd5a15e7 100755 --- a/configure +++ b/configure @@ -293,10 +293,18 @@ else cc=3D"${CC-${cross_prefix}gcc}" fi =20 -if test -z "${CXX}${cross_prefix}"; then - cxx=3D"c++" +if test -n "${CXX+x}"; then + cxx=3D"$CXX" else - cxx=3D"${CXX-${cross_prefix}g++}" + if test -n "${cross_prefix}"; then + cxx=3D"${cross_prefix}g++" + else + cxx=3D"c++" + fi + + if ! has "$cxx"; then + cxx=3D + fi fi =20 # Preferred ObjC compiler: @@ -1765,6 +1773,7 @@ echo "MESON=3D$meson" >> $config_host_mak echo "NINJA=3D$ninja" >> $config_host_mak echo "PKG_CONFIG=3D${pkg_config}" >> $config_host_mak echo "CC=3D$cc" >> $config_host_mak +echo "CXX=3D$cxx" >> $config_host_mak echo "EXESUF=3D$EXESUF" >> $config_host_mak =20 # use included Linux headers for KVM architectures diff --git a/contrib/plugins/Makefile b/contrib/plugins/Makefile index b2b9db9f51..93d86b3d07 100644 --- a/contrib/plugins/Makefile +++ b/contrib/plugins/Makefile @@ -21,6 +21,9 @@ NAMES +=3D lockstep NAMES +=3D hwprofile NAMES +=3D cache NAMES +=3D drcov +ifneq ($(CXX),) +NAMES +=3D cc +endif =20 SONAMES :=3D $(addsuffix .so,$(addprefix lib,$(NAMES))) =20 @@ -31,6 +34,8 @@ CFLAGS +=3D -fPIC -Wall CFLAGS +=3D $(if $(CONFIG_DEBUG_TCG), -ggdb -O0) CFLAGS +=3D -I$(SRC_PATH)/include/qemu =20 +CXXFLAGS :=3D $(CFLAGS) + all: $(SONAMES) =20 %.o: %.c diff --git a/contrib/plugins/cc.cc b/contrib/plugins/cc.cc new file mode 100644 index 0000000000..83a5528db0 --- /dev/null +++ b/contrib/plugins/cc.cc @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include + +extern "C" { + +QEMU_PLUGIN_EXPORT int qemu_plugin_version =3D QEMU_PLUGIN_VERSION; + +QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id, + const qemu_info_t *info, int ar= gc, + char **argv) +{ + qemu_plugin_outs("hello, world\n"); + return 0; +} + +}; diff --git a/tests/tcg/Makefile.target b/tests/tcg/Makefile.target index 462289f47c..3d7837d3b8 100644 --- a/tests/tcg/Makefile.target +++ b/tests/tcg/Makefile.target @@ -149,6 +149,9 @@ PLUGIN_SRC=3D$(SRC_PATH)/tests/plugin PLUGIN_LIB=3D../../plugin VPATH+=3D$(PLUGIN_LIB) PLUGINS=3D$(patsubst %.c, lib%.so, $(notdir $(wildcard $(PLUGIN_SRC)/*.c))) +ifneq ($(CXX),) +PLUGINS+=3D$(patsubst %.cc, lib%.so, $(notdir $(wildcard $(PLUGIN_SRC)/*.c= c))) +endif =20 # We need to ensure expand the run-plugin-TEST-with-PLUGIN # pre-requistes manually here as we can't use stems to handle it. We --=20 2.42.0