[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 08/29] gdbstub: Add num_regs member to GDBFeature
From: |
Alex Bennée |
Subject: |
[PATCH 08/29] gdbstub: Add num_regs member to GDBFeature |
Date: |
Fri, 3 Nov 2023 19:59:35 +0000 |
From: Akihiko Odaki <akihiko.odaki@daynix.com>
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 <akihiko.odaki@daynix.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20231025093128.33116-2-akihiko.odaki@daynix.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
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 100644
--- 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')
--
2.39.2
- [PATCH 09/29] gdbstub: Introduce gdb_find_static_feature(), (continued)
- [PATCH 09/29] gdbstub: Introduce gdb_find_static_feature(), Alex Bennée, 2023/11/03
- [PATCH 05/29] target/arm: hide aliased MIDR from gdbstub, Alex Bennée, 2023/11/03
- [PATCH 06/29] tests/tcg: add an explicit gdbstub register tester, Alex Bennée, 2023/11/03
- [PATCH 07/29] tests/avocado: update the tcg_plugins test, Alex Bennée, 2023/11/03
- [PATCH 04/29] target/arm: hide all versions of DBGD[RS]AR from gdbstub, Alex Bennée, 2023/11/03
- [PATCH 12/29] target/ppc: Use GDBFeature for dynamic XML, Alex Bennée, 2023/11/03
- [PATCH 25/29] contrib/plugins: extend execlog to track register changes, Alex Bennée, 2023/11/03
- [PATCH 26/29] plugins: add dllexport and dllimport to api funcs, Alex Bennée, 2023/11/03
- [PATCH 08/29] gdbstub: Add num_regs member to GDBFeature,
Alex Bennée <=
- [PATCH 13/29] target/riscv: Use GDBFeature for dynamic XML, Alex Bennée, 2023/11/03
- [PATCH 10/29] gdbstub: Introduce GDBFeatureBuilder, Alex Bennée, 2023/11/03
- [PATCH 22/29] cpu: Call plugin hooks only when ready, Alex Bennée, 2023/11/03
- [PATCH 14/29] gdbstub: Use GDBFeature for gdb_register_coprocessor, Alex Bennée, 2023/11/03
- [PATCH 11/29] target/arm: Use GDBFeature for dynamic XML, Alex Bennée, 2023/11/03
- [PATCH 16/29] gdbstub: Change gdb_get_reg_cb and gdb_set_reg_cb, Alex Bennée, 2023/11/03
- [PATCH 15/29] gdbstub: Use GDBFeature for GDBRegisterState, Alex Bennée, 2023/11/03
- [PATCH 23/29] plugins: Use different helpers when reading registers, Alex Bennée, 2023/11/03