qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

sha1.py (2256B)


      1 from __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 
      9 import gdb
     10 import sys
     11 
     12 initial_vlen = 0
     13 failcount = 0
     14 
     15 def 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 
     24 def 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 
     38 def run_test():
     39     "Run through the tests one by one"
     40 
     41     check_break("SHA1Init")
     42 
     43     # Check step and inspect values. We do a double next after the
     44     # breakpoint as depending on the version of gdb we may step the
     45     # preamble and not the first actual line of source.
     46     gdb.execute("next")
     47     gdb.execute("next")
     48     val_ctx = gdb.parse_and_eval("context->state[0]")
     49     exp_ctx = 0x67452301
     50     report(int(val_ctx) == exp_ctx, "context->state[0] == %x" % exp_ctx);
     51 
     52     gdb.execute("next")
     53     val_ctx = gdb.parse_and_eval("context->state[1]")
     54     exp_ctx = 0xEFCDAB89
     55     report(int(val_ctx) == exp_ctx, "context->state[1] == %x" % exp_ctx);
     56 
     57     # finally check we don't barf inspecting registers
     58     gdb.execute("info registers")
     59 
     60 #
     61 # This runs as the script it sourced (via -x, via run-test.py)
     62 #
     63 try:
     64     inferior = gdb.selected_inferior()
     65     arch = inferior.architecture()
     66     print("ATTACHED: %s" % arch.name())
     67 except (gdb.error, AttributeError):
     68     print("SKIPPING (not connected)", file=sys.stderr)
     69     exit(0)
     70 
     71 if gdb.parse_and_eval('$pc') == 0:
     72     print("SKIP: PC not set")
     73     exit(0)
     74 
     75 try:
     76     # These are not very useful in scripts
     77     gdb.execute("set pagination off")
     78     gdb.execute("set confirm off")
     79 
     80     # Run the actual tests
     81     run_test()
     82 except (gdb.error):
     83     print ("GDB Exception: %s" % (sys.exc_info()[0]))
     84     failcount += 1
     85     pass
     86 
     87 print("All tests complete: %d failures" % failcount)
     88 exit(failcount)