# | |
# 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()) |