target/arm: Added test case for SME register exposure to GDB
This patch adds a test case to test SME register exposure to a remote gdb debugging session. This test simply sets and reads SME registers. Signed-off-by: Vacha Bhavsar <vacha.bhavsar@oss.qualcomm.com> Message-id: 20250909161012.2561593-4-vacha.bhavsar@oss.qualcomm.com [PMM: fixed various python formatting nits] Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
030f0ba117
commit
904b8aae52
3 changed files with 152 additions and 0 deletions
6
configure
vendored
6
configure
vendored
|
|
@ -1839,6 +1839,12 @@ for target in $target_list; do
|
|||
echo "GDB=$gdb_bin" >> $config_target_mak
|
||||
fi
|
||||
|
||||
if test "${gdb_arches#*$arch}" != "$gdb_arches" && version_ge $gdb_version 14.1; then
|
||||
echo "GDB_HAS_SME_TILES=y" >> $config_target_mak
|
||||
else
|
||||
echo "GDB_HAS_SME_TILES=n" >> $config_target_mak
|
||||
fi
|
||||
|
||||
if test "${gdb_arches#*aarch64}" != "$gdb_arches" && version_ge $gdb_version 15.1; then
|
||||
echo "GDB_HAS_MTE=y" >> $config_target_mak
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -134,6 +134,35 @@ run-gdbstub-sve-ioctls: sve-ioctls
|
|||
|
||||
EXTRA_RUNS += run-gdbstub-sysregs run-gdbstub-sve-ioctls
|
||||
|
||||
ifneq ($(CROSS_AS_HAS_ARMV9_SME),)
|
||||
# SME gdbstub tests
|
||||
|
||||
run-gdbstub-sysregs-sme: sysregs
|
||||
$(call run-test, $@, $(GDB_SCRIPT) \
|
||||
--gdb $(GDB) \
|
||||
--qemu $(QEMU) --qargs "$(QEMU_OPTS)" \
|
||||
--bin $< --test $(AARCH64_SRC)/gdbstub/test-sme.py \
|
||||
-- test_sme --gdb_basic_za_test, \
|
||||
basic gdbstub SME support)
|
||||
|
||||
ifeq ($(GDB_HAS_SME_TILES),y)
|
||||
run-gdbstub-sysregs-sme-tile-slice: sysregs
|
||||
$(call run-test, $@, $(GDB_SCRIPT) \
|
||||
--gdb $(GDB) \
|
||||
--qemu $(QEMU) --qargs "$(QEMU_OPTS)" \
|
||||
--bin $< --test $(AARCH64_SRC)/gdbstub/test-sme.py \
|
||||
-- test_sme --gdb_tile_slice_test, \
|
||||
gdbstub SME ZA tile slice support)
|
||||
else
|
||||
run-gdbstub-sysregs-sme-tile-slice: sysregs
|
||||
$(call skip-test,"gdbstub SME ZA tile slice support", \
|
||||
"selected gdb ($(GDB)) does not support SME ZA tile slices")
|
||||
endif
|
||||
|
||||
EXTRA_RUNS += run-gdbstub-sysregs-sme run-gdbstub-sysregs-sme-tile-slice
|
||||
|
||||
endif
|
||||
|
||||
ifeq ($(GDB_HAS_MTE),y)
|
||||
run-gdbstub-mte: mte-8
|
||||
$(call run-test, $@, $(GDB_SCRIPT) \
|
||||
|
|
|
|||
117
tests/tcg/aarch64/gdbstub/test-sme.py
Normal file
117
tests/tcg/aarch64/gdbstub/test-sme.py
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
#
|
||||
# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#
|
||||
# Test the SME registers are visible and changeable via gdbstub
|
||||
#
|
||||
# This is launched via tests/guest-debug/run-test.py
|
||||
#
|
||||
|
||||
import argparse
|
||||
import gdb
|
||||
from test_gdbstub import main, report
|
||||
|
||||
MAGIC = 0x01020304
|
||||
BASIC_ZA_TEST = 0
|
||||
TILE_SLICE_TEST = 0
|
||||
|
||||
|
||||
def run_test():
|
||||
"""Run the requested test(s) for SME ZA gdbstub support"""
|
||||
|
||||
if BASIC_ZA_TEST:
|
||||
run_basic_sme_za_gdbstub_support_test()
|
||||
if TILE_SLICE_TEST:
|
||||
run_basic_sme_za_tile_slice_gdbstub_support_test()
|
||||
|
||||
|
||||
def run_basic_sme_za_gdbstub_support_test():
|
||||
"""Test reads and writes to the SME ZA register at the byte level"""
|
||||
|
||||
frame = gdb.selected_frame()
|
||||
rname = "za"
|
||||
za = frame.read_register(rname)
|
||||
report(True, "Reading %s" % rname)
|
||||
|
||||
# Writing to the ZA register, byte by byte.
|
||||
for i in range(0, 16):
|
||||
for j in range(0, 16):
|
||||
cmd = "set $za[%d][%d] = 0x01" % (i, j)
|
||||
gdb.execute(cmd)
|
||||
report(True, "%s" % cmd)
|
||||
|
||||
# Reading from the ZA register, byte by byte.
|
||||
for i in range(0, 16):
|
||||
for j in range(0, 16):
|
||||
reg = "$za[%d][%d]" % (i, j)
|
||||
v = gdb.parse_and_eval(reg)
|
||||
report(str(v.type) == "uint8_t", "size of %s" % (reg))
|
||||
report(v == 0x1, "%s is 0x%x" % (reg, 0x1))
|
||||
|
||||
|
||||
def run_basic_sme_za_tile_slice_gdbstub_support_test():
|
||||
"""Test reads and writes of SME ZA horizontal and vertical tile slices
|
||||
|
||||
Test if SME ZA tile slices, both horizontal and vertical,
|
||||
can be correctly read and written to. The sizes to test
|
||||
are quadwords and doublewords.
|
||||
"""
|
||||
|
||||
sizes = {}
|
||||
sizes["q"] = "uint128_t"
|
||||
sizes["d"] = "uint64_t"
|
||||
|
||||
# Accessing requested sizes of elements of ZA
|
||||
for size in sizes:
|
||||
|
||||
# Accessing various ZA tiles
|
||||
for i in range(0, 4):
|
||||
|
||||
# Accessing various horizontal slices for each ZA tile
|
||||
for j in range(0, 4):
|
||||
# Writing to various elements in each tile slice
|
||||
for k in range(0, 4):
|
||||
cmd = "set $za%dh%c%d[%d] = 0x%x" % (i, size, j, k, MAGIC)
|
||||
gdb.execute(cmd)
|
||||
report(True, "%s" % cmd)
|
||||
|
||||
# Reading from the written elements in each tile slice
|
||||
for k in range(0, 4):
|
||||
reg = "$za%dh%c%d[%d]" % (i, size, j, k)
|
||||
v = gdb.parse_and_eval(reg)
|
||||
report(str(v.type) == sizes[size], "size of %s" % (reg))
|
||||
report(v == MAGIC, "%s is 0x%x" % (reg, MAGIC))
|
||||
|
||||
# Accessing various vertical slices for each ZA tile
|
||||
for j in range(0, 4):
|
||||
# Writing to various elements in each tile slice
|
||||
for k in range(0, 4):
|
||||
cmd = "set $za%dv%c%d[%d] = 0x%x" % (i, size, j, k, MAGIC)
|
||||
gdb.execute(cmd)
|
||||
report(True, "%s" % cmd)
|
||||
|
||||
# Reading from the written elements in each tile slice
|
||||
for k in range(0, 4):
|
||||
reg = "$za%dv%c%d[%d]" % (i, size, j, k)
|
||||
v = gdb.parse_and_eval(reg)
|
||||
report(str(v.type) == sizes[size], "size of %s" % (reg))
|
||||
report(v == MAGIC, "%s is 0x%x" % (reg, MAGIC))
|
||||
|
||||
|
||||
parser = argparse.ArgumentParser(description="A gdbstub test for SME support")
|
||||
parser.add_argument("--gdb_basic_za_test",
|
||||
help="Enable test for basic SME ZA support",
|
||||
action="store_true")
|
||||
parser.add_argument("--gdb_tile_slice_test",
|
||||
help="Enable test for ZA tile slice support",
|
||||
action="store_true")
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.gdb_basic_za_test:
|
||||
BASIC_ZA_TEST = 1
|
||||
if args.gdb_tile_slice_test:
|
||||
TILE_SLICE_TEST = 1
|
||||
|
||||
main(run_test, expected_arch="aarch64")
|
||||
Loading…
Add table
Add a link
Reference in a new issue