From: Wen Congyang <we...@cn.fujitsu.com> Subject: [RFC][PATCH 03/14 v7] target-i386: implement cpu_get_memory_mapping() Date: Thu, 01 Mar 2012 10:41:47 +0800
> +int cpu_get_memory_mapping(MemoryMappingList *list, CPUState *env) > +{ > + if (env->cr[4] & CR4_PAE_MASK) { > +#ifdef TARGET_X86_64 > + if (env->hflags & HF_LMA_MASK) { > + target_phys_addr_t pml4e_addr; > + > + pml4e_addr = (env->cr[3] & ~0xfff) & env->a20_mask; > + walk_pml4e(list, pml4e_addr, env->a20_mask); > + } else > +#endif > + { > + target_phys_addr_t pdpe_addr; > + > + pdpe_addr = (env->cr[3] & ~0x1f) & env->a20_mask; > + walk_pdpe2(list, pdpe_addr, env->a20_mask); > + } > + } else { > + target_phys_addr_t pde_addr; > + bool pse; > + > + pde_addr = (env->cr[3] & ~0xfff) & env->a20_mask; > + pse = !!(env->cr[4] & CR4_PSE_MASK); > + walk_pde2(list, pde_addr, env->a20_mask, pse); > + } > + > + return 0; > +} Does this assume paging mode? I don't know qemu very well, but qemu dump command runs externally to guest machine, so I think the machine could be in the state with paging disabled where CR4 doesn't refer to page table as expected. Thanks. HATAYAMA, Daisuke