PGMRC.cpp revision ceec4276710e550e3d28840e12501f4da1e8ad7b
2450c389e57b32faa488750561558741a7968487vboxsync/* $Id$ */
2450c389e57b32faa488750561558741a7968487vboxsync/** @file
2450c389e57b32faa488750561558741a7968487vboxsync * PGM - Page Monitor, Guest Context.
2450c389e57b32faa488750561558741a7968487vboxsync */
2450c389e57b32faa488750561558741a7968487vboxsync
2450c389e57b32faa488750561558741a7968487vboxsync/*
2450c389e57b32faa488750561558741a7968487vboxsync * Copyright (C) 2006-2010 Oracle Corporation
2450c389e57b32faa488750561558741a7968487vboxsync *
2450c389e57b32faa488750561558741a7968487vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
2450c389e57b32faa488750561558741a7968487vboxsync * available from http://www.virtualbox.org. This file is free software;
2450c389e57b32faa488750561558741a7968487vboxsync * you can redistribute it and/or modify it under the terms of the GNU
2450c389e57b32faa488750561558741a7968487vboxsync * General Public License (GPL) as published by the Free Software
2450c389e57b32faa488750561558741a7968487vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
2450c389e57b32faa488750561558741a7968487vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
2450c389e57b32faa488750561558741a7968487vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
2450c389e57b32faa488750561558741a7968487vboxsync */
2450c389e57b32faa488750561558741a7968487vboxsync
2450c389e57b32faa488750561558741a7968487vboxsync
2450c389e57b32faa488750561558741a7968487vboxsync/*******************************************************************************
2450c389e57b32faa488750561558741a7968487vboxsync* Header Files *
2450c389e57b32faa488750561558741a7968487vboxsync*******************************************************************************/
2450c389e57b32faa488750561558741a7968487vboxsync#define LOG_GROUP LOG_GROUP_PGM
2450c389e57b32faa488750561558741a7968487vboxsync#include <VBox/vmm/pgm.h>
2450c389e57b32faa488750561558741a7968487vboxsync#include <VBox/vmm/cpum.h>
2450c389e57b32faa488750561558741a7968487vboxsync#include <VBox/vmm/mm.h>
2450c389e57b32faa488750561558741a7968487vboxsync#include <VBox/vmm/em.h>
2450c389e57b32faa488750561558741a7968487vboxsync#include <VBox/vmm/selm.h>
2450c389e57b32faa488750561558741a7968487vboxsync#include <VBox/vmm/iom.h>
2450c389e57b32faa488750561558741a7968487vboxsync#include <VBox/vmm/trpm.h>
2450c389e57b32faa488750561558741a7968487vboxsync#ifdef VBOX_WITH_REM
2450c389e57b32faa488750561558741a7968487vboxsync# include <VBox/vmm/rem.h>
2450c389e57b32faa488750561558741a7968487vboxsync#endif
2450c389e57b32faa488750561558741a7968487vboxsync#include "PGMInternal.h"
2450c389e57b32faa488750561558741a7968487vboxsync#include <VBox/vmm/vm.h>
2450c389e57b32faa488750561558741a7968487vboxsync#include "PGMInline.h"
2450c389e57b32faa488750561558741a7968487vboxsync
2450c389e57b32faa488750561558741a7968487vboxsync#include <iprt/asm.h>
2450c389e57b32faa488750561558741a7968487vboxsync#include <iprt/assert.h>
2450c389e57b32faa488750561558741a7968487vboxsync#include <VBox/log.h>
2450c389e57b32faa488750561558741a7968487vboxsync#include <VBox/param.h>
2450c389e57b32faa488750561558741a7968487vboxsync#include <VBox/err.h>
2450c389e57b32faa488750561558741a7968487vboxsync#include <VBox/dis.h>
dfd08267d2958ae1cd559dd7dc2f36bf5461648dvboxsync#include <VBox/disopcode.h>
dfd08267d2958ae1cd559dd7dc2f36bf5461648dvboxsync
dfd08267d2958ae1cd559dd7dc2f36bf5461648dvboxsync
2450c389e57b32faa488750561558741a7968487vboxsync
dfd08267d2958ae1cd559dd7dc2f36bf5461648dvboxsync/*******************************************************************************
dfd08267d2958ae1cd559dd7dc2f36bf5461648dvboxsync* Internal Functions *
dfd08267d2958ae1cd559dd7dc2f36bf5461648dvboxsync*******************************************************************************/
dfd08267d2958ae1cd559dd7dc2f36bf5461648dvboxsync
dfd08267d2958ae1cd559dd7dc2f36bf5461648dvboxsync
dfd08267d2958ae1cd559dd7dc2f36bf5461648dvboxsync
dfd08267d2958ae1cd559dd7dc2f36bf5461648dvboxsync#ifndef RT_ARCH_AMD64
2450c389e57b32faa488750561558741a7968487vboxsync/*
2450c389e57b32faa488750561558741a7968487vboxsync * Shadow - 32-bit mode
2450c389e57b32faa488750561558741a7968487vboxsync */
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_SHW_TYPE PGM_TYPE_32BIT
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_SHW_NAME(name) PGM_SHW_NAME_32BIT(name)
2450c389e57b32faa488750561558741a7968487vboxsync#include "PGMRCShw.h"
2450c389e57b32faa488750561558741a7968487vboxsync
2450c389e57b32faa488750561558741a7968487vboxsync/* Guest - real mode */
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_GST_TYPE PGM_TYPE_REAL
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_GST_NAME(name) PGM_GST_NAME_REAL(name)
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_BTH_NAME(name) PGM_BTH_NAME_32BIT_REAL(name)
2450c389e57b32faa488750561558741a7968487vboxsync#include "PGMRCGst.h"
2450c389e57b32faa488750561558741a7968487vboxsync#include "PGMRCBth.h"
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_BTH_NAME
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_GST_TYPE
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_GST_NAME
2450c389e57b32faa488750561558741a7968487vboxsync
2450c389e57b32faa488750561558741a7968487vboxsync/* Guest - protected mode */
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_GST_TYPE PGM_TYPE_PROT
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_GST_NAME(name) PGM_GST_NAME_PROT(name)
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_BTH_NAME(name) PGM_BTH_NAME_32BIT_PROT(name)
2450c389e57b32faa488750561558741a7968487vboxsync#include "PGMRCGst.h"
2450c389e57b32faa488750561558741a7968487vboxsync#include "PGMRCBth.h"
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_BTH_NAME
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_GST_TYPE
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_GST_NAME
dfd08267d2958ae1cd559dd7dc2f36bf5461648dvboxsync
2450c389e57b32faa488750561558741a7968487vboxsync/* Guest - 32-bit mode */
dfd08267d2958ae1cd559dd7dc2f36bf5461648dvboxsync#define PGM_GST_TYPE PGM_TYPE_32BIT
dfd08267d2958ae1cd559dd7dc2f36bf5461648dvboxsync#define PGM_GST_NAME(name) PGM_GST_NAME_32BIT(name)
dfd08267d2958ae1cd559dd7dc2f36bf5461648dvboxsync#define PGM_BTH_NAME(name) PGM_BTH_NAME_32BIT_32BIT(name)
2450c389e57b32faa488750561558741a7968487vboxsync#include "PGMRCGst.h"
2450c389e57b32faa488750561558741a7968487vboxsync#include "PGMRCBth.h"
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_BTH_NAME
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_GST_TYPE
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_GST_NAME
2450c389e57b32faa488750561558741a7968487vboxsync
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_SHW_TYPE
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_SHW_NAME
2450c389e57b32faa488750561558741a7968487vboxsync#endif /* !RT_ARCH_AMD64 */
2450c389e57b32faa488750561558741a7968487vboxsync
2450c389e57b32faa488750561558741a7968487vboxsync
2450c389e57b32faa488750561558741a7968487vboxsync/*
2450c389e57b32faa488750561558741a7968487vboxsync * Shadow - PAE mode
2450c389e57b32faa488750561558741a7968487vboxsync */
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_SHW_TYPE PGM_TYPE_PAE
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_SHW_NAME(name) PGM_SHW_NAME_PAE(name)
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_BTH_NAME(name) PGM_BTH_NAME_PAE_REAL(name)
2450c389e57b32faa488750561558741a7968487vboxsync#include "PGMRCShw.h"
2450c389e57b32faa488750561558741a7968487vboxsync
2450c389e57b32faa488750561558741a7968487vboxsync/* Guest - real mode */
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_GST_TYPE PGM_TYPE_REAL
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_GST_NAME(name) PGM_GST_NAME_REAL(name)
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_BTH_NAME(name) PGM_BTH_NAME_PAE_REAL(name)
2450c389e57b32faa488750561558741a7968487vboxsync#include "PGMRCBth.h"
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_BTH_NAME
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_GST_TYPE
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_GST_NAME
2450c389e57b32faa488750561558741a7968487vboxsync
2450c389e57b32faa488750561558741a7968487vboxsync/* Guest - protected mode */
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_GST_TYPE PGM_TYPE_PROT
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_GST_NAME(name) PGM_GST_NAME_PROT(name)
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_BTH_NAME(name) PGM_BTH_NAME_PAE_PROT(name)
2450c389e57b32faa488750561558741a7968487vboxsync#include "PGMRCBth.h"
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_BTH_NAME
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_GST_TYPE
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_GST_NAME
2450c389e57b32faa488750561558741a7968487vboxsync
2450c389e57b32faa488750561558741a7968487vboxsync/* Guest - 32-bit mode */
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_GST_TYPE PGM_TYPE_32BIT
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_GST_NAME(name) PGM_GST_NAME_32BIT(name)
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_BTH_NAME(name) PGM_BTH_NAME_PAE_32BIT(name)
2450c389e57b32faa488750561558741a7968487vboxsync#include "PGMRCBth.h"
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_BTH_NAME
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_GST_TYPE
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_GST_NAME
2450c389e57b32faa488750561558741a7968487vboxsync
2450c389e57b32faa488750561558741a7968487vboxsync/* Guest - PAE mode */
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_GST_TYPE PGM_TYPE_PAE
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_GST_NAME(name) PGM_GST_NAME_PAE(name)
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_BTH_NAME(name) PGM_BTH_NAME_PAE_PAE(name)
2450c389e57b32faa488750561558741a7968487vboxsync#include "PGMRCGst.h"
2450c389e57b32faa488750561558741a7968487vboxsync#include "PGMRCBth.h"
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_BTH_NAME
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_GST_TYPE
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_GST_NAME
2450c389e57b32faa488750561558741a7968487vboxsync
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_SHW_TYPE
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_SHW_NAME
2450c389e57b32faa488750561558741a7968487vboxsync
2450c389e57b32faa488750561558741a7968487vboxsync
2450c389e57b32faa488750561558741a7968487vboxsync/*
2450c389e57b32faa488750561558741a7968487vboxsync * Shadow - AMD64 mode
2450c389e57b32faa488750561558741a7968487vboxsync */
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_SHW_TYPE PGM_TYPE_AMD64
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_SHW_NAME(name) PGM_SHW_NAME_AMD64(name)
2450c389e57b32faa488750561558741a7968487vboxsync#include "PGMRCShw.h"
2450c389e57b32faa488750561558741a7968487vboxsync
2450c389e57b32faa488750561558741a7968487vboxsync#ifdef VBOX_WITH_64_BITS_GUESTS
2450c389e57b32faa488750561558741a7968487vboxsync/* Guest - AMD64 mode */
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_GST_TYPE PGM_TYPE_AMD64
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_GST_NAME(name) PGM_GST_NAME_AMD64(name)
2450c389e57b32faa488750561558741a7968487vboxsync#define PGM_BTH_NAME(name) PGM_BTH_NAME_AMD64_AMD64(name)
2450c389e57b32faa488750561558741a7968487vboxsync#include "PGMRCGst.h"
2450c389e57b32faa488750561558741a7968487vboxsync#include "PGMRCBth.h"
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_BTH_NAME
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_GST_TYPE
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_GST_NAME
2450c389e57b32faa488750561558741a7968487vboxsync#endif
2450c389e57b32faa488750561558741a7968487vboxsync
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_SHW_TYPE
2450c389e57b32faa488750561558741a7968487vboxsync#undef PGM_SHW_NAME
2450c389e57b32faa488750561558741a7968487vboxsync
2450c389e57b32faa488750561558741a7968487vboxsync