1 | ; $Id: VMMSwitcher.mac 69221 2017-10-24 15:07:46Z vboxsync $
|
---|
2 | ;; @file
|
---|
3 | ; VMM - World Switchers.
|
---|
4 | ;
|
---|
5 |
|
---|
6 | ;
|
---|
7 | ; Copyright (C) 2006-2017 Oracle Corporation
|
---|
8 | ;
|
---|
9 | ; This file is part of VirtualBox Open Source Edition (OSE), as
|
---|
10 | ; available from http://www.virtualbox.org. This file is free software;
|
---|
11 | ; you can redistribute it and/or modify it under the terms of the GNU
|
---|
12 | ; General Public License (GPL) as published by the Free Software
|
---|
13 | ; Foundation, in version 2 as it comes in the "COPYING" file of the
|
---|
14 | ; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
|
---|
15 | ; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
|
---|
16 | ;
|
---|
17 |
|
---|
18 | %ifndef ___VMMSwitcher_mac
|
---|
19 | %define ___VMMSwitcher_mac
|
---|
20 |
|
---|
21 | %include "iprt/asmdefs.mac"
|
---|
22 |
|
---|
23 | ; enum VMMSWITCHER {
|
---|
24 | %define VMMSWITCHER_INVALID 0
|
---|
25 | %define VMMSWITCHER_32_TO_32 1
|
---|
26 | %define VMMSWITCHER_32_TO_PAE 2
|
---|
27 | %define VMMSWITCHER_32_TO_AMD64 3
|
---|
28 | %define VMMSWITCHER_PAE_TO_32BIT 4
|
---|
29 | %define VMMSWITCHER_PAE_TO_PAE 5
|
---|
30 | %define VMMSWITCHER_PAE_TO_AMD64 6
|
---|
31 | %define VMMSWITCHER_AMD64_TO_32 7
|
---|
32 | %define VMMSWITCHER_AMD64_TO_PAE 8
|
---|
33 | %define VMMSWITCHER_AMD64_TO_AMD64 9
|
---|
34 | %define VMMSWITCHER_X86_STUB 10
|
---|
35 | %define VMMSWITCHER_AMD64_STUB 11
|
---|
36 | %define VMMSWITCHER_MAX 12
|
---|
37 | ; }
|
---|
38 |
|
---|
39 |
|
---|
40 | struc VMMSWITCHERDEF
|
---|
41 | .pvCode: RTCCPTR_RES 1
|
---|
42 | .pvFixups: RTCCPTR_RES 1
|
---|
43 | .pszDesc: RTCCPTR_RES 1
|
---|
44 | .pfnRelocate: RTCCPTR_RES 1
|
---|
45 | .enmType: resd 1
|
---|
46 | .cbCode: resd 1
|
---|
47 | .offR0ToRawMode: resd 1
|
---|
48 | .offRCToHost: resd 1
|
---|
49 | .offRCCallTrampoline: resd 1
|
---|
50 | .offRCToHostAsm: resd 1
|
---|
51 | .offRCToHostAsmNoReturn: resd 1
|
---|
52 | ; disasm help
|
---|
53 | .offHCCode0: resd 1
|
---|
54 | .cbHCCode0: resd 1
|
---|
55 | .offHCCode1: resd 1
|
---|
56 | .cbHCCode1: resd 1
|
---|
57 | .offIDCode0: resd 1
|
---|
58 | .cbIDCode0: resd 1
|
---|
59 | .offIDCode1: resd 1
|
---|
60 | .cbIDCode1: resd 1
|
---|
61 | .offGCCode: resd 1
|
---|
62 | .cbGCCode: resd 1
|
---|
63 | endstruc
|
---|
64 |
|
---|
65 |
|
---|
66 | ;/** @name Fixup Types.
|
---|
67 | ; * @{
|
---|
68 | ; */
|
---|
69 | %define FIX_HC_2_GC_NEAR_REL 1
|
---|
70 | %define FIX_HC_2_ID_NEAR_REL 2
|
---|
71 | %define FIX_GC_2_HC_NEAR_REL 3
|
---|
72 | %define FIX_GC_2_ID_NEAR_REL 4
|
---|
73 | %define FIX_ID_2_HC_NEAR_REL 5
|
---|
74 | %define FIX_ID_2_GC_NEAR_REL 6
|
---|
75 | %define FIX_GC_FAR32 7
|
---|
76 | %define FIX_GC_CPUM_OFF 8
|
---|
77 | %define FIX_GC_VM_OFF 9
|
---|
78 | %define FIX_HC_CPUM_OFF 10
|
---|
79 | %define FIX_HC_VM_OFF 11
|
---|
80 | %define FIX_INTER_32BIT_CR3 12
|
---|
81 | %define FIX_INTER_PAE_CR3 13
|
---|
82 | %define FIX_INTER_AMD64_CR3 14
|
---|
83 | %define FIX_HYPER_CS 18
|
---|
84 | %define FIX_HYPER_DS 19
|
---|
85 | %define FIX_HYPER_TSS 20
|
---|
86 | %define FIX_GC_TSS_GDTE_DW2 21
|
---|
87 | ;%define FIX_NO_FXSAVE_JMP 24 - reusable
|
---|
88 | %define FIX_NO_SYSENTER_JMP 25
|
---|
89 | %define FIX_NO_SYSCALL_JMP 26
|
---|
90 | %define FIX_HC_32BIT 27
|
---|
91 | %define FIX_HC_64BIT 28
|
---|
92 | %define FIX_HC_64BIT_CPUM 29
|
---|
93 | %define FIX_HC_64BIT_CS 30
|
---|
94 | %define FIX_ID_32BIT 31
|
---|
95 | %define FIX_ID_64BIT 32
|
---|
96 | %define FIX_ID_FAR32_TO_64BIT_MODE 33
|
---|
97 | %define FIX_GC_APIC_BASE_32BIT 34
|
---|
98 | %define FIX_HC_64BIT_NOCHECK 35
|
---|
99 | %define FIX_GC_64_BIT_CPUM_OFF 36
|
---|
100 | %define FIX_GC_CPUMCPU_OFF 37
|
---|
101 | %define FIX_EFER_OR_MASK 38
|
---|
102 | %define FIX_THE_END 255
|
---|
103 | ;/** @} */
|
---|
104 |
|
---|
105 |
|
---|
106 | ;;
|
---|
107 | ; Generate a fixup label.
|
---|
108 | ; @param %1 Type of fixup (use one of those %defines)
|
---|
109 | ; @param %2 Offset into the instruction.
|
---|
110 | ; @param %3 Optional fixup data.
|
---|
111 | %macro FIXUP 2-*
|
---|
112 | BEGINDATA
|
---|
113 | db %1 ; the type
|
---|
114 | dd %%instruction + %2 - NAME(Start)
|
---|
115 | %rotate 2
|
---|
116 | %rep %0 - 2
|
---|
117 | dd %1
|
---|
118 | %rotate 1
|
---|
119 | %endrep
|
---|
120 |
|
---|
121 | BEGINCODE
|
---|
122 | %%instruction:
|
---|
123 | %endmacro
|
---|
124 |
|
---|
125 |
|
---|
126 | ;; IMPORTANT all COM_ functions trashes esi, some edi and the LOOP_SHORT_WHILE kills ecx.
|
---|
127 | ;%define DEBUG_STUFF 1
|
---|
128 |
|
---|
129 | %ifdef DEBUG_STUFF
|
---|
130 | %define DEBUG_CHAR(ch) COM_CHAR ch
|
---|
131 | %define DEBUG32_CHAR(ch) COM_CHAR ch
|
---|
132 | %define DEBUG64_CHAR(ch) COM_CHAR ch
|
---|
133 | %define DEBUG_S_CHAR(ch) COM_S_CHAR ch
|
---|
134 | %define DEBUG32_S_CHAR(ch) COM32_S_CHAR ch
|
---|
135 | %define DEBUG64_S_CHAR(ch) COM64_S_CHAR ch
|
---|
136 | %else
|
---|
137 | %define DEBUG_CHAR(ch)
|
---|
138 | %define DEBUG32_CHAR(ch)
|
---|
139 | %define DEBUG64_CHAR(ch)
|
---|
140 | %define DEBUG_S_CHAR(ch)
|
---|
141 | %define DEBUG32_S_CHAR(ch)
|
---|
142 | %define DEBUG64_S_CHAR(ch)
|
---|
143 | %endif
|
---|
144 |
|
---|
145 | %endif ; !___VMMSwitcher_mac
|
---|
146 |
|
---|