#------------------------------------------------------------------------------- | |
# Copyright (c) 2020, Arm Limited. All rights reserved. | |
# | |
# SPDX-License-Identifier: BSD-3-Clause | |
# | |
#------------------------------------------------------------------------------- | |
""" This module is the entry point of the IRQ testing tool. | |
""" | |
import argparse | |
import json | |
import logging | |
import os | |
import sys | |
# Workaround for GDB: Add current directory to the module search path | |
sys.path.insert(0, os.getcwd()) | |
from irq_test_abstract_debugger import Location | |
from irq_test_dummy_debugger import DummyDebugger | |
from irq_test_executor import TestExecutor | |
def create_argparser(): | |
""" Create an argument parser for the script | |
This parser enumerates the arguments that are necessary for all the | |
debuggers. Debugger implementations might add other arguments to this | |
parser. | |
""" | |
parser = argparse.ArgumentParser() | |
parser.add_argument("-w", "--sw-break", | |
help="use sw breakpoint (the default is HW breakpoint)", | |
action="store_true") | |
parser.add_argument("-q", "--irqs", | |
type=str, | |
help="the name of the irqs json", | |
required=True) | |
parser.add_argument("-b", "--breakpoints", | |
type=str, | |
help="the name of the breakpoints json", | |
required=True) | |
parser.add_argument("-t", "--testcase", | |
type=str, | |
help="The testcase to execute", | |
required=True) | |
return parser | |
def main(): | |
""" The main function of the script | |
Detects the debugger that it is started in, creates the debugger | |
implementation instance, and either executes the test, or registers a | |
command in the debugger. For details see the README.rst | |
""" | |
try: | |
# TODO: evironment checking should be refactored to the debugger | |
# implementations | |
from arm_ds.debugger_v1 import Debugger | |
debugger_type = 'Arm-DS' | |
except ImportError: | |
logging.debug('Failed to import Arm-DS scripting env, try GDB') | |
try: | |
# TODO: evironment checking should be refactored to the debugger | |
# implementations | |
import gdb | |
debugger_type = 'GDB' | |
except ImportError: | |
logging.debug("Failed to import GDB scripting env, fall back do " | |
"dummy") | |
debugger_type = 'dummy' | |
logging.info("The debugger type selected is: %s", debugger_type) | |
# create a debugger controller instance | |
if debugger_type == 'Arm-DS': | |
from irq_test_Arm_DS_debugger import ArmDSDebugger | |
logging.debug("initialising debugger object...") | |
arg_parser = create_argparser() | |
try: | |
args = arg_parser.parse_args() | |
except: | |
logging.error("Failed to parse command line parameters") | |
return | |
# TODO: Fail gracefully in case of an argparse error | |
debugger = ArmDSDebugger(args.sw_break) | |
executor = TestExecutor(debugger) | |
executor.execute(args.irqs, args.breakpoints, args.testcase) | |
elif debugger_type == 'GDB': | |
from irq_test_gdb_debugger import GDBDebugger | |
from irq_test_gdb_debugger import TestIRQsCommand | |
logging.debug("initialising debugger object...") | |
arg_parser = create_argparser() | |
# register the 'test_irqs' custom command | |
TestIRQsCommand(arg_parser) | |
logging.info("Command 'test_irqs' is successfully registered") | |
elif debugger_type == 'dummy': | |
arg_parser = create_argparser() | |
args = arg_parser.parse_args() | |
debugger = DummyDebugger(args.sw_break) | |
executor = TestExecutor(debugger) | |
executor.execute(args.irqs, args.breakpoints, args.testcase) | |
if __name__ == "__main__": | |
logging.basicConfig(format='===== %(levelname)s: %(message)s', | |
level=logging.DEBUG, stream=sys.stdout) | |
main() |