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