1f4a23e17SAlex Bennéefrom __future__ import print_function 2f4a23e17SAlex Bennée# 3f4a23e17SAlex Bennée# Test the SVE ZReg reports the right amount of data. It uses the 4f4a23e17SAlex Bennée# sve-ioctl test and examines the register data each time the 5f4a23e17SAlex Bennée# __sve_ld_done breakpoint is hit. 6f4a23e17SAlex Bennée# 7f4a23e17SAlex Bennée# This is launched via tests/guest-debug/run-test.py 8f4a23e17SAlex Bennée# 9f4a23e17SAlex Bennée 10f4a23e17SAlex Bennéeimport gdb 11*4d48c1bcSIlya Leoshkevichfrom test_gdbstub import main, report 12f4a23e17SAlex Bennée 13f4a23e17SAlex Bennéeinitial_vlen = 0 14f4a23e17SAlex Bennée 15f4a23e17SAlex Bennée 16f4a23e17SAlex Bennéeclass TestBreakpoint(gdb.Breakpoint): 17f4a23e17SAlex Bennée def __init__(self, sym_name="__sve_ld_done"): 18f4a23e17SAlex Bennée super(TestBreakpoint, self).__init__(sym_name) 19f4a23e17SAlex Bennée # self.sym, ok = gdb.lookup_symbol(sym_name) 20f4a23e17SAlex Bennée 21f4a23e17SAlex Bennée def stop(self): 22f4a23e17SAlex Bennée val_i = gdb.parse_and_eval('i') 23f4a23e17SAlex Bennée global initial_vlen 24f4a23e17SAlex Bennée try: 25f4a23e17SAlex Bennée for i in range(0, int(val_i)): 26f4a23e17SAlex Bennée val_z = gdb.parse_and_eval("$z0.b.u[%d]" % i) 27f4a23e17SAlex Bennée report(int(val_z) == i, "z0.b.u[%d] == %d" % (i, i)) 28f4a23e17SAlex Bennée for i in range(i + 1, initial_vlen): 29f4a23e17SAlex Bennée val_z = gdb.parse_and_eval("$z0.b.u[%d]" % i) 30f4a23e17SAlex Bennée report(int(val_z) == 0, "z0.b.u[%d] == 0" % (i)) 31f4a23e17SAlex Bennée except gdb.error: 32f4a23e17SAlex Bennée report(False, "checking zregs (out of range)") 33f4a23e17SAlex Bennée 34797920b9SAlex Bennée # Check the aliased V registers are set and GDB has correctly 35797920b9SAlex Bennée # created them for us having recognised and handled SVE. 36797920b9SAlex Bennée try: 37797920b9SAlex Bennée for i in range(0, 16): 38797920b9SAlex Bennée val_z = gdb.parse_and_eval("$z0.b.u[%d]" % i) 39797920b9SAlex Bennée val_v = gdb.parse_and_eval("$v0.b.u[%d]" % i) 40797920b9SAlex Bennée report(int(val_z) == int(val_v), 41797920b9SAlex Bennée "v0.b.u[%d] == z0.b.u[%d]" % (i, i)) 42797920b9SAlex Bennée except gdb.error: 43797920b9SAlex Bennée report(False, "checking vregs (out of range)") 44797920b9SAlex Bennée 45f4a23e17SAlex Bennée 46f4a23e17SAlex Bennéedef run_test(): 47f4a23e17SAlex Bennée "Run through the tests one by one" 48f4a23e17SAlex Bennée 49f4a23e17SAlex Bennée print ("Setup breakpoint") 50f4a23e17SAlex Bennée bp = TestBreakpoint() 51f4a23e17SAlex Bennée 52f4a23e17SAlex Bennée global initial_vlen 53f4a23e17SAlex Bennée vg = gdb.parse_and_eval("$vg") 54f4a23e17SAlex Bennée initial_vlen = int(vg) * 8 55f4a23e17SAlex Bennée 56f4a23e17SAlex Bennée gdb.execute("c") 57f4a23e17SAlex Bennée 58f4a23e17SAlex Bennée 59*4d48c1bcSIlya Leoshkevichmain(run_test, expected_arch="aarch64") 60