diff options
| author | Stefan Hajnoczi <stefanha@redhat.com> | 2023-11-09 08:25:12 +0800 |
|---|---|---|
| committer | Stefan Hajnoczi <stefanha@redhat.com> | 2023-11-09 08:25:12 +0800 |
| commit | 9a4750143cefeee18727f2c5ede5b6a4ad80ff01 (patch) | |
| tree | 357c1b847be31c033d0e9bf062fdaf993d3c0af9 /scripts/feature_to_c.py | |
| parent | a3c3aaa846ad61b801e7196482dcf4afb8ba34e4 (diff) | |
| parent | a475f32b075d566f3f92f94387d50e132b73bcb8 (diff) | |
| download | focaccia-qemu-9a4750143cefeee18727f2c5ede5b6a4ad80ff01.tar.gz focaccia-qemu-9a4750143cefeee18727f2c5ede5b6a4ad80ff01.zip | |
Merge tag 'pull-halloween-omnibus-081123-1' of https://gitlab.com/stsquad/qemu into staging
Final test, gdbstub, plugin and gitdm updates for 8.2 - fix duplicate register in arm xml - hide various duplicate system registers from gdbstub - add new gdb register test to the CI (skipping s390x/ppc64 for now) - introduce GDBFeatureBuilder - move plugin initialisation to after vCPU init completes - enable building TCG plugins on Windows platform - various gitdm updates - some mailmap fixes - disable testing for nios2 signals which have regressed # -----BEGIN PGP SIGNATURE----- # # iQEzBAABCgAdFiEEZoWumedRZ7yvyN81+9DbCVqeKkQFAmVLpk4ACgkQ+9DbCVqe # KkT7Zwf+LgNS2T8Gd6UBMk50Zwew3DSzK3HRRkAlxSV9vN9TCprnVDGJn7ObRpfq # QCwiTmh20JRPFFBEsPGy/ozNPZsuWbt1/vyh3fnU4KD3aMySuyc/Hb9/mONPC9VE # zh1mUxLCx10uwG5qF8jupIp22BQYD7B9i4YSF1gAUGsQNU7BPvcBDeDzyhCItJen # 73oG9RQm7vDbjTOcGDkAMAG8iwLt07oMgFrDSgD8x7RWOxG8aiM3ninAW6S5GcO3 # s49t0rTqJIu+pOncYYzmPvFxyZ/6W82tsJYtfxlVML02qj24HOmLWywRWgL5b10y # TyXsDba3Ru8ez/kEaVVX6u9N1G/Ktg== # =or8W # -----END PGP SIGNATURE----- # gpg: Signature made Wed 08 Nov 2023 23:16:30 HKT # gpg: using RSA key 6685AE99E75167BCAFC8DF35FBD0DB095A9E2A44 # gpg: Good signature from "Alex Bennée (Master Work Key) <alex.bennee@linaro.org>" [unknown] # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: 6685 AE99 E751 67BC AFC8 DF35 FBD0 DB09 5A9E 2A44 * tag 'pull-halloween-omnibus-081123-1' of https://gitlab.com/stsquad/qemu: (23 commits) Revert "tests/tcg/nios2: Re-enable linux-user tests" mailmap: fixup some more corrupted author fields contrib/gitdm: add Daynix to domain-map contrib/gitdm: map HiSilicon to Huawei contrib/gitdm: add domain-map for Cestc contrib/gitdm: Add Rivos Inc to the domain map plugins: allow plugins to be enabled on windows gitlab: add dlltool to Windows CI plugins: disable lockstep plugin on windows plugins: make test/example plugins work on windows plugins: add dllexport and dllimport to api funcs configure: tell meson and contrib_plugins about DLLTOOL cpu: Call plugin hooks only when ready gdbstub: Introduce GDBFeatureBuilder gdbstub: Introduce gdb_find_static_feature() gdbstub: Add num_regs member to GDBFeature tests/avocado: update the tcg_plugins test tests/tcg: add an explicit gdbstub register tester target/arm: hide aliased MIDR from gdbstub target/arm: hide all versions of DBGD[RS]AR from gdbstub ... Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'scripts/feature_to_c.py')
| -rw-r--r-- | scripts/feature_to_c.py | 46 |
1 files changed, 44 insertions, 2 deletions
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 @@ for input in sys.argv[1:]: 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') |