blob: 16a71431afd8ab93d8edbac8a98e8f8f4d4c487b [file] [log] [blame]
#-------------------------------------------------------------------------------
# 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()