mirror of https://github.com/bochs-emu/Bochs
- copy prev_eip and prev_esp again AFTER the handle_async_event section
has run. This ensures that the prev_eip and prev_esp that is used for tracing and breakpoint checks is correct even in the cycle after an interrupt or trap.
This commit is contained in:
parent
3075cb34ed
commit
22f82dcbb3
|
@ -118,6 +118,7 @@ BX_CPU_C::cpu_loop(Bit32s max_instr_count)
|
||||||
|
|
||||||
(void) setjmp( BX_CPU_THIS_PTR jmp_buf_env );
|
(void) setjmp( BX_CPU_THIS_PTR jmp_buf_env );
|
||||||
|
|
||||||
|
// not sure if these two are used during the async handling... --bbd
|
||||||
BX_CPU_THIS_PTR prev_eip = EIP; // commit new EIP
|
BX_CPU_THIS_PTR prev_eip = EIP; // commit new EIP
|
||||||
BX_CPU_THIS_PTR prev_esp = ESP; // commit new ESP
|
BX_CPU_THIS_PTR prev_esp = ESP; // commit new ESP
|
||||||
|
|
||||||
|
@ -134,7 +135,13 @@ main_cpu_loop:
|
||||||
goto handle_async_event;
|
goto handle_async_event;
|
||||||
|
|
||||||
async_events_processed:
|
async_events_processed:
|
||||||
|
// added so that all debugging/tracing code uses the correct EIP even in the
|
||||||
|
// instruction just after a trap/interrupt. If you use the prev_eip that was
|
||||||
|
// set before handle_async_event, traces and breakpoints fail to show the
|
||||||
|
// first instruction of int/trap handlers.
|
||||||
|
BX_CPU_THIS_PTR prev_eip = EIP; // commit new EIP
|
||||||
|
BX_CPU_THIS_PTR prev_esp = ESP; // commit new ESP
|
||||||
|
|
||||||
// Now we can handle things which are synchronous to instruction
|
// Now we can handle things which are synchronous to instruction
|
||||||
// execution.
|
// execution.
|
||||||
if (BX_CPU_THIS_PTR eflags.rf) {
|
if (BX_CPU_THIS_PTR eflags.rf) {
|
||||||
|
@ -189,9 +196,9 @@ async_events_processed:
|
||||||
{
|
{
|
||||||
int n=0;
|
int n=0;
|
||||||
if ((n & 0xffffff) == 0) {
|
if ((n & 0xffffff) == 0) {
|
||||||
Bit32u cs = BX_CPU(0)->sregs[BX_SEG_REG_CS].selector.value;
|
Bit32u cs = BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value;
|
||||||
Bit32u eip = BX_CPU(0)->prev_eip;
|
Bit32u eip = BX_CPU_THIS_PTR prev_eip;
|
||||||
fprintf (stdout, "instr %d, time %lld, pc %04x:%08x, fetch_ptr=%p\s", n, bx_pc_system.time_ticks (), cs, eip, fetch_ptr);
|
fprintf (stdout, "instr %d, time %lld, pc %04x:%08x, fetch_ptr=%p\n", n, bx_pc_system.time_ticks (), cs, eip, fetch_ptr);
|
||||||
}
|
}
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue