Commit b7f0f463a55e4f4bded580905582f2dfa6652fca
1 parent
8e682019
debug fixes - use more generic TLB mappings
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@486 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
8 additions
and
18 deletions
target-i386/helper2.c
| @@ -73,7 +73,9 @@ void cpu_x86_close(CPUX86State *env) | @@ -73,7 +73,9 @@ void cpu_x86_close(CPUX86State *env) | ||
| 73 | static const char *cc_op_str[] = { | 73 | static const char *cc_op_str[] = { |
| 74 | "DYNAMIC", | 74 | "DYNAMIC", |
| 75 | "EFLAGS", | 75 | "EFLAGS", |
| 76 | - "MUL", | 76 | + "MULB", |
| 77 | + "MULW", | ||
| 78 | + "MULL", | ||
| 77 | "ADDB", | 79 | "ADDB", |
| 78 | "ADDW", | 80 | "ADDW", |
| 79 | "ADDL", | 81 | "ADDL", |
| @@ -191,13 +193,15 @@ void cpu_x86_set_a20(CPUX86State *env, int a20_state) | @@ -191,13 +193,15 @@ void cpu_x86_set_a20(CPUX86State *env, int a20_state) | ||
| 191 | { | 193 | { |
| 192 | a20_state = (a20_state != 0); | 194 | a20_state = (a20_state != 0); |
| 193 | if (a20_state != a20_enabled) { | 195 | if (a20_state != a20_enabled) { |
| 196 | +#if defined(DEBUG_MMU) | ||
| 197 | + printf("A20 update: a20=%d\n", a20_state); | ||
| 198 | +#endif | ||
| 194 | /* if the cpu is currently executing code, we must unlink it and | 199 | /* if the cpu is currently executing code, we must unlink it and |
| 195 | all the potentially executing TB */ | 200 | all the potentially executing TB */ |
| 196 | cpu_interrupt(env, 0); | 201 | cpu_interrupt(env, 0); |
| 197 | 202 | ||
| 198 | /* when a20 is changed, all the MMU mappings are invalid, so | 203 | /* when a20 is changed, all the MMU mappings are invalid, so |
| 199 | we must flush everything */ | 204 | we must flush everything */ |
| 200 | - page_unmap(); | ||
| 201 | tlb_flush(env); | 205 | tlb_flush(env); |
| 202 | a20_enabled = a20_state; | 206 | a20_enabled = a20_state; |
| 203 | if (a20_enabled) | 207 | if (a20_enabled) |
| @@ -211,18 +215,17 @@ void cpu_x86_update_cr0(CPUX86State *env) | @@ -211,18 +215,17 @@ void cpu_x86_update_cr0(CPUX86State *env) | ||
| 211 | { | 215 | { |
| 212 | int pg_state, pe_state; | 216 | int pg_state, pe_state; |
| 213 | 217 | ||
| 214 | -#ifdef DEBUG_MMU | 218 | +#if defined(DEBUG_MMU) |
| 215 | printf("CR0 update: CR0=0x%08x\n", env->cr[0]); | 219 | printf("CR0 update: CR0=0x%08x\n", env->cr[0]); |
| 216 | #endif | 220 | #endif |
| 217 | pg_state = env->cr[0] & CR0_PG_MASK; | 221 | pg_state = env->cr[0] & CR0_PG_MASK; |
| 218 | if (pg_state != last_pg_state) { | 222 | if (pg_state != last_pg_state) { |
| 219 | - page_unmap(); | ||
| 220 | tlb_flush(env); | 223 | tlb_flush(env); |
| 221 | last_pg_state = pg_state; | 224 | last_pg_state = pg_state; |
| 222 | } | 225 | } |
| 223 | pe_state = env->cr[0] & CR0_PE_MASK; | 226 | pe_state = env->cr[0] & CR0_PE_MASK; |
| 224 | if (last_pe_state != pe_state) { | 227 | if (last_pe_state != pe_state) { |
| 225 | - tb_flush(); | 228 | + tb_flush(env); |
| 226 | last_pe_state = pe_state; | 229 | last_pe_state = pe_state; |
| 227 | } | 230 | } |
| 228 | } | 231 | } |
| @@ -233,7 +236,6 @@ void cpu_x86_update_cr3(CPUX86State *env) | @@ -233,7 +236,6 @@ void cpu_x86_update_cr3(CPUX86State *env) | ||
| 233 | #if defined(DEBUG_MMU) | 236 | #if defined(DEBUG_MMU) |
| 234 | printf("CR3 update: CR3=%08x\n", env->cr[3]); | 237 | printf("CR3 update: CR3=%08x\n", env->cr[3]); |
| 235 | #endif | 238 | #endif |
| 236 | - page_unmap(); | ||
| 237 | tlb_flush(env); | 239 | tlb_flush(env); |
| 238 | } | 240 | } |
| 239 | } | 241 | } |
| @@ -250,19 +252,7 @@ void cpu_x86_init_mmu(CPUX86State *env) | @@ -250,19 +252,7 @@ void cpu_x86_init_mmu(CPUX86State *env) | ||
| 250 | /* XXX: also flush 4MB pages */ | 252 | /* XXX: also flush 4MB pages */ |
| 251 | void cpu_x86_flush_tlb(CPUX86State *env, uint32_t addr) | 253 | void cpu_x86_flush_tlb(CPUX86State *env, uint32_t addr) |
| 252 | { | 254 | { |
| 253 | - int flags; | ||
| 254 | - unsigned long virt_addr; | ||
| 255 | - | ||
| 256 | tlb_flush_page(env, addr); | 255 | tlb_flush_page(env, addr); |
| 257 | - | ||
| 258 | - flags = page_get_flags(addr); | ||
| 259 | - if (flags & PAGE_VALID) { | ||
| 260 | - virt_addr = addr & ~0xfff; | ||
| 261 | -#if !defined(CONFIG_SOFTMMU) | ||
| 262 | - munmap((void *)virt_addr, 4096); | ||
| 263 | -#endif | ||
| 264 | - page_set_flags(virt_addr, virt_addr + 4096, 0); | ||
| 265 | - } | ||
| 266 | } | 256 | } |
| 267 | 257 | ||
| 268 | /* return value: | 258 | /* return value: |