From patchwork Wed Oct 11 07:02:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Akihiko Odaki X-Patchwork-Id: 1846325 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=daynix-com.20230601.gappssmtp.com header.i=@daynix-com.20230601.gappssmtp.com header.a=rsa-sha256 header.s=20230601 header.b=U/BbOraO; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4S53gh4zRMz1ypX for ; Wed, 11 Oct 2023 18:05:20 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qqTGG-0007R6-KN; Wed, 11 Oct 2023 03:04: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 1qqTGE-0007Qv-57 for qemu-devel@nongnu.org; Wed, 11 Oct 2023 03:04:02 -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 1qqTGC-0005jS-KY for qemu-devel@nongnu.org; Wed, 11 Oct 2023 03:04:01 -0400 Received: by mail-ot1-x32a.google.com with SMTP id 46e09a7af769-6c4fa1c804bso4342572a34.2 for ; Wed, 11 Oct 2023 00:04:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1697007839; x=1697612639; 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=U/BbOraOU6ymg46FgC7Wdc8mVlA9buFCZlKQZAXlHtFWaxq8V+PKD12zeJXR8CWTCH IJc9vqpPF7XoFhvxo8LrlLy9UAQ3Mfoy/3AiT/o++Wl+NiaSlqPFgsoADduVfZJ4Ryas vGvGv/XCNgCsEOB/8ls5SvV0Ijsxz8LIUC1VWRr0+f3HO1A+iGyodhEBw/8W3hZN3w5q nvdcRyQMN54+tv+Up859ynJdLo9jcmuA2ad+8GKYoNaaj1SY8dBMf3HWIIjW+kWl4OWq QSe8Khx+pXQ/5JpCZ1p6lc0QUCKY5KGP+iwYjNI1tOJEs8fIAagOKLKAlXHdgOJ0WKPP ghaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697007839; x=1697612639; 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=OseaAz2Px1jNFeQBuS1BHKiBnM3gOrY1o8qvo83ZoTaHUBXDeZ4SwLVUi/YCBzFRlQ ZNYoZxDbJfGmyIQqdEXTCE96gHNz8vSOLCMVTh3dJpILGUh2twHdRGJm19GabMok+aVm zZdN7d8BwSZYL/CIvnjJbooW3LsXOpY8ohlL0p9Vt8UM75NgJMy69wZIfb2sAkrczy1B ZTZTrE4o4xFQ44xDVE++6KZ4aOP33+/ooM8qpSKxch/kIhcpQoxcjNNvfnKPaZAord8r J9Jtk22+oZWOlVrJnYxesqakaQ9rOFcLwQ50izcBiGUBP3e7ym+t8/W15JpegWohpfh4 UsBg== X-Gm-Message-State: AOJu0YyQ40cPd3j9PgIg+yebIg8HnyUNxqbnNvWimDrrORtLGbRyj+Q0 jFAZaW9q9EAJJvj3ZkU7025ceg== X-Google-Smtp-Source: AGHT+IHZ5fW30PSMnAmogUpipDxqruI4WLc9ELi55emBHJhOnX4N0NFJFVX80yjApT4TI1GvFW7iIw== X-Received: by 2002:a9d:62cb:0:b0:6b9:b1b1:135 with SMTP id z11-20020a9d62cb000000b006b9b1b10135mr21475994otk.13.1697007839615; Wed, 11 Oct 2023 00:03:59 -0700 (PDT) Received: from localhost ([157.82.206.10]) by smtp.gmail.com with UTF8SMTPSA id t28-20020aa7939c000000b0068a46cd4120sm9356788pfe.199.2023.10.11.00.03.57 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 11 Oct 2023 00:03:59 -0700 (PDT) From: Akihiko Odaki To: Cc: =?utf-8?q?Alex_Benn=C3=A9e?= , Mikhail Tyutin , Aleksandr Anenkov , qemu-devel@nongnu.org, =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Akihiko Odaki , John Snow , Cleber Rosa Subject: [PATCH v9 04/23] gdbstub: Add num_regs member to GDBFeature Date: Wed, 11 Oct 2023 16:02:50 +0900 Message-ID: <20231011070335.14398-5-akihiko.odaki@daynix.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231011070335.14398-1-akihiko.odaki@daynix.com> References: <20231011070335.14398-1-akihiko.odaki@daynix.com> MIME-Version: 1.0 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org 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é Reviewed-by: Alex Bennée --- 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; 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 -import os, sys +import os, sys, xml.etree.ElementTree def writeliteral(indent, bytes): sys.stdout.write(' ' * indent) @@ -39,10 +39,52 @@ def writeliteral(indent, bytes): with open(input, 'rb') as file: read = file.read() + parser = xml.etree.ElementTree.XMLPullParser(['start', 'end']) + parser.feed(read) + events = parser.read_events() + event, element = next(events) + if event != 'start': + sys.stderr.write(f'unexpected event: {event}\n') + exit(1) + if element.tag != 'feature': + sys.stderr.write(f'unexpected start tag: {element.tag}\n') + exit(1) + + regnum = 0 + regnums = [] + tags = ['feature'] + for event, element in events: + if event == 'end': + if element.tag != tags[len(tags) - 1]: + sys.stderr.write(f'unexpected end tag: {element.tag}\n') + exit(1) + + tags.pop() + if element.tag == 'feature': + break + elif event == 'start': + if len(tags) < 2 and element.tag == 'reg': + if 'regnum' in element.attrib: + regnum = int(element.attrib['regnum']) + + regnums.append(regnum) + regnum += 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 = min(regnums) + num_regs = 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') sys.stdout.write(' { NULL }\n};\n')