VMMSwitcher.mac revision 887aa11dd4e7ab2e9973bdcf8125a46a72585896
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync; $Id$
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync;; @file
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync; VMM - World Switchers.
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync;
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync;
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync; Copyright (C) 2006-2007 innotek GmbH
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync;
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync; This file is part of VirtualBox Open Source Edition (OSE), as
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync; available from http://www.virtualbox.org. This file is free software;
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync; you can redistribute it and/or modify it under the terms of the GNU
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync; General Public License as published by the Free Software Foundation,
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync; in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync; distribution. VirtualBox OSE is distributed in the hope that it will
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync; be useful, but WITHOUT ANY WARRANTY of any kind.
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%ifndef __VMMSwitcher_mac__
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define __VMMSwitcher_mac__
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%include "iprt/asmdefs.mac"
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync; enum VMMSWITCHER {
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define VMMSWITCHER_INVALID 0
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define VMMSWITCHER_32_TO_32 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define VMMSWITCHER_32_TO_PAE 2
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define VMMSWITCHER_32_TO_AMD64 3
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define VMMSWITCHER_PAE_TO_32BIT 4
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define VMMSWITCHER_PAE_TO_PAE 5
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define VMMSWITCHER_PAE_TO_AMD64 6
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define VMMSWITCHER_AMD64_TO_PAE 7
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define VMMSWITCHER_AMD64_TO_AMD64 8
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define VMMSWITCHER_HOST_TO_VMX 9
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define VMMSWITCHER_HOST_TO_SVM 10
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define VMMSWITCHER_MAX 11
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync; }
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsyncstruc VMMSWITCHERDEF
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync .pvCode: RTCCPTR_RES 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync .pvFixups: RTCCPTR_RES 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync .pszDesc: RTCCPTR_RES 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync .pfnRelocate: RTCCPTR_RES 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync .enmType: resd 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync .cbCode: resd 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync .offR0HostToGuest: resd 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync .offGCGuestToHost: resd 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync .offGCCallTrampoline: resd 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync .offGCGuestToHostAsm: resd 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync .offGCGuestToHostAsmHyperCtx: resd 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync .offGCGuestToHostAsmGuestCtx: resd 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync ; disasm help
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync .offHCCode0: resd 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync .cbHCCode0: resd 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync .offHCCode1: resd 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync .cbHCCode1: resd 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync .offIDCode0: resd 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync .cbIDCode0: resd 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync .offIDCode1: resd 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync .cbIDCode1: resd 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync .offGCCode: resd 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync .cbGCCode: resd 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsyncendstruc
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync;/** @name Fixup Types.
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync; * @{
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync; */
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define FIX_HC_2_GC_NEAR_REL 1
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define FIX_HC_2_ID_NEAR_REL 2
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define FIX_GC_2_HC_NEAR_REL 3
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define FIX_GC_2_ID_NEAR_REL 4
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define FIX_ID_2_HC_NEAR_REL 5
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define FIX_ID_2_GC_NEAR_REL 6
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define FIX_GC_FAR32 7
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define FIX_GC_CPUM_OFF 8
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define FIX_GC_VM_OFF 9
2ff004294d896cf7fb4f3a5636423da9052b1d58vboxsync%define FIX_HC_CPUM_OFF 10
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define FIX_HC_VM_OFF 11
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define FIX_INTER_32BIT_CR3 12
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define FIX_INTER_PAE_CR3 13
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define FIX_INTER_AMD64_CR3 14
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define FIX_HYPER_32BIT_CR3 15
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define FIX_HYPER_PAE_CR3 16
46192b2e5dd6b322ba3d1aae79e97074d50cdf89vboxsync%define FIX_HYPER_AMD64_CR3 17
%define FIX_HYPER_CS 18
%define FIX_HYPER_DS 19
%define FIX_HYPER_TSS 20
%define FIX_GC_TSS_GDTE_DW2 21
%define FIX_CR4_MASK 22
%define FIX_CR4_OSFSXR 23
%define FIX_NO_FXSAVE_JMP 24
%define FIX_NO_SYSENTER_JMP 25
%define FIX_NO_SYSCALL_JMP 26
%define FIX_HC_32BIT 27
%define FIX_HC_64BIT 28
%define FIX_HC_64BIT_CPUM 29
%define FIX_HC_64BIT_CS 30
%define FIX_ID_32BIT 31
%define FIX_ID_64BIT 32
%define FIX_ID_FAR32_TO_64BIT_MODE 33
%define FIX_GC_APIC_BASE_32BIT 34
%define FIX_THE_END 255
;/** @} */
;;
; Generate a fixup label.
; @param %1 Type of fixup (use one of those %defines)
; @param %2 Offset into the instruction.
; @param %3 Optional fixup data.
%macro FIXUP 2-*
BEGINDATA
db %1 ; the type
dd %%instruction + %2 - NAME(Start)
%rotate 2
%rep %0 - 2
dd %1
%rotate 1
%endrep
BEGINCODE
%%instruction:
%endmacro
;; IMPORTANT all COM_ functions trashes esi, some edi and the LOOP_SHORT_WHILE kills ecx.
;%define DEBUG_STUFF 1
%ifdef DEBUG_STUFF
%define DEBUG_CHAR(ch) COM_CHAR ch
%define DEBUG_S_CHAR(ch) COM_CHAR ch
%else
%define DEBUG_CHAR(ch)
%define DEBUG_S_CHAR(ch)
%endif
%endif ; !__VMMSwitcher_mac__