summaryrefslogtreecommitdiffstats
path: root/src/VBox/VMM/include/VMMSwitcher.mac
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/VMM/include/VMMSwitcher.mac')
-rw-r--r--src/VBox/VMM/include/VMMSwitcher.mac146
1 files changed, 146 insertions, 0 deletions
diff --git a/src/VBox/VMM/include/VMMSwitcher.mac b/src/VBox/VMM/include/VMMSwitcher.mac
new file mode 100644
index 00000000..f7b05696
--- /dev/null
+++ b/src/VBox/VMM/include/VMMSwitcher.mac
@@ -0,0 +1,146 @@
+; $Id: VMMSwitcher.mac $
+;; @file
+; VMM - World Switchers.
+;
+
+;
+; Copyright (C) 2006-2019 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+;
+
+%ifndef ___VMMSwitcher_mac
+%define ___VMMSwitcher_mac
+
+%include "iprt/asmdefs.mac"
+
+; enum VMMSWITCHER {
+%define VMMSWITCHER_INVALID 0
+%define VMMSWITCHER_32_TO_32 1
+%define VMMSWITCHER_32_TO_PAE 2
+%define VMMSWITCHER_32_TO_AMD64 3
+%define VMMSWITCHER_PAE_TO_32BIT 4
+%define VMMSWITCHER_PAE_TO_PAE 5
+%define VMMSWITCHER_PAE_TO_AMD64 6
+%define VMMSWITCHER_AMD64_TO_32 7
+%define VMMSWITCHER_AMD64_TO_PAE 8
+%define VMMSWITCHER_AMD64_TO_AMD64 9
+%define VMMSWITCHER_X86_STUB 10
+%define VMMSWITCHER_AMD64_STUB 11
+%define VMMSWITCHER_MAX 12
+; }
+
+
+struc VMMSWITCHERDEF
+ .pvCode: RTCCPTR_RES 1
+ .pvFixups: RTCCPTR_RES 1
+ .pszDesc: RTCCPTR_RES 1
+ .pfnRelocate: RTCCPTR_RES 1
+ .enmType: resd 1
+ .cbCode: resd 1
+ .offR0ToRawMode: resd 1
+ .offRCToHost: resd 1
+ .offRCCallTrampoline: resd 1
+ .offRCToHostAsm: resd 1
+ .offRCToHostAsmNoReturn: resd 1
+ ; disasm help
+ .offHCCode0: resd 1
+ .cbHCCode0: resd 1
+ .offHCCode1: resd 1
+ .cbHCCode1: resd 1
+ .offIDCode0: resd 1
+ .cbIDCode0: resd 1
+ .offIDCode1: resd 1
+ .cbIDCode1: resd 1
+ .offGCCode: resd 1
+ .cbGCCode: resd 1
+endstruc
+
+
+;/** @name Fixup Types.
+; * @{
+; */
+%define FIX_HC_2_GC_NEAR_REL 1
+%define FIX_HC_2_ID_NEAR_REL 2
+%define FIX_GC_2_HC_NEAR_REL 3
+%define FIX_GC_2_ID_NEAR_REL 4
+%define FIX_ID_2_HC_NEAR_REL 5
+%define FIX_ID_2_GC_NEAR_REL 6
+%define FIX_GC_FAR32 7
+%define FIX_GC_CPUM_OFF 8
+%define FIX_GC_VM_OFF 9
+%define FIX_HC_CPUM_OFF 10
+%define FIX_HC_VM_OFF 11
+%define FIX_INTER_32BIT_CR3 12
+%define FIX_INTER_PAE_CR3 13
+%define FIX_INTER_AMD64_CR3 14
+%define FIX_HYPER_CS 18
+%define FIX_HYPER_DS 19
+%define FIX_HYPER_TSS 20
+%define FIX_GC_TSS_GDTE_DW2 21
+;%define FIX_NO_FXSAVE_JMP 24 - reusable
+%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_HC_64BIT_NOCHECK 35
+%define FIX_GC_64_BIT_CPUM_OFF 36
+%define FIX_GC_CPUMCPU_OFF 37
+%define FIX_EFER_OR_MASK 38
+%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 DEBUG32_CHAR(ch) COM_CHAR ch
+ %define DEBUG64_CHAR(ch) COM_CHAR ch
+ %define DEBUG_S_CHAR(ch) COM_S_CHAR ch
+ %define DEBUG32_S_CHAR(ch) COM32_S_CHAR ch
+ %define DEBUG64_S_CHAR(ch) COM64_S_CHAR ch
+%else
+ %define DEBUG_CHAR(ch)
+ %define DEBUG32_CHAR(ch)
+ %define DEBUG64_CHAR(ch)
+ %define DEBUG_S_CHAR(ch)
+ %define DEBUG32_S_CHAR(ch)
+ %define DEBUG64_S_CHAR(ch)
+%endif
+
+%endif ; !___VMMSwitcher_mac
+