VirtualBox

source: vbox/trunk/src/VBox/VMM/VMMR3/PATMA.mac@ 56085

Last change on this file since 56085 was 54764, checked in by vboxsync, 10 years ago

Added an infix 'ASMFIX' to the PATMA.h fixup types used in the patch template code in PATMA.asm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 7.1 KB
Line 
1; $Id: PATMA.mac 54764 2015-03-15 03:25:11Z vboxsync $
2;; @file
3; PATM macros & definitions (identical to PATMA.h!).
4;
5
6;
7; Copyright (C) 2006-2015 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; hardcoded dependency on single byte int 3
19%define PATM_INT3 int3
20
21;; @name Patch Fixup Types
22; @remarks These fixups types are part of the saved state.
23; @{
24%define PATM_ASMFIX_VMFLAGS 0xF1ABCD00
25%ifdef VBOX_WITH_STATISTICS
26 %define PATM_ASMFIX_ALLPATCHCALLS 0xF1ABCD01
27 %define PATM_ASMFIX_PERPATCHCALLS 0xF1ABCD02
28%endif
29%define PATM_ASMFIX_JUMPDELTA 0xF1ABCD03
30%ifdef VBOX_WITH_STATISTICS
31 %define PATM_ASMFIX_IRETEFLAGS 0xF1ABCD04
32 %define PATM_ASMFIX_IRETCS 0xF1ABCD05
33 %define PATM_ASMFIX_IRETEIP 0xF1ABCD06
34%endif
35%define PATM_ASMFIX_FIXUP 0xF1ABCD07
36%define PATM_ASMFIX_PENDINGACTION 0xF1ABCD08
37%define PATM_ASMFIX_CPUID_STD_PTR 0xF1ABCD09
38%define PATM_ASMFIX_CPUID_EXT_PTR 0xF1ABCD0a
39%define PATM_ASMFIX_CPUID_DEF_PTR 0xF1ABCD0b
40%define PATM_ASMFIX_STACKBASE 0xF1ABCD0c ;;< Stack to store our private patch return addresses
41%define PATM_ASMFIX_STACKBASE_GUEST 0xF1ABCD0d ;;< Stack to store guest return addresses
42%define PATM_ASMFIX_STACKPTR 0xF1ABCD0e
43%define PATM_ASMFIX_PATCHBASE 0xF1ABCD0f
44%define PATM_ASMFIX_INTERRUPTFLAG 0xF1ABCD10
45%define PATM_ASMFIX_INHIBITIRQADDR 0xF1ABCD11
46%define PATM_ASMFIX_VM_FORCEDACTIONS 0xF1ABCD12
47%define PATM_ASMFIX_TEMP_EAX 0xF1ABCD13 ;;< Location for original EAX register
48%define PATM_ASMFIX_TEMP_ECX 0xF1ABCD14 ;;< Location for original ECX register
49%define PATM_ASMFIX_TEMP_EDI 0xF1ABCD15 ;;< Location for original EDI register
50%define PATM_ASMFIX_TEMP_EFLAGS 0xF1ABCD16 ;;< Location for original eflags
51%define PATM_ASMFIX_TEMP_RESTORE_FLAGS 0xF1ABCD17 ;;< Which registers to restore
52%define PATM_ASMFIX_CALL_PATCH_TARGET_ADDR 0xF1ABCD18
53%define PATM_ASMFIX_CALL_RETURN_ADDR 0xF1ABCD19
54%define PATM_ASMFIX_CPUID_CENTAUR_PTR 0xF1ABCD1a
55%define PATM_ASMFIX_REUSE_LATER_0 0xF1ABCD1b
56%define PATM_ASMFIX_REUSE_LATER_1 0xF1ABCD1c
57%define PATM_ASMFIX_REUSE_LATER_2 0xF1ABCD1d
58%define PATM_ASMFIX_REUSE_LATER_3 0xF1ABCD1e
59%define PATM_ASMFIX_PATCH_HLP_CPUM_CPUID 0xF1ABCD1f
60
61;/* Anything larger doesn't require a fixup */
62%define PATM_ASMFIX_NO_FIXUP 0xF1ABCE00
63%define PATM_ASMFIX_CPUID_STD_MAX 0xF1ABCE00
64%define PATM_ASMFIX_CPUID_EXT_MAX 0xF1ABCE01
65%define PATM_ASMFIX_RETURNADDR 0xF1ABCE02
66%define PATM_ASMFIX_PATCHNEXTBLOCK 0xF1ABCE03
67%define PATM_ASMFIX_CALLTARGET 0xF1ABCE04 ;;< relative call target
68%define PATM_ASMFIX_NEXTINSTRADDR 0xF1ABCE05 ;;< absolute guest address of the next instruction
69%define PATM_ASMFIX_CURINSTRADDR 0xF1ABCE06 ;;< absolute guest address of the current instruction
70%define PATM_ASMFIX_LOOKUP_AND_CALL_FUNCTION 0xF1ABCE07 ;;< Relative address of global PATM lookup and call function.
71%define PATM_ASMFIX_RETURN_FUNCTION 0xF1ABCE08 ;;< Relative address of global PATM return function.
72%define PATM_ASMFIX_LOOKUP_AND_JUMP_FUNCTION 0xF1ABCE09 ;;< Relative address of global PATM lookup and jump function.
73%define PATM_ASMFIX_IRET_FUNCTION 0xF1ABCE0A ;;< Relative address of global PATM iret function.
74%define PATM_ASMFIX_CPUID_CENTAUR_MAX 0xF1ABCE0B
75;; @}
76
77
78;; Everything except IOPL, NT, IF, VM, VIF, VIP and RF
79%define PATM_FLAGS_MASK (X86_EFL_CF|X86_EFL_PF|X86_EFL_AF|X86_EFL_ZF|X86_EFL_SF|X86_EFL_TF|X86_EFL_DF|X86_EFL_OF|X86_EFL_AC|X86_EFL_ID)
80
81; currently only IF & IOPL
82%define PATM_VIRTUAL_FLAGS_MASK (X86_EFL_IF|X86_EFL_IOPL)
83
84; PATM stack size (identical in PATMA.h!!)
85%define PATM_STACK_SIZE (4096)
86%define PATM_STACK_TOTAL_SIZE (2 * PATM_STACK_SIZE)
87%define PATM_MAX_STACK (PATM_STACK_SIZE / RTRCPTR_CB)
88
89;; @name Patch Manager pending actions (in GCSTATE).
90;; @{
91%define PATM_ACTION_LOOKUP_ADDRESS 1
92%define PATM_ACTION_DISPATCH_PENDING_IRQ 2
93%define PATM_ACTION_PENDING_IRQ_AFTER_IRET 3
94%define PATM_ACTION_DO_V86_IRET 4
95%define PATM_ACTION_LOG_IF1 5
96%define PATM_ACTION_LOG_CLI 6
97%define PATM_ACTION_LOG_STI 7
98%define PATM_ACTION_LOG_POPF_IF1 8
99%define PATM_ACTION_LOG_POPF_IF0 9
100%define PATM_ACTION_LOG_PUSHF 10
101%define PATM_ACTION_LOG_IRET 11
102%define PATM_ACTION_LOG_RET 12
103%define PATM_ACTION_LOG_CALL 13
104%define PATM_ACTION_LOG_GATE_ENTRY 14
105;; @}
106
107;; Magic dword found in ecx for patm pending actions.
108%define PATM_ACTION_MAGIC 0xABCD4321
109
110;; @name PATM_ASMFIX_TEMP_RESTORE_FLAGS
111;; @{
112%define PATM_RESTORE_EAX RT_BIT(0)
113%define PATM_RESTORE_ECX RT_BIT(1)
114%define PATM_RESTORE_EDI RT_BIT(2)
115;; @}
116
117
118;;
119; Relocation entry for PATCHASMRECORD.
120;
121struc PATCHASMRELOC
122 ;; The relocation type.
123 .uType resd 1
124 ;; Additional information specific to the relocation type.
125 .uCode resd 1
126endstruc
127
128;;
129; Assembly patch descriptor record.
130;
131struc PATCHASMRECORD
132 ;; Pointer to the patch code.
133 .pbFunction RTCCPTR_RES 1
134 ;; Offset of the jump table?
135 .offJump resd 1
136 ;; Used only by loop/loopz/loopnz.
137 .offRelJump resd 1
138 ;; Size override byte position.
139 .offSizeOverride resd 1
140 ;; The size of the patch function.
141 .cbFunction resd 1
142 ;; The number of relocations in aRelocs.
143 .cRelocs resd 1
144 ;; Variable sized relocation table. (put after the iend, so no included)
145 ;.aRelocs resb PATCHASMRELOC_size
146endstruc
147
148;/* For indirect calls/jump (identical in PATMA.h & PATMA.mac!) */
149%define PATM_MAX_JUMPTABLE_ENTRIES 16
150
151struc PATCHJUMPTABLE
152 .nrSlots resw 1
153 .ulInsertPos resw 1
154 .cAddresses resd 1
155 ; array of pInstrGC and pRelPatchGC pairs (nrSlot times)
156 .Slot_pInstrGC resd 1
157 .Slot_pRelPatchGC resd 1
158endstruc
159
160;/* Must match structure size!!
161%define PATCHJUMPTABLE_SIZE (PATM_MAX_JUMPTABLE_ENTRIES*2*4)
162;/* Direct calls need only one lookup slot */
163%define PATCHDIRECTJUMPTABLE_SIZE (2*4)
164
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