Commit 93a40ea9264dfd5df63669e785fed1c9db0041f4
1 parent
db8d7466
fixed mmu fault priviledge logic
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@406 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
4 additions
and
2 deletions
cpu-exec.c
| @@ -225,7 +225,7 @@ int cpu_exec(CPUState *env1) | @@ -225,7 +225,7 @@ int cpu_exec(CPUState *env1) | ||
| 225 | cpu_arm_dump_state(env, logfile, 0); | 225 | cpu_arm_dump_state(env, logfile, 0); |
| 226 | env->cpsr &= ~0xf0000000; | 226 | env->cpsr &= ~0xf0000000; |
| 227 | #elif defined(TARGET_SPARC) | 227 | #elif defined(TARGET_SPARC) |
| 228 | - cpu_sparc_dump_state (env, logfile, 0); | 228 | + cpu_sparc_dump_state (env, logfile, 0); |
| 229 | #else | 229 | #else |
| 230 | #error unsupported target CPU | 230 | #error unsupported target CPU |
| 231 | #endif | 231 | #endif |
| @@ -273,6 +273,7 @@ int cpu_exec(CPUState *env1) | @@ -273,6 +273,7 @@ int cpu_exec(CPUState *env1) | ||
| 273 | tb->tc_ptr = tc_ptr; | 273 | tb->tc_ptr = tc_ptr; |
| 274 | tb->cs_base = (unsigned long)cs_base; | 274 | tb->cs_base = (unsigned long)cs_base; |
| 275 | tb->flags = flags; | 275 | tb->flags = flags; |
| 276 | + /* XXX: an MMU exception can occur here */ | ||
| 276 | cpu_gen_code(env, tb, CODE_GEN_MAX_SIZE, &code_gen_size); | 277 | cpu_gen_code(env, tb, CODE_GEN_MAX_SIZE, &code_gen_size); |
| 277 | *ptb = tb; | 278 | *ptb = tb; |
| 278 | tb->hash_next = NULL; | 279 | tb->hash_next = NULL; |
| @@ -456,7 +457,8 @@ static inline int handle_cpu_signal(unsigned long pc, unsigned long address, | @@ -456,7 +457,8 @@ static inline int handle_cpu_signal(unsigned long pc, unsigned long address, | ||
| 456 | return 1; | 457 | return 1; |
| 457 | } | 458 | } |
| 458 | /* see if it is an MMU fault */ | 459 | /* see if it is an MMU fault */ |
| 459 | - ret = cpu_x86_handle_mmu_fault(env, address, is_write); | 460 | + ret = cpu_x86_handle_mmu_fault(env, address, is_write, |
| 461 | + ((env->hflags & HF_CPL_MASK) == 3), 0); | ||
| 460 | if (ret < 0) | 462 | if (ret < 0) |
| 461 | return 0; /* not an MMU fault */ | 463 | return 0; /* not an MMU fault */ |
| 462 | if (ret == 0) | 464 | if (ret == 0) |