1*f4a23e17SAlex Bennéefrom __future__ import print_function 2*f4a23e17SAlex Bennée# 3*f4a23e17SAlex Bennée# Test the SVE ZReg reports the right amount of data. It uses the 4*f4a23e17SAlex Bennée# sve-ioctl test and examines the register data each time the 5*f4a23e17SAlex Bennée# __sve_ld_done breakpoint is hit. 6*f4a23e17SAlex Bennée# 7*f4a23e17SAlex Bennée# This is launched via tests/guest-debug/run-test.py 8*f4a23e17SAlex Bennée# 9*f4a23e17SAlex Bennée 10*f4a23e17SAlex Bennéeimport gdb 11*f4a23e17SAlex Bennéeimport sys 12*f4a23e17SAlex Bennée 13*f4a23e17SAlex Bennéeinitial_vlen = 0 14*f4a23e17SAlex Bennéefailcount = 0 15*f4a23e17SAlex Bennée 16*f4a23e17SAlex Bennéedef report(cond, msg): 17*f4a23e17SAlex Bennée "Report success/fail of test" 18*f4a23e17SAlex Bennée if cond: 19*f4a23e17SAlex Bennée print ("PASS: %s" % (msg)) 20*f4a23e17SAlex Bennée else: 21*f4a23e17SAlex Bennée print ("FAIL: %s" % (msg)) 22*f4a23e17SAlex Bennée global failcount 23*f4a23e17SAlex Bennée failcount += 1 24*f4a23e17SAlex Bennée 25*f4a23e17SAlex Bennéeclass TestBreakpoint(gdb.Breakpoint): 26*f4a23e17SAlex Bennée def __init__(self, sym_name="__sve_ld_done"): 27*f4a23e17SAlex Bennée super(TestBreakpoint, self).__init__(sym_name) 28*f4a23e17SAlex Bennée # self.sym, ok = gdb.lookup_symbol(sym_name) 29*f4a23e17SAlex Bennée 30*f4a23e17SAlex Bennée def stop(self): 31*f4a23e17SAlex Bennée val_i = gdb.parse_and_eval('i') 32*f4a23e17SAlex Bennée global initial_vlen 33*f4a23e17SAlex Bennée try: 34*f4a23e17SAlex Bennée for i in range(0, int(val_i)): 35*f4a23e17SAlex Bennée val_z = gdb.parse_and_eval("$z0.b.u[%d]" % i) 36*f4a23e17SAlex Bennée report(int(val_z) == i, "z0.b.u[%d] == %d" % (i, i)) 37*f4a23e17SAlex Bennée for i in range(i + 1, initial_vlen): 38*f4a23e17SAlex Bennée val_z = gdb.parse_and_eval("$z0.b.u[%d]" % i) 39*f4a23e17SAlex Bennée report(int(val_z) == 0, "z0.b.u[%d] == 0" % (i)) 40*f4a23e17SAlex Bennée except gdb.error: 41*f4a23e17SAlex Bennée report(False, "checking zregs (out of range)") 42*f4a23e17SAlex Bennée 43*f4a23e17SAlex Bennée 44*f4a23e17SAlex Bennéedef run_test(): 45*f4a23e17SAlex Bennée "Run through the tests one by one" 46*f4a23e17SAlex Bennée 47*f4a23e17SAlex Bennée print ("Setup breakpoint") 48*f4a23e17SAlex Bennée bp = TestBreakpoint() 49*f4a23e17SAlex Bennée 50*f4a23e17SAlex Bennée global initial_vlen 51*f4a23e17SAlex Bennée vg = gdb.parse_and_eval("$vg") 52*f4a23e17SAlex Bennée initial_vlen = int(vg) * 8 53*f4a23e17SAlex Bennée 54*f4a23e17SAlex Bennée gdb.execute("c") 55*f4a23e17SAlex Bennée 56*f4a23e17SAlex Bennée# 57*f4a23e17SAlex Bennée# This runs as the script it sourced (via -x, via run-test.py) 58*f4a23e17SAlex Bennée# 59*f4a23e17SAlex Bennéetry: 60*f4a23e17SAlex Bennée inferior = gdb.selected_inferior() 61*f4a23e17SAlex Bennée if inferior.was_attached == False: 62*f4a23e17SAlex Bennée print("SKIPPING (failed to attach)", file=sys.stderr) 63*f4a23e17SAlex Bennée exit(0) 64*f4a23e17SAlex Bennée arch = inferior.architecture() 65*f4a23e17SAlex Bennée report(arch.name() == "aarch64", "connected to aarch64") 66*f4a23e17SAlex Bennéeexcept (gdb.error, AttributeError): 67*f4a23e17SAlex Bennée print("SKIPPING (not connected)", file=sys.stderr) 68*f4a23e17SAlex Bennée exit(0) 69*f4a23e17SAlex Bennée 70*f4a23e17SAlex Bennéetry: 71*f4a23e17SAlex Bennée # These are not very useful in scripts 72*f4a23e17SAlex Bennée gdb.execute("set pagination off") 73*f4a23e17SAlex Bennée gdb.execute("set confirm off") 74*f4a23e17SAlex Bennée 75*f4a23e17SAlex Bennée # Run the actual tests 76*f4a23e17SAlex Bennée run_test() 77*f4a23e17SAlex Bennéeexcept: 78*f4a23e17SAlex Bennée print ("GDB Exception: %s" % (sys.exc_info()[0])) 79*f4a23e17SAlex Bennée failcount += 1 80*f4a23e17SAlex Bennée import code 81*f4a23e17SAlex Bennée code.InteractiveConsole(locals=globals()).interact() 82*f4a23e17SAlex Bennée raise 83*f4a23e17SAlex Bennée 84*f4a23e17SAlex Bennéeprint("All tests complete: %d failures" % failcount) 85*f4a23e17SAlex Bennéeexit(failcount) 86