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