Revision fdfba1a2 target-i386/helper.c
b/target-i386/helper.c | ||
---|---|---|
515 | 515 |
int cpu_x86_handle_mmu_fault(CPUX86State *env, target_ulong addr, |
516 | 516 |
int is_write1, int mmu_idx) |
517 | 517 |
{ |
518 |
CPUState *cs = ENV_GET_CPU(env); |
|
518 | 519 |
uint64_t ptep, pte; |
519 | 520 |
target_ulong pde_addr, pte_addr; |
520 | 521 |
int error_code, is_dirty, prot, page_size, is_write, is_user; |
... | ... | |
734 | 735 |
/* page directory entry */ |
735 | 736 |
pde_addr = ((env->cr[3] & ~0xfff) + ((addr >> 20) & 0xffc)) & |
736 | 737 |
env->a20_mask; |
737 |
pde = ldl_phys(pde_addr); |
|
738 |
pde = ldl_phys(cs->as, pde_addr);
|
|
738 | 739 |
if (!(pde & PG_PRESENT_MASK)) { |
739 | 740 |
error_code = 0; |
740 | 741 |
goto do_fault; |
... | ... | |
792 | 793 |
/* page directory entry */ |
793 | 794 |
pte_addr = ((pde & ~0xfff) + ((addr >> 10) & 0xffc)) & |
794 | 795 |
env->a20_mask; |
795 |
pte = ldl_phys(pte_addr); |
|
796 |
pte = ldl_phys(cs->as, pte_addr);
|
|
796 | 797 |
if (!(pte & PG_PRESENT_MASK)) { |
797 | 798 |
error_code = 0; |
798 | 799 |
goto do_fault; |
... | ... | |
963 | 964 |
|
964 | 965 |
/* page directory entry */ |
965 | 966 |
pde_addr = ((env->cr[3] & ~0xfff) + ((addr >> 20) & 0xffc)) & env->a20_mask; |
966 |
pde = ldl_phys(pde_addr); |
|
967 |
pde = ldl_phys(cs->as, pde_addr);
|
|
967 | 968 |
if (!(pde & PG_PRESENT_MASK)) |
968 | 969 |
return -1; |
969 | 970 |
if ((pde & PG_PSE_MASK) && (env->cr[4] & CR4_PSE_MASK)) { |
... | ... | |
972 | 973 |
} else { |
973 | 974 |
/* page directory entry */ |
974 | 975 |
pte_addr = ((pde & ~0xfff) + ((addr >> 10) & 0xffc)) & env->a20_mask; |
975 |
pte = ldl_phys(pte_addr); |
|
976 |
pte = ldl_phys(cs->as, pte_addr);
|
|
976 | 977 |
if (!(pte & PG_PRESENT_MASK)) |
977 | 978 |
return -1; |
978 | 979 |
page_size = 4096; |
Also available in: Unified diff