1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- """Helper functions for gdbstub testing
- """
- from __future__ import print_function
- import argparse
- import gdb
- import os
- import sys
- import traceback
- fail_count = 0
- def gdb_exit(status):
- gdb.execute(f"exit {status}")
- class arg_parser(argparse.ArgumentParser):
- def exit(self, status=None, message=""):
- print("Wrong GDB script test argument! " + message)
- gdb_exit(1)
- def report(cond, msg):
- """Report success/fail of a test"""
- if cond:
- print("PASS: {}".format(msg))
- else:
- print("FAIL: {}".format(msg))
- global fail_count
- fail_count += 1
- def main(test, expected_arch=None):
- """Run a test function
- This runs as the script it sourced (via -x, via run-test.py)."""
- try:
- inferior = gdb.selected_inferior()
- arch = inferior.architecture()
- print("ATTACHED: {}".format(arch.name()))
- if expected_arch is not None:
- report(arch.name() == expected_arch,
- "connected to {}".format(expected_arch))
- except (gdb.error, AttributeError):
- print("SKIP: not connected")
- gdb_exit(0)
- if gdb.parse_and_eval("$pc") == 0:
- print("SKIP: PC not set")
- gdb_exit(0)
- try:
- test()
- except:
- print("GDB Exception:")
- traceback.print_exc(file=sys.stdout)
- global fail_count
- fail_count += 1
- if "QEMU_TEST_INTERACTIVE" in os.environ:
- import code
- code.InteractiveConsole(locals=globals()).interact()
- raise
- try:
- gdb.execute("kill")
- except gdb.error:
- pass
- print("All tests complete: {} failures".format(fail_count))
- gdb_exit(fail_count)
|