1from __future__ import print_function 2# 3# A very simple smoke test for debugging the SHA1 userspace test on 4# each target. 5# 6# This is launched via tests/guest-debug/run-test.py 7# 8 9import gdb 10import sys 11 12initial_vlen = 0 13failcount = 0 14 15def report(cond, msg): 16 "Report success/fail of test" 17 if cond: 18 print("PASS: %s" % (msg)) 19 else: 20 print("FAIL: %s" % (msg)) 21 global failcount 22 failcount += 1 23 24def check_break(sym_name): 25 "Setup breakpoint, continue and check we stopped." 26 sym, ok = gdb.lookup_symbol(sym_name) 27 bp = gdb.Breakpoint(sym_name) 28 29 gdb.execute("c") 30 31 # hopefully we came back 32 end_pc = gdb.parse_and_eval('$pc') 33 report(bp.hit_count == 1, 34 "break @ %s (%s %d hits)" % (end_pc, sym.value(), bp.hit_count)) 35 36 bp.delete() 37 38def run_test(): 39 "Run through the tests one by one" 40 41 check_break("SHA1Init") 42 43 # check step and inspect values 44 gdb.execute("next") 45 val_ctx = gdb.parse_and_eval("context->state[0]") 46 exp_ctx = 0x67452301 47 report(int(val_ctx) == exp_ctx, "context->state[0] == %x" % exp_ctx); 48 49 gdb.execute("next") 50 val_ctx = gdb.parse_and_eval("context->state[1]") 51 exp_ctx = 0xEFCDAB89 52 report(int(val_ctx) == exp_ctx, "context->state[1] == %x" % exp_ctx); 53 54 # finally check we don't barf inspecting registers 55 gdb.execute("info registers") 56 57# 58# This runs as the script it sourced (via -x, via run-test.py) 59# 60try: 61 inferior = gdb.selected_inferior() 62 arch = inferior.architecture() 63 print("ATTACHED: %s" % arch.name()) 64except (gdb.error, AttributeError): 65 print("SKIPPING (not connected)", file=sys.stderr) 66 exit(0) 67 68try: 69 # These are not very useful in scripts 70 gdb.execute("set pagination off") 71 gdb.execute("set confirm off") 72 73 # Run the actual tests 74 run_test() 75except (gdb.error): 76 print ("GDB Exception: %s" % (sys.exc_info()[0])) 77 failcount += 1 78 pass 79 80print("All tests complete: %d failures" % failcount) 81exit(failcount) 82