summaryrefslogtreecommitdiff
path: root/vmcs_dump.h
blob: 34da2505eca7241268aa176d5c386170d28d87da (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158

/* this structure is for debugging purposes. */
/* to use, call kvm_vmcs_dump() within driver */
/* and, for now, examine with mdb */
/* note that a vmcs must be loaded (via vcpu_load)  */
/* of course, x86/x64 only */

typedef struct vmcs_dump_area {
	int where;  /* 0, 1, or 2 depending on when the area is dumped to */
	uint16_t virtual_processor_id;
	uint16_t guest_es_selector;
	uint16_t guest_cs_selector;
	uint16_t guest_ss_selector;
	uint16_t guest_ds_selector;
	uint16_t guest_fs_selector;
	uint16_t guest_gs_selector;
	uint16_t guest_ldtr_selector;
	uint16_t guest_tr_selector;
	uint16_t host_es_selector;
	uint16_t host_cs_selector;
	uint16_t host_ss_selector;
	uint16_t host_ds_selector;
	uint16_t host_fs_selector;
	uint16_t host_gs_selector;
	uint16_t host_tr_selector;

	uint64_t io_bitmap_a;
	uint64_t io_bitmap_a_high;
	uint64_t io_bitmap_b;
	uint64_t io_bitmap_b_high;
	uint64_t msr_bitmap;
	uint64_t msr_bitmap_high;
	uint64_t vm_exit_msr_store_addr;
	uint64_t vm_exit_msr_store_addr_high;
	uint64_t vm_exit_msr_load_addr;
	uint64_t vm_exit_msr_load_addr_high;
	uint64_t vm_entry_msr_load_addr;
	uint64_t vm_entry_msr_load_addr_high;
	uint64_t tsc_offset;
	uint64_t tsc_offset_high;
	uint64_t virtual_apic_page_addr;
	uint64_t virtual_apic_page_addr_high;
	uint64_t apic_access_addr;
	uint64_t apic_access_addr_high;
	uint64_t ept_pointer;
	uint64_t ept_pointer_high;
	uint64_t guest_physical_address;
	uint64_t guest_physical_address_high;
	uint64_t vmcs_link_pointer;
	uint64_t vmcs_link_pointer_high;
	uint64_t guest_ia32_debugctl;
	uint64_t guest_ia32_debugctl_high;
	uint64_t guest_ia32_pat;
	uint64_t guest_ia32_pat_high;
	uint64_t guest_pdptr0;
	uint64_t guest_pdptr0_high;
	uint64_t guest_pdptr1;
	uint64_t guest_pdptr1_high;
	uint64_t guest_pdptr2;
	uint64_t guest_pdptr2_high;
	uint64_t guest_pdptr3;
	uint64_t guest_pdptr3_high;
	uint64_t host_ia32_pat;
	uint64_t host_ia32_pat_high;

	uint32_t pin_based_vm_exec_control;
	uint32_t cpu_based_vm_exec_control;
	uint32_t exception_bitmap;
	uint32_t page_fault_error_code_mask;
	uint32_t page_fault_error_code_match;
	uint32_t cr3_target_count;
	uint32_t vm_exit_controls;
	uint32_t vm_exit_msr_store_count;
	uint32_t vm_exit_msr_load_count;
	uint32_t vm_entry_controls;
	uint32_t vm_entry_msr_load_count;
	uint32_t vm_entry_intr_info_field;
	uint32_t vm_entry_exception_error_code;
	uint32_t vm_entry_instruction_len;
	uint32_t tpr_threshold;
	uint32_t secondary_vm_exec_control;
	uint32_t ple_gap;
	uint32_t ple_window;
	uint32_t vm_instruction_error;
	uint32_t vm_exit_reason;
	uint32_t vm_exit_intr_info;
	uint32_t vm_exit_intr_error_code;
	uint32_t idt_vectoring_info_field;
	uint32_t idt_vectoring_error_code;
	uint32_t vm_exit_instruction_len;
	uint32_t vmx_instruction_info;
	uint32_t guest_es_limit;
	uint32_t guest_cs_limit;
	uint32_t guest_ss_limit;
	uint32_t guest_ds_limit;
	uint32_t guest_fs_limit;
	uint32_t guest_gs_limit;
	uint32_t guest_ldtr_limit;
	uint32_t guest_tr_limit;
	uint32_t guest_gdtr_limit;
	uint32_t guest_idtr_limit;
	uint32_t guest_es_ar_bytes;
	uint32_t guest_cs_ar_bytes;
	uint32_t guest_ss_ar_bytes;
	uint32_t guest_ds_ar_bytes;
	uint32_t guest_fs_ar_bytes;
	uint32_t guest_gs_ar_bytes;
	uint32_t guest_ldtr_ar_bytes;
	uint32_t guest_tr_ar_bytes;
	uint32_t guest_interruptibilty_info;
	uint32_t guest_activity_state;
	uint32_t guest_sysenter_cs;
	uint32_t host_ia32_sysenter_cs;
	uint32_t launch_resume_error;

	long cr0_guest_host_mask;
	long cr4_guest_host_mask;
	long cr0_read_shadow;
	long cr4_read_shadow;
	long cr3_target_value0;
	long cr3_target_value1;
	long cr3_target_value2;
	long cr3_target_value3;
	long exit_qualification;
	long guest_linear_address;
	long guest_cr0;
	long guest_cr3;
	long guest_cr4;
	long guest_es_base;
	long guest_cs_base;
	long guest_ss_base;
	long guest_ds_base;
	long guest_fs_base;
	long guest_gs_base;
	long guest_ldtr_base;
	long guest_tr_base;
	long guest_gdtr_base;
	long guest_idtr_base;
	long guest_dr7;
	long guest_rsp;
	long guest_rip;
	long guest_rflags;
	long guest_pending_dbg_exceptions;
	long guest_sysenter_esp;
	long guest_sysenter_eip;
	long host_cr0;
	long host_cr3;
	long host_cr4;
	long host_fs_base;
	long host_gs_base;
	long host_tr_base;
	long host_gdtr_base;
	long host_idtr_base;
	long host_ia32_sysenter_esp;
	long host_ia32_sysenter_eip;
	long host_rsp;
	long host_rip;
} vmcs_dump_area_t;