| # | |
| # Copyright (c) 2011-2013, ARM Limited. All rights reserved. | |
| # | |
| # This program and the accompanying materials | |
| # are licensed and made available under the terms and conditions of the BSD License | |
| # which accompanies this distribution. The full text of the license may be found at | |
| # http://opensource.org/licenses/bsd-license.php | |
| # | |
| # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| # | |
| from arm_ds.debugger_v1 import Debugger | |
| from arm_ds.debugger_v1 import DebugException | |
| import re, sys, getopt | |
| import edk2_debugger | |
| # Reload external classes | |
| reload(edk2_debugger) | |
| def usage(): | |
| print "-v,--verbose" | |
| print "-a,--all: Load all symbols" | |
| print "-l,--report=: Filename for the EDK2 report log" | |
| print "-m,--sysmem=(base,size): System Memory region" | |
| print "-f,--fv=(base,size): Firmware region" | |
| print "-r,--rom=(base,size): ROM region" | |
| verbose = False | |
| load_all = False | |
| report_file = None | |
| regions = [] | |
| opts,args = getopt.getopt(sys.argv[1:], "hvar:vm:vr:vf:v", ["help","verbose","all","report=","sysmem=","rom=","fv="]) | |
| if (opts is None) or (not opts): | |
| report_file = '../../../report.log' | |
| else: | |
| region_reg = re.compile("\((.*),(.*)\)") | |
| base_reg = re.compile("(.*)") | |
| for o,a in opts: | |
| region_type = None | |
| regex = None | |
| m = None | |
| if o in ("-h","--help"): | |
| usage() | |
| sys.exit() | |
| elif o in ("-v","--verbose"): | |
| verbose = True | |
| elif o in ("-a","--all"): | |
| load_all = True | |
| elif o in ("-l","--report"): | |
| report_file = a | |
| elif o in ("-m","--sysmem"): | |
| region_type = edk2_debugger.ArmPlatformDebugger.REGION_TYPE_SYSMEM | |
| regex = region_reg | |
| elif o in ("-f","--fv"): | |
| region_type = edk2_debugger.ArmPlatformDebugger.REGION_TYPE_FV | |
| regex = region_reg | |
| elif o in ("-r","--rom"): | |
| region_type = edk2_debugger.ArmPlatformDebugger.REGION_TYPE_ROM | |
| regex = region_reg | |
| else: | |
| assert False, "Unhandled option (%s)" % o | |
| if region_type: | |
| m = regex.match(a) | |
| if m: | |
| if regex.groups == 1: | |
| regions.append((region_type,int(m.group(1),0),0)) | |
| else: | |
| regions.append((region_type,int(m.group(1),0),int(m.group(2),0))) | |
| else: | |
| if regex.groups == 1: | |
| raise Exception('cmd_load_symbols', "Expect a base address") | |
| else: | |
| raise Exception('cmd_load_symbols', "Expect a region format as (base,size)") | |
| # Debugger object for accessing the debugger | |
| debugger = Debugger() | |
| # Initialisation commands | |
| ec = debugger.getExecutionContext(0) | |
| ec.getExecutionService().stop() | |
| ec.getExecutionService().waitForStop() | |
| # in case the execution context reference is out of date | |
| ec = debugger.getExecutionContext(0) | |
| try: | |
| armplatform_debugger = edk2_debugger.ArmPlatformDebugger(ec, report_file, regions, verbose) | |
| if load_all: | |
| armplatform_debugger.load_all_symbols() | |
| else: | |
| armplatform_debugger.load_current_symbols() | |
| except IOError, (ErrorNumber, ErrorMessage): | |
| print "Error: %s" % ErrorMessage | |
| except Exception, (ErrorClass, ErrorMessage): | |
| print "Error(%s): %s" % (ErrorClass, ErrorMessage) | |
| except DebugException, de: | |
| print "DebugError: %s" % (de.getMessage()) |