【发布时间】:2015-09-10 08:41:23
【问题描述】:
所以,我将一个新的特定拱门集成到 QEMU 仿真器中(QEMU 中的实现类似于 OpenRISC 拱门,因此您在回答时可以依赖这个拱门),并且我正在运行一些测试。
QEMU 是 2.0.93 版本
- 当我在正常模式下运行测试时,QEMU 以错误答案结束
- 当我在
-singlestep模式下运行时,QEMU 失败,我的断言是在单步运行时将超过 1 个命令放入 TargetBlock - 当我使用 GDB 运行 QEMU 时,它提供
singlestep_enabled模式,var 等于 7(意思是SSTEP_ENABLE|SSTEP_NOIRQ|SSTEP_NOTIMER),我得到了测试的正确答案。
问题是,为什么会这样,这两种模式之间的实际执行差异是什么? 到目前为止,我在网上没有找到太多关于 QEMU 的文档
【问题讨论】:
-
@Peter Teoh 曾经说过,singlestep_enabled 启用了“硬件单步仿真”(stackoverflow.com/a/23847965/2238032),但是如果有人告诉我为什么不允许用户使用这种模式,并且gdb 是,我将不胜感激
-
有用! 另外,我不得不说 GDB 基本上每 TB 刷新 (
tb_flush()func) 所以它把每一束代码放到同一个 TB每次。另外,如果 qemu 在某个先前生成的 Tb 中找到与某些代码相等的代码,它会从其页表(确切地说是 Page Descs)中加载它,而不是将其重新生成到新的 TB
标签: gdb qemu processor emulation