Commit 5a1e3cfcb0f1b7108542d04fababd433938bf8fe
1 parent
d2ac63e0
better halted state support
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1652 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
14 additions
and
2 deletions
cpu-defs.h
... | ... | @@ -74,7 +74,7 @@ typedef unsigned long ram_addr_t; |
74 | 74 | #define EXCP_INTERRUPT 0x10000 /* async interruption */ |
75 | 75 | #define EXCP_HLT 0x10001 /* hlt instruction reached */ |
76 | 76 | #define EXCP_DEBUG 0x10002 /* cpu stopped after a breakpoint or singlestep */ |
77 | - | |
77 | +#define EXCP_HALTED 0x10003 /* cpu is halted (waiting for external event) */ | |
78 | 78 | #define MAX_BREAKPOINTS 32 |
79 | 79 | |
80 | 80 | #define TB_JMP_CACHE_BITS 12 |
... | ... | @@ -96,7 +96,6 @@ typedef struct CPUTLBEntry { |
96 | 96 | |
97 | 97 | #define CPU_COMMON \ |
98 | 98 | struct TranslationBlock *current_tb; /* currently executing TB */ \ |
99 | - int cpu_halted; /* TRUE if cpu is halted (sleep mode) */ \ | |
100 | 99 | /* soft mmu support */ \ |
101 | 100 | /* in order to avoid passing too many arguments to the memory \ |
102 | 101 | write helpers, we store some rarely used information in the CPU \ | ... | ... |
cpu-exec.c
... | ... | @@ -251,6 +251,19 @@ int cpu_exec(CPUState *env1) |
251 | 251 | TranslationBlock *tb; |
252 | 252 | uint8_t *tc_ptr; |
253 | 253 | |
254 | +#if defined(TARGET_I386) | |
255 | + /* handle exit of HALTED state */ | |
256 | + if (env1->hflags & HF_HALTED_MASK) { | |
257 | + /* disable halt condition */ | |
258 | + if ((env1->interrupt_request & CPU_INTERRUPT_HARD) && | |
259 | + (env1->eflags & IF_MASK)) { | |
260 | + env1->hflags &= ~HF_HALTED_MASK; | |
261 | + } else { | |
262 | + return EXCP_HALTED; | |
263 | + } | |
264 | + } | |
265 | +#endif | |
266 | + | |
254 | 267 | cpu_single_env = env1; |
255 | 268 | |
256 | 269 | /* first we save global registers */ | ... | ... |