Hello. I am working on implementation of deteministic execution replay technology for Qemu. It should be similar to VMWare's replay debugging. To make alarm timer (which invokes host_alarm_handler function) determinisic, I changed it's behavior: it sets flag, that execution should be stopped and this flag is checked before every instruction in the translated code. To allow breaking the execution in any moment, I added flag check and exit_tb call before every instruction.
But there is one problem occurred: when I make the same actions like gen_eob() function, Windows XP cannot load on emulated machine (it reboots with GPF). But when I remove two of the actions, everything is OK. These actions are the following: if (s->tb->flags & HF_INHIBIT_IRQ_MASK) { gen_helper_reset_inhibit_irq(); } if (s->tb->flags & HF_RF_MASK) { gen_helper_reset_rf(); } What are these actions for? When I remove any of them the booting process is OK. Please help me to understand interrupts mechanism or give links where to read about it. I apply my modifications to version 0.12.3 of Qemu. Please refer to it. Pavel Dovgaluk