The debugger in Arm Development Studio 2021.2 doesn't work with "ec = debugger.getExecutionContext(0)" because it's subsequently unable to access memory. Fix it by switching to "ec = debugger.getCurrentExecutionContext()". The documentation for waitForStop() says: "It is not needed after a call to stop() because stop() is blocking." So, remove the call to waitForStop. Signed-off-by: Rebecca Cran <rebecca@bsdio.com> Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
		
			
				
	
	
		
			109 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #
 | |
| #  Copyright (c) 2011-2021, Arm Limited. All rights reserved.
 | |
| #
 | |
| #  SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| #
 | |
| 
 | |
| from arm_ds.debugger_v1 import Debugger
 | |
| from arm_ds.debugger_v1 import DebugException
 | |
| 
 | |
| from console_loader import load_symbol_from_console
 | |
| 
 | |
| 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"
 | |
|     print "-i,--input=: Filename for the EDK2 console output"
 | |
|     print "-o,--objdump=: Path to the objdump tool"
 | |
| 
 | |
| verbose = False
 | |
| load_all = False
 | |
| report_file = None
 | |
| input_file = None
 | |
| objdump = None
 | |
| regions = []
 | |
| opts,args = getopt.getopt(sys.argv[1:], "hvar:i:o:vm:vr:vf:v", ["help","verbose","all","report=","sysmem=","rom=","fv=","input=","objdump="])
 | |
| 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
 | |
|         elif o in ("-i","--input"):
 | |
|             input_file = a
 | |
|         elif o in ("-o", "--objdump"):
 | |
|             objdump = a
 | |
|         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.getCurrentExecutionContext()
 | |
| ec.getExecutionService().stop()
 | |
| # in case the execution context reference is out of date
 | |
| ec = debugger.getCurrentExecutionContext()
 | |
| 
 | |
| 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())
 | |
| 
 | |
| if input_file:
 | |
|     load_symbol_from_console(ec, input_file, objdump, verbose)
 |