1df3ca223SAlex Bennéefrom __future__ import print_function 2df3ca223SAlex Bennée# 3df3ca223SAlex Bennée# A very simple smoke test for debugging the SHA1 userspace test on 4df3ca223SAlex Bennée# each target. 5df3ca223SAlex Bennée# 6df3ca223SAlex Bennée# This is launched via tests/guest-debug/run-test.py 7df3ca223SAlex Bennée# 8df3ca223SAlex Bennée 9df3ca223SAlex Bennéeimport gdb 10*4d48c1bcSIlya Leoshkevichfrom test_gdbstub import main, report 11*4d48c1bcSIlya Leoshkevich 12df3ca223SAlex Bennée 13df3ca223SAlex Bennéeinitial_vlen = 0 14df3ca223SAlex Bennée 15df3ca223SAlex Bennée 16df3ca223SAlex Bennéedef check_break(sym_name): 17df3ca223SAlex Bennée "Setup breakpoint, continue and check we stopped." 18df3ca223SAlex Bennée sym, ok = gdb.lookup_symbol(sym_name) 19df3ca223SAlex Bennée bp = gdb.Breakpoint(sym_name) 20df3ca223SAlex Bennée 21df3ca223SAlex Bennée gdb.execute("c") 22df3ca223SAlex Bennée 23df3ca223SAlex Bennée # hopefully we came back 24df3ca223SAlex Bennée end_pc = gdb.parse_and_eval('$pc') 25df3ca223SAlex Bennée report(bp.hit_count == 1, 26df3ca223SAlex Bennée "break @ %s (%s %d hits)" % (end_pc, sym.value(), bp.hit_count)) 27df3ca223SAlex Bennée 28df3ca223SAlex Bennée bp.delete() 29df3ca223SAlex Bennée 30*4d48c1bcSIlya Leoshkevich 31df3ca223SAlex Bennéedef run_test(): 32df3ca223SAlex Bennée "Run through the tests one by one" 33df3ca223SAlex Bennée 34df3ca223SAlex Bennée check_break("SHA1Init") 35df3ca223SAlex Bennée 361cb8d12fSAlex Bennée # Check step and inspect values. We do a double next after the 371cb8d12fSAlex Bennée # breakpoint as depending on the version of gdb we may step the 381cb8d12fSAlex Bennée # preamble and not the first actual line of source. 391cb8d12fSAlex Bennée gdb.execute("next") 40df3ca223SAlex Bennée gdb.execute("next") 41df3ca223SAlex Bennée val_ctx = gdb.parse_and_eval("context->state[0]") 42df3ca223SAlex Bennée exp_ctx = 0x67452301 43df3ca223SAlex Bennée report(int(val_ctx) == exp_ctx, "context->state[0] == %x" % exp_ctx); 44df3ca223SAlex Bennée 45df3ca223SAlex Bennée gdb.execute("next") 46df3ca223SAlex Bennée val_ctx = gdb.parse_and_eval("context->state[1]") 47df3ca223SAlex Bennée exp_ctx = 0xEFCDAB89 48df3ca223SAlex Bennée report(int(val_ctx) == exp_ctx, "context->state[1] == %x" % exp_ctx); 49df3ca223SAlex Bennée 50df3ca223SAlex Bennée # finally check we don't barf inspecting registers 51df3ca223SAlex Bennée gdb.execute("info registers") 52df3ca223SAlex Bennée 53df3ca223SAlex Bennée 54*4d48c1bcSIlya Leoshkevichmain(run_test) 55