1# 2# Copyright (c) 2011-2013, ARM Limited. All rights reserved. 3# 4# SPDX-License-Identifier: BSD-2-Clause-Patent 5# 6 7from arm_ds.debugger_v1 import Debugger 8from arm_ds.debugger_v1 import DebugException 9 10import re, sys, getopt 11 12import edk2_debugger 13 14# Reload external classes 15reload(edk2_debugger) 16 17def usage(): 18 print "-v,--verbose" 19 print "-a,--all: Load all symbols" 20 print "-l,--report=: Filename for the EDK2 report log" 21 print "-m,--sysmem=(base,size): System Memory region" 22 print "-f,--fv=(base,size): Firmware region" 23 print "-r,--rom=(base,size): ROM region" 24 25verbose = False 26load_all = False 27report_file = None 28regions = [] 29opts,args = getopt.getopt(sys.argv[1:], "hvar:vm:vr:vf:v", ["help","verbose","all","report=","sysmem=","rom=","fv="]) 30if (opts is None) or (not opts): 31 report_file = '../../../report.log' 32else: 33 region_reg = re.compile("\((.*),(.*)\)") 34 base_reg = re.compile("(.*)") 35 36 for o,a in opts: 37 region_type = None 38 regex = None 39 m = None 40 if o in ("-h","--help"): 41 usage() 42 sys.exit() 43 elif o in ("-v","--verbose"): 44 verbose = True 45 elif o in ("-a","--all"): 46 load_all = True 47 elif o in ("-l","--report"): 48 report_file = a 49 elif o in ("-m","--sysmem"): 50 region_type = edk2_debugger.ArmPlatformDebugger.REGION_TYPE_SYSMEM 51 regex = region_reg 52 elif o in ("-f","--fv"): 53 region_type = edk2_debugger.ArmPlatformDebugger.REGION_TYPE_FV 54 regex = region_reg 55 elif o in ("-r","--rom"): 56 region_type = edk2_debugger.ArmPlatformDebugger.REGION_TYPE_ROM 57 regex = region_reg 58 else: 59 assert False, "Unhandled option (%s)" % o 60 61 if region_type: 62 m = regex.match(a) 63 if m: 64 if regex.groups == 1: 65 regions.append((region_type,int(m.group(1),0),0)) 66 else: 67 regions.append((region_type,int(m.group(1),0),int(m.group(2),0))) 68 else: 69 if regex.groups == 1: 70 raise Exception('cmd_load_symbols', "Expect a base address") 71 else: 72 raise Exception('cmd_load_symbols', "Expect a region format as (base,size)") 73 74# Debugger object for accessing the debugger 75debugger = Debugger() 76 77# Initialisation commands 78ec = debugger.getExecutionContext(0) 79ec.getExecutionService().stop() 80ec.getExecutionService().waitForStop() 81# in case the execution context reference is out of date 82ec = debugger.getExecutionContext(0) 83 84try: 85 armplatform_debugger = edk2_debugger.ArmPlatformDebugger(ec, report_file, regions, verbose) 86 87 if load_all: 88 armplatform_debugger.load_all_symbols() 89 else: 90 armplatform_debugger.load_current_symbols() 91except IOError, (ErrorNumber, ErrorMessage): 92 print "Error: %s" % ErrorMessage 93except Exception, (ErrorClass, ErrorMessage): 94 print "Error(%s): %s" % (ErrorClass, ErrorMessage) 95except DebugException, de: 96 print "DebugError: %s" % (de.getMessage()) 97