xref: /qemu/tests/tcg/multiarch/gdbstub/sha1.py (revision 1c8e621f097362d0a28c65fa2f31054b47a5282b)
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