Commit 93a40ea9264dfd5df63669e785fed1c9db0041f4

Authored by bellard
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)