1 | /* $Id: VBoxVMM.d 58980 2015-12-03 22:46:15Z vboxsync $ */
|
---|
2 | /** @file
|
---|
3 | * VBoxVMM - Static dtrace probes.
|
---|
4 | */
|
---|
5 |
|
---|
6 | /*
|
---|
7 | * Copyright (C) 2009-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 | provider vboxvmm
|
---|
19 | {
|
---|
20 | probe em__state__changed(struct VMCPU *a_pVCpu, int a_enmOldState, int a_enmNewState, int a_rc);
|
---|
21 | /*^^VMM-ALT-TP: "%d -> %d (rc=%d)", a_enmOldState, a_enmNewState, a_rc */
|
---|
22 |
|
---|
23 | probe em__state__unchanged(struct VMCPU *a_pVCpu, int a_enmState, int a_rc);
|
---|
24 | /*^^VMM-ALT-TP: "%d (rc=%d)", a_enmState, a_rc */
|
---|
25 |
|
---|
26 | probe em__raw__run__pre(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
27 | /*^^VMM-ALT-TP: "%04x:%08llx", (a_pCtx)->cs, (a_pCtx)->rip */
|
---|
28 |
|
---|
29 | probe em__raw__run__ret(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx, int a_rc);
|
---|
30 | /*^^VMM-ALT-TP: "%04x:%08llx rc=%d", (a_pCtx)->cs, (a_pCtx)->rip, (a_rc) */
|
---|
31 |
|
---|
32 | probe em__ff__high(struct VMCPU *a_pVCpu, uint32_t a_fGlobal, uint32_t a_fLocal, int a_rc);
|
---|
33 | /*^^VMM-ALT-TP: "vm=%#x cpu=%#x rc=%d", (a_fGlobal), (a_fLocal), (a_rc) */
|
---|
34 |
|
---|
35 | probe em__ff__all(struct VMCPU *a_pVCpu, uint32_t a_fGlobal, uint32_t a_fLocal, int a_rc);
|
---|
36 | /*^^VMM-ALT-TP: "vm=%#x cpu=%#x rc=%d", (a_fGlobal), (a_fLocal), (a_rc) */
|
---|
37 |
|
---|
38 | probe em__ff__all__ret(struct VMCPU *a_pVCpu, int a_rc);
|
---|
39 | /*^^VMM-ALT-TP: "%d", (a_rc) */
|
---|
40 |
|
---|
41 | probe em__ff__raw(struct VMCPU *a_pVCpu, uint32_t a_fGlobal, uint32_t a_fLocal);
|
---|
42 | /*^^VMM-ALT-TP: "vm=%#x cpu=%#x", (a_fGlobal), (a_fLocal) */
|
---|
43 |
|
---|
44 | probe em__ff__raw_ret(struct VMCPU *a_pVCpu, int a_rc);
|
---|
45 | /*^^VMM-ALT-TP: "%d", (a_rc) */
|
---|
46 |
|
---|
47 | probe pdm__irq__get( struct VMCPU *a_pVCpu, uint32_t a_uTag, uint32_t a_idSource, uint32_t a_iIrq);
|
---|
48 | probe pdm__irq__high(struct VMCPU *a_pVCpu, uint32_t a_uTag, uint32_t a_idSource);
|
---|
49 | probe pdm__irq__low( struct VMCPU *a_pVCpu, uint32_t a_uTag, uint32_t a_idSource);
|
---|
50 | probe pdm__irq__hilo(struct VMCPU *a_pVCpu, uint32_t a_uTag, uint32_t a_idSource);
|
---|
51 |
|
---|
52 |
|
---|
53 | probe r0__gvmm__vm__created(void *a_pGVM, void *a_pVM, uint32_t a_Pid, void *a_hEMT0, uint32_t a_cCpus);
|
---|
54 | probe r0__hmsvm__vmexit(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx, uint64_t a_ExitCode, struct SVMVMCB *a_pVmcb);
|
---|
55 | probe r0__hmvmx__vmexit(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx, uint64_t a_ExitReason, uint64_t a_ExitQualification);
|
---|
56 | probe r0__hmvmx__vmexit__noctx(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pIncompleteCtx, uint64_t a_ExitReason);
|
---|
57 |
|
---|
58 | probe r0__vmm__return__to__ring3__rc(struct VMCPU *a_pVCpu, struct CPUMCTX *p_Ctx, int a_rc);
|
---|
59 | probe r0__vmm__return__to__ring3__hm(struct VMCPU *a_pVCpu, struct CPUMCTX *p_Ctx, int a_rc);
|
---|
60 |
|
---|
61 |
|
---|
62 | /** \#DE - integer divide error. */
|
---|
63 | probe xcpt__de(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
64 | /** \#DB - debug fault / trap. */
|
---|
65 | probe xcpt__db(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx, uint64_t a_dr6);
|
---|
66 | /** \#BP - breakpoint (INT3). */
|
---|
67 | probe xcpt__bp(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
68 | /** \#OF - overflow (INTO). */
|
---|
69 | probe xcpt__of(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
70 | /** \#BR - bound range exceeded (BOUND). */
|
---|
71 | probe xcpt__br(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
72 | /** \#UD - undefined opcode. */
|
---|
73 | probe xcpt__ud(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
74 | /** \#NM - FPU not avaible and more. */
|
---|
75 | probe xcpt__nm(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
76 | /** \#DF - double fault. */
|
---|
77 | probe xcpt__df(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
78 | /** \#TS - TSS related fault. */
|
---|
79 | probe xcpt__ts(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx, uint32_t a_uErr);
|
---|
80 | /** \#NP - segment not present. */
|
---|
81 | probe xcpt__np(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx, uint32_t a_uErr);
|
---|
82 | /** \#SS - stack segment fault. */
|
---|
83 | probe xcpt__ss(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx, uint32_t a_uErr);
|
---|
84 | /** \#GP - general protection fault. */
|
---|
85 | probe xcpt__gp(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx, uint32_t a_uErr);
|
---|
86 | /** \#PF - page fault. */
|
---|
87 | probe xcpt__pg(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx, uint32_t a_uErr, uint64_t a_cr2);
|
---|
88 | /** \#MF - math fault (FPU). */
|
---|
89 | probe xcpt__mf(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
90 | /** \#AC - alignment check. */
|
---|
91 | probe xcpt__ac(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
92 | /** \#XF - SIMD floating point exception. */
|
---|
93 | probe xcpt__xf(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
94 | /** \#VE - virtualization exception. */
|
---|
95 | probe xcpt__ve(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
96 | /** \#SX - security exception. */
|
---|
97 | probe xcpt__sx(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx, uint32_t a_uErr);
|
---|
98 |
|
---|
99 | /** Software interrupt (INT XXh). */
|
---|
100 | probe int__software(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx, uint8_t a_iInterrupt);
|
---|
101 | /** Hardware interrupt being dispatched. */
|
---|
102 | probe int__hardware(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx, uint8_t a_iInterrupt, uint32_t a_uTag, uint32_t a_idSource);
|
---|
103 |
|
---|
104 | /** Exit - Task switch. */
|
---|
105 | probe exit__task__switch(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
106 | /** Exit - HALT instruction.
|
---|
107 | * @todo not yet implemented. */
|
---|
108 | probe exit__halt(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
109 | /** Exit - MWAIT instruction. */
|
---|
110 | probe exit__mwait(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
111 | /** Exit - MONITOR instruction. */
|
---|
112 | probe exit__monitor(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
113 | /** Exit - CPUID instruction (missing stuff in raw-mode). */
|
---|
114 | probe exit__cpuid(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx, uint32_t uLeaf, uint32_t uSubLeaf);
|
---|
115 | /** Exit - INVD instruction. */
|
---|
116 | probe exit__invd(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
117 | /** Exit - WBINVD instruction. */
|
---|
118 | probe exit__wbinvd(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
119 | /** Exit - INVLPG instruction. */
|
---|
120 | probe exit__invlpg(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
121 | /** Exit - RDTSC instruction. */
|
---|
122 | probe exit__rdtsc(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
123 | /** Exit - RDTSCP instruction. */
|
---|
124 | probe exit__rdtscp(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
125 | /** Exit - RDPMC instruction. */
|
---|
126 | probe exit__rdpmc(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
127 | /** Exit - RDMSR instruction. */
|
---|
128 | probe exit__rdmsr(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx, uint32_t a_idMsr);
|
---|
129 | /** Exit - WRMSR instruction. */
|
---|
130 | probe exit__wrmsr(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx, uint32_t a_idMsr, uint64_t a_uValue);
|
---|
131 | /** Exit - CRx read instruction (missing smsw in raw-mode,
|
---|
132 | * and reads in general in VT-x). */
|
---|
133 | probe exit__crx__read(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx, uint8_t a_iReg);
|
---|
134 | /** Exit - CRx write instruction. */
|
---|
135 | probe exit__crx__write(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx, uint8_t a_iReg);
|
---|
136 | /** Exit - DRx read instruction. */
|
---|
137 | probe exit__drx__read(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx, uint8_t a_iReg);
|
---|
138 | /** Exit - DRx write instruction. */
|
---|
139 | probe exit__drx__write(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx, uint8_t a_iReg);
|
---|
140 | /** Exit - PAUSE instruction (not in raw-mode). */
|
---|
141 | probe exit__pause(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
142 | /** Exit - XSETBV instruction. */
|
---|
143 | probe exit__xsetbv(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
144 | /** Exit - SIDT instruction. */
|
---|
145 | probe exit__sidt(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
146 | /** Exit - LIDT instruction. */
|
---|
147 | probe exit__lidt(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
148 | /** Exit - SGDT instruction. */
|
---|
149 | probe exit__sgdt(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
150 | /** Exit - LGDT instruction. */
|
---|
151 | probe exit__lgdt(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
152 | /** Exit - SLDT instruction. */
|
---|
153 | probe exit__sldt(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
154 | /** Exit - LLDT instruction. */
|
---|
155 | probe exit__lldt(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
156 | /** Exit - STR instruction. */
|
---|
157 | probe exit__str(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
158 | /** Exit - LTR instruction. */
|
---|
159 | probe exit__ltr(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
160 | /** Exit - GETSEC instruction. */
|
---|
161 | probe exit__getsec(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
162 | /** Exit - RSM instruction. */
|
---|
163 | probe exit__rsm(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
164 | /** Exit - RDRAND instruction. */
|
---|
165 | probe exit__rdrand(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
166 | /** Exit - RDSEED instruction. */
|
---|
167 | probe exit__rdseed(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
168 | /** Exit - XSAVES instruction. */
|
---|
169 | probe exit__xsaves(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
170 | /** Exit - XRSTORS instruction. */
|
---|
171 | probe exit__xrstors(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
172 | /** Exit - VMCALL (intel) or VMMCALL (AMD) instruction. */
|
---|
173 | probe exit__vmm__call(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
174 |
|
---|
175 | /** Exit - VT-x VMCLEAR instruction. */
|
---|
176 | probe exit__vmx__vmclear(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
177 | /** Exit - VT-x VMLAUNCH instruction. */
|
---|
178 | probe exit__vmx__vmlaunch(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
179 | /** Exit - VT-x VMPTRLD instruction. */
|
---|
180 | probe exit__vmx__vmptrld(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
181 | /** Exit - VT-x VMPTRST instruction. */
|
---|
182 | probe exit__vmx__vmptrst(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
183 | /** Exit - VT-x VMREAD instruction. */
|
---|
184 | probe exit__vmx__vmread(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
185 | /** Exit - VT-x VMRESUME instruction. */
|
---|
186 | probe exit__vmx__vmresume(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
187 | /** Exit - VT-x VMWRITE instruction. */
|
---|
188 | probe exit__vmx__vmwrite(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
189 | /** Exit - VT-x VMXOFF instruction. */
|
---|
190 | probe exit__vmx__vmxoff(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
191 | /** Exit - VT-x VMXON instruction. */
|
---|
192 | probe exit__vmx__vmxon(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
193 | /** Exit - VT-x VMFUNC instruction. */
|
---|
194 | probe exit__vmx__vmfunc(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
195 | /** Exit - VT-x INVEPT instruction. */
|
---|
196 | probe exit__vmx__invept(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
197 | /** Exit - VT-x INVVPID instruction. */
|
---|
198 | probe exit__vmx__invvpid(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
199 | /** Exit - VT-x INVPCID instruction. */
|
---|
200 | probe exit__vmx__invpcid(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
201 | /** Exit - VT-x EPT violation. */
|
---|
202 | probe exit__vmx__ept__violation(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
203 | /** Exit - VT-x EPT misconfiguration. */
|
---|
204 | probe exit__vmx__ept__misconfig(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
205 | /** Exit - VT-x Virtual APIC page access. */
|
---|
206 | probe exit__vmx__vapic__access(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
207 | /** Exit - VT-x Virtual APIC page write needing virtualizing. */
|
---|
208 | probe exit__vmx__vapic__write(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
209 |
|
---|
210 | /** Exit - AMD-V VMRUN instruction. */
|
---|
211 | probe exit__svm__vmrun(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
212 | /** Exit - AMD-V VMLOAD instruction. */
|
---|
213 | probe exit__svm__vmload(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
214 | /** Exit - AMD-V VMSAVE instruction. */
|
---|
215 | probe exit__svm__vmsave(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
216 | /** Exit - AMD-V STGI instruction. */
|
---|
217 | probe exit__svm__stgi(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
218 | /** Exit - AMD-V CLGI instruction. */
|
---|
219 | probe exit__svm__clgi(struct VMCPU *a_pVCpu, struct CPUMCTX *a_pCtx);
|
---|
220 | };
|
---|
221 |
|
---|
222 | #pragma D attributes Evolving/Evolving/Common provider vboxvmm provider
|
---|
223 | #pragma D attributes Private/Private/Unknown provider vboxvmm module
|
---|
224 | #pragma D attributes Private/Private/Unknown provider vboxvmm function
|
---|
225 | #pragma D attributes Evolving/Evolving/Common provider vboxvmm name
|
---|
226 | #pragma D attributes Evolving/Evolving/Common provider vboxvmm args
|
---|
227 |
|
---|