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