VirtualBox

source: vbox/trunk/src/VBox/VMM/VMMSwitcher/VMMSwitcher.mac@ 18709

Last change on this file since 18709 was 16859, checked in by vboxsync, 16 years ago

Load hypervisor CR3 from CPUM (instead of hardcoded fixups in the switchers). Dangerous change. Watch for regressions.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 4.3 KB
Line 
1; $Id: VMMSwitcher.mac 16859 2009-02-17 16:19:51Z vboxsync $
2;; @file
3; VMM - World Switchers.
4;
5
6;
7; Copyright (C) 2006-2007 Sun Microsystems, Inc.
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; Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
18; Clara, CA 95054 USA or visit http://www.sun.com if you need
19; additional information or have any questions.
20;
21
22%ifndef ___VMMSwitcher_mac
23%define ___VMMSwitcher_mac
24
25%include "iprt/asmdefs.mac"
26
27; enum VMMSWITCHER {
28%define VMMSWITCHER_INVALID 0
29%define VMMSWITCHER_32_TO_32 1
30%define VMMSWITCHER_32_TO_PAE 2
31%define VMMSWITCHER_32_TO_AMD64 3
32%define VMMSWITCHER_PAE_TO_32BIT 4
33%define VMMSWITCHER_PAE_TO_PAE 5
34%define VMMSWITCHER_PAE_TO_AMD64 6
35%define VMMSWITCHER_AMD64_TO_32 7
36%define VMMSWITCHER_AMD64_TO_PAE 8
37%define VMMSWITCHER_AMD64_TO_AMD64 9
38;; @todo the rest are all wrong. sync with vmm.h.
39%define VMMSWITCHER_HOST_TO_VMX 9
40%define VMMSWITCHER_HOST_TO_SVM 10
41%define VMMSWITCHER_MAX 12
42; }
43
44
45struc VMMSWITCHERDEF
46 .pvCode: RTCCPTR_RES 1
47 .pvFixups: RTCCPTR_RES 1
48 .pszDesc: RTCCPTR_RES 1
49 .pfnRelocate: RTCCPTR_RES 1
50 .enmType: resd 1
51 .cbCode: resd 1
52 .offR0HostToGuest: resd 1
53 .offGCGuestToHost: resd 1
54 .offGCCallTrampoline: resd 1
55 .offGCGuestToHostAsm: resd 1
56 .offGCGuestToHostAsmHyperCtx: resd 1
57 .offGCGuestToHostAsmGuestCtx: resd 1
58 ; disasm help
59 .offHCCode0: resd 1
60 .cbHCCode0: resd 1
61 .offHCCode1: resd 1
62 .cbHCCode1: resd 1
63 .offIDCode0: resd 1
64 .cbIDCode0: resd 1
65 .offIDCode1: resd 1
66 .cbIDCode1: resd 1
67 .offGCCode: resd 1
68 .cbGCCode: resd 1
69endstruc
70
71
72;/** @name Fixup Types.
73; * @{
74; */
75%define FIX_HC_2_GC_NEAR_REL 1
76%define FIX_HC_2_ID_NEAR_REL 2
77%define FIX_GC_2_HC_NEAR_REL 3
78%define FIX_GC_2_ID_NEAR_REL 4
79%define FIX_ID_2_HC_NEAR_REL 5
80%define FIX_ID_2_GC_NEAR_REL 6
81%define FIX_GC_FAR32 7
82%define FIX_GC_CPUM_OFF 8
83%define FIX_GC_VM_OFF 9
84%define FIX_HC_CPUM_OFF 10
85%define FIX_HC_VM_OFF 11
86%define FIX_INTER_32BIT_CR3 12
87%define FIX_INTER_PAE_CR3 13
88%define FIX_INTER_AMD64_CR3 14
89%define FIX_HYPER_CS 18
90%define FIX_HYPER_DS 19
91%define FIX_HYPER_TSS 20
92%define FIX_GC_TSS_GDTE_DW2 21
93%define FIX_CR4_MASK 22
94%define FIX_CR4_OSFSXR 23
95%define FIX_NO_FXSAVE_JMP 24
96%define FIX_NO_SYSENTER_JMP 25
97%define FIX_NO_SYSCALL_JMP 26
98%define FIX_HC_32BIT 27
99%define FIX_HC_64BIT 28
100%define FIX_HC_64BIT_CPUM 29
101%define FIX_HC_64BIT_CS 30
102%define FIX_ID_32BIT 31
103%define FIX_ID_64BIT 32
104%define FIX_ID_FAR32_TO_64BIT_MODE 33
105%define FIX_GC_APIC_BASE_32BIT 34
106%define FIX_HC_64BIT_NOCHECK 35
107%define FIX_GC_64_BIT_CPUM_OFF 36
108%define FIX_THE_END 255
109;/** @} */
110
111
112;;
113; Generate a fixup label.
114; @param %1 Type of fixup (use one of those %defines)
115; @param %2 Offset into the instruction.
116; @param %3 Optional fixup data.
117%macro FIXUP 2-*
118BEGINDATA
119 db %1 ; the type
120 dd %%instruction + %2 - NAME(Start)
121 %rotate 2
122 %rep %0 - 2
123 dd %1
124 %rotate 1
125 %endrep
126
127BEGINCODE
128%%instruction:
129%endmacro
130
131
132;; IMPORTANT all COM_ functions trashes esi, some edi and the LOOP_SHORT_WHILE kills ecx.
133;%define DEBUG_STUFF 1
134
135%ifdef DEBUG_STUFF
136 %define DEBUG_CHAR(ch) COM_CHAR ch
137 %define DEBUG_S_CHAR(ch) COM_CHAR ch
138%else
139 %define DEBUG_CHAR(ch)
140 %define DEBUG_S_CHAR(ch)
141%endif
142
143%endif ; !___VMMSwitcher_mac
144
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette