Simics中是否存在设置带前缀断点的底层Python API?
Simics 中设置带前缀断点的底层Python API咨询
背景情况
Simics 6中的实现方式
在Simics 6中,可使用set-prefix前端命令为已创建的断点设置前缀,示例代码如下:
for bp in self.breakpoint_list: bp.break_num = SIM_breakpoint(bp.object, bp.addr_type, bp.mode, bp.addr, bp.length, bp.flags) if bp.prefix is not None: command = 'set-prefix %d "%s"' % (bp.break_num, bp.prefix) SIM_run_alone(SIM_run_command, command)
Simics 7中的问题
到了Simics 7,set-prefix命令被弃用,官方文档建议改用bp.memory.break命令,但该命令依赖前端处理器,在断点密集型脚本中运行效率低下。
混合API的风险
如果同时使用高效的SIM_breakpoint底层API和bp.memory.break命令来设置前缀,会存在编号冲突风险——因为bp.manager和SIM_breakpoint的断点编号并非互斥。以下是演示代码及运行结果:
演示代码
from simics import * import cli ''' 演示SIM_breakpoint和bp.memory.break的断点编号不互斥 ''' def theHap(cpu, the_obj, the_break, memory): print('in theHap break %d memory 0x%x' % (the_break, memory.logical_address)) cmd = 'ubuntu.get-processor-list' proclist = SIM_run_command(cmd) cpu = SIM_get_object(proclist[0]) print('Our cpu is %s' % cpu.name) bp1 = SIM_breakpoint(cpu.current_context, Sim_Break_Linear, Sim_Access_Execute, 0x00000000b774d753, 1, 0) print('added break %s with SIM_breakpoint' % bp1) proc_hap = SIM_hap_add_callback_index("Core_Breakpoint_Memop", theHap, cpu, bp1) print('Hap set on breakpoint %d' % bp1) bp2 = SIM_run_command('bp.memory.break 0x00000000b774d75d') print('added break %s with bp.memory.break' % bp2) proc_hap = SIM_hap_add_callback_index("Core_Breakpoint_Memop", theHap, cpu, bp2) print('Hap set on breakpoint %d' % bp2)
运行结果
simics> run-script prefix.py Our cpu is ubuntu.mb.cpu0.core[0][0] added break 1 with SIM_breakpoint Hap set on breakpoint 1 added break 1 with bp.memory.break Hap set on breakpoint 1 NIL simics> c in theHap break 1 memory 0xb774d753 in theHap break 1 memory 0xb774d753 [ubuntu.cell_context] Breakpoint 1: ubuntu.cell_context 'x' access to v:0xb774d75d len=3
提问
Simics中是否存在设置带前缀断点的底层Python API?
内容的提问来源于stack exchange,提问作者Mike Thompson
相关产品推荐
相关产品推荐

