1*51c623b0SLirong Yuanfrom __future__ import print_function
2*51c623b0SLirong Yuan#
3*51c623b0SLirong Yuan# Test auxiliary vector is loaded via gdbstub
4*51c623b0SLirong Yuan#
5*51c623b0SLirong Yuan# This is launched via tests/guest-debug/run-test.py
6*51c623b0SLirong Yuan#
7*51c623b0SLirong Yuan
8*51c623b0SLirong Yuanimport gdb
9*51c623b0SLirong Yuanimport sys
10*51c623b0SLirong Yuan
11*51c623b0SLirong Yuanfailcount = 0
12*51c623b0SLirong Yuan
13*51c623b0SLirong Yuandef report(cond, msg):
14*51c623b0SLirong Yuan    "Report success/fail of test"
15*51c623b0SLirong Yuan    if cond:
16*51c623b0SLirong Yuan        print ("PASS: %s" % (msg))
17*51c623b0SLirong Yuan    else:
18*51c623b0SLirong Yuan        print ("FAIL: %s" % (msg))
19*51c623b0SLirong Yuan        global failcount
20*51c623b0SLirong Yuan        failcount += 1
21*51c623b0SLirong Yuan
22*51c623b0SLirong Yuandef run_test():
23*51c623b0SLirong Yuan    "Run through the tests one by one"
24*51c623b0SLirong Yuan
25*51c623b0SLirong Yuan    auxv = gdb.execute("info auxv", False, True)
26*51c623b0SLirong Yuan    report(isinstance(auxv, str), "Fetched auxv from inferior")
27*51c623b0SLirong Yuan    report(auxv.find("sha1"), "Found test binary name in auxv")
28*51c623b0SLirong Yuan
29*51c623b0SLirong Yuan#
30*51c623b0SLirong Yuan# This runs as the script it sourced (via -x, via run-test.py)
31*51c623b0SLirong Yuan#
32*51c623b0SLirong Yuantry:
33*51c623b0SLirong Yuan    inferior = gdb.selected_inferior()
34*51c623b0SLirong Yuan    arch = inferior.architecture()
35*51c623b0SLirong Yuan    print("ATTACHED: %s" % arch.name())
36*51c623b0SLirong Yuanexcept (gdb.error, AttributeError):
37*51c623b0SLirong Yuan    print("SKIPPING (not connected)", file=sys.stderr)
38*51c623b0SLirong Yuan    exit(0)
39*51c623b0SLirong Yuan
40*51c623b0SLirong Yuanif gdb.parse_and_eval('$pc') == 0:
41*51c623b0SLirong Yuan    print("SKIP: PC not set")
42*51c623b0SLirong Yuan    exit(0)
43*51c623b0SLirong Yuan
44*51c623b0SLirong Yuantry:
45*51c623b0SLirong Yuan    # These are not very useful in scripts
46*51c623b0SLirong Yuan    gdb.execute("set pagination off")
47*51c623b0SLirong Yuan    gdb.execute("set confirm off")
48*51c623b0SLirong Yuan
49*51c623b0SLirong Yuan    # Run the actual tests
50*51c623b0SLirong Yuan    run_test()
51*51c623b0SLirong Yuanexcept (gdb.error):
52*51c623b0SLirong Yuan    print ("GDB Exception: %s" % (sys.exc_info()[0]))
53*51c623b0SLirong Yuan    failcount += 1
54*51c623b0SLirong Yuan    pass
55*51c623b0SLirong Yuan
56*51c623b0SLirong Yuanprint("All tests complete: %d failures" % failcount)
57*51c623b0SLirong Yuanexit(failcount)
58