2 * This file is part of the Palacios Virtual Machine Monitor developed
3 * by the V3VEE Project with funding from the United States National
4 * Science Foundation and the Department of Energy.
6 * The V3VEE Project is a joint project between Northwestern University
7 * and the University of New Mexico. You can find out more at
10 * Copyright (c) 2008, Jack Lange <jarusl@cs.northwestern.edu>
11 * Copyright (c) 2008, The V3VEE Project <http://www.v3vee.org>
12 * All rights reserved.
14 * Author: Jack Lange <jarusl@cs.northwestern.edu>
16 * This is free software. You are permitted to use,
17 * redistribute, and modify it as specified in the file "V3VEE_LICENSE".
20 #include <palacios/vmcs.h>
21 #include <palacios/vmx_lowlevel.h>
22 #include <palacios/vmm.h>
25 // static const char * v3_vmcs_field_to_str(vmcs_field_t field);
27 //extern char * exception_names;
29 // Ignores "HIGH" addresses - 32 bit only for now
33 static inline void print_vmcs_field(vmcs_field_t vmcs_index) {
34 int len = v3_vmcs_get_field_len(vmcs_index);
37 if (vmcs_read(vmcs_index, &val) != VMX_SUCCESS) {
38 PrintError("VMCS_READ error for %s\n", v3_vmcs_field_to_str(vmcs_index));
43 PrintDebug("\t%s: 0x%.4x\n", v3_vmcs_field_to_str(vmcs_index), (uint16_t)val);
44 } else if (len == 4) {
45 PrintDebug("\t%s: 0x%.8x\n", v3_vmcs_field_to_str(vmcs_index), (uint32_t)val);
46 } else if (len == 8) {
47 PrintDebug("\t%s: 0x%p\n", v3_vmcs_field_to_str(vmcs_index), (void *)(addr_t)val);
53 static void print_guest_state()
55 PrintDebug("VMCS_GUEST_STATE\n");
56 print_vmcs_field(VMCS_GUEST_RIP);
57 print_vmcs_field(VMCS_GUEST_RSP);
58 print_vmcs_field(VMCS_GUEST_RFLAGS);
59 print_vmcs_field(VMCS_GUEST_CR0);
60 print_vmcs_field(VMCS_GUEST_CR3);
61 print_vmcs_field(VMCS_GUEST_CR4);
62 print_vmcs_field(VMCS_GUEST_DR7);
67 PrintDebug(" ==> CS\n");
68 print_vmcs_field(VMCS_GUEST_CS_SELECTOR);
69 print_vmcs_field(VMCS_GUEST_CS_BASE);
70 print_vmcs_field(VMCS_GUEST_CS_LIMIT);
71 print_vmcs_field(VMCS_GUEST_CS_ACCESS);
73 PrintDebug(" ==> SS\n");
74 print_vmcs_field(VMCS_GUEST_SS_SELECTOR);
75 print_vmcs_field(VMCS_GUEST_SS_BASE);
76 print_vmcs_field(VMCS_GUEST_SS_LIMIT);
77 print_vmcs_field(VMCS_GUEST_SS_ACCESS);
79 PrintDebug(" ==> DS\n");
80 print_vmcs_field(VMCS_GUEST_DS_SELECTOR);
81 print_vmcs_field(VMCS_GUEST_DS_BASE);
82 print_vmcs_field(VMCS_GUEST_DS_LIMIT);
83 print_vmcs_field(VMCS_GUEST_DS_ACCESS);
85 PrintDebug(" ==> ES\n");
86 print_vmcs_field(VMCS_GUEST_ES_SELECTOR);
87 print_vmcs_field(VMCS_GUEST_ES_BASE);
88 print_vmcs_field(VMCS_GUEST_ES_LIMIT);
89 print_vmcs_field(VMCS_GUEST_ES_ACCESS);
91 PrintDebug(" ==> FS\n");
92 print_vmcs_field(VMCS_GUEST_FS_SELECTOR);
93 print_vmcs_field(VMCS_GUEST_FS_BASE);
94 print_vmcs_field(VMCS_GUEST_FS_LIMIT);
95 print_vmcs_field(VMCS_GUEST_FS_ACCESS);
97 PrintDebug(" ==> GS\n");
98 print_vmcs_field(VMCS_GUEST_GS_SELECTOR);
99 print_vmcs_field(VMCS_GUEST_GS_BASE);
100 print_vmcs_field(VMCS_GUEST_GS_LIMIT);
101 print_vmcs_field(VMCS_GUEST_GS_ACCESS);
103 PrintDebug(" ==> LDTR\n");
104 print_vmcs_field(VMCS_GUEST_LDTR_SELECTOR);
105 print_vmcs_field(VMCS_GUEST_LDTR_BASE);
106 print_vmcs_field(VMCS_GUEST_LDTR_LIMIT);
107 print_vmcs_field(VMCS_GUEST_LDTR_ACCESS);
109 PrintDebug(" ==> TR\n");
110 print_vmcs_field(VMCS_GUEST_TR_SELECTOR);
111 print_vmcs_field(VMCS_GUEST_TR_BASE);
112 print_vmcs_field(VMCS_GUEST_TR_LIMIT);
113 print_vmcs_field(VMCS_GUEST_TR_ACCESS);
115 PrintDebug(" ==> GDTR\n");
116 print_vmcs_field(VMCS_GUEST_GDTR_BASE);
117 print_vmcs_field(VMCS_GUEST_GDTR_LIMIT);
119 PrintDebug(" ==> IDTR\n");
120 print_vmcs_field(VMCS_GUEST_IDTR_BASE);
121 print_vmcs_field(VMCS_GUEST_IDTR_LIMIT);
125 print_vmcs_field(VMCS_GUEST_DBG_CTL);
127 print_vmcs_field(VMCS_GUEST_DBG_CTL_HIGH);
129 print_vmcs_field(VMCS_GUEST_SYSENTER_CS);
130 print_vmcs_field(VMCS_GUEST_SYSENTER_ESP);
131 print_vmcs_field(VMCS_GUEST_SYSENTER_EIP);
133 print_vmcs_field(VMCS_GUEST_PERF_GLOBAL_CTRL);
135 print_vmcs_field(VMCS_GUEST_PERF_GLOBAL_CTRL_HIGH);
138 print_vmcs_field(VMCS_GUEST_SMBASE);
141 PrintDebug("GUEST_NON_REGISTER_STATE\n");
143 print_vmcs_field(VMCS_GUEST_ACTIVITY_STATE);
144 print_vmcs_field(VMCS_GUEST_INT_STATE);
145 print_vmcs_field(VMCS_GUEST_PENDING_DBG_EXCP);
149 static void print_host_state()
151 PrintDebug("VMCS_HOST_STATE\n");
153 print_vmcs_field(VMCS_HOST_RIP);
154 print_vmcs_field(VMCS_HOST_RSP);
155 print_vmcs_field(VMCS_HOST_CR0);
156 print_vmcs_field(VMCS_HOST_CR3);
157 print_vmcs_field(VMCS_HOST_CR4);
160 print_vmcs_field(VMCS_HOST_CS_SELECTOR);
161 print_vmcs_field(VMCS_HOST_SS_SELECTOR);
162 print_vmcs_field(VMCS_HOST_DS_SELECTOR);
163 print_vmcs_field(VMCS_HOST_ES_SELECTOR);
164 print_vmcs_field(VMCS_HOST_FS_SELECTOR);
165 print_vmcs_field(VMCS_HOST_GS_SELECTOR);
166 print_vmcs_field(VMCS_HOST_TR_SELECTOR);
169 print_vmcs_field(VMCS_HOST_FS_BASE);
170 print_vmcs_field(VMCS_HOST_GS_BASE);
171 print_vmcs_field(VMCS_HOST_TR_BASE);
172 print_vmcs_field(VMCS_HOST_GDTR_BASE);
173 print_vmcs_field(VMCS_HOST_IDTR_BASE);
176 print_vmcs_field(VMCS_HOST_SYSENTER_CS);
177 print_vmcs_field(VMCS_HOST_SYSENTER_ESP);
178 print_vmcs_field(VMCS_HOST_SYSENTER_EIP);
180 print_vmcs_field(VMCS_HOST_PERF_GLOBAL_CTRL);
182 print_vmcs_field(VMCS_HOST_PERF_GLOBAL_CTRL_HIGH);
187 static void print_exec_ctrls() {
188 PrintDebug("VMCS_EXEC_CTRL_FIELDS\n");
189 print_vmcs_field(VMCS_PIN_CTRLS);
190 print_vmcs_field(VMCS_PROC_CTRLS);
191 print_vmcs_field(VMCS_SEC_PROC_CTRLS);
193 print_vmcs_field(VMCS_EXCP_BITMAP);
194 print_vmcs_field(VMCS_PG_FAULT_ERR_MASK);
195 print_vmcs_field(VMCS_PG_FAULT_ERR_MATCH);
197 print_vmcs_field(VMCS_IO_BITMAP_A_ADDR);
199 print_vmcs_field(VMCS_IO_BITMAP_A_ADDR_HIGH);
201 print_vmcs_field(VMCS_IO_BITMAP_B_ADDR);
203 print_vmcs_field(VMCS_IO_BITMAP_B_ADDR_HIGH);
206 print_vmcs_field(VMCS_TSC_OFFSET);
208 print_vmcs_field(VMCS_TSC_OFFSET_HIGH);
213 print_vmcs_field(VMCS_CR0_MASK);
214 print_vmcs_field(VMCS_CR0_READ_SHDW);
215 print_vmcs_field(VMCS_CR4_MASK);
216 print_vmcs_field(VMCS_CR4_READ_SHDW);
218 print_vmcs_field(VMCS_CR3_TGT_CNT);
219 print_vmcs_field(VMCS_CR3_TGT_VAL_0);
220 print_vmcs_field(VMCS_CR3_TGT_VAL_1);
221 print_vmcs_field(VMCS_CR3_TGT_VAL_2);
222 print_vmcs_field(VMCS_CR3_TGT_VAL_3);
226 print_vmcs_field(VMCS_APIC_ACCESS_ADDR);
228 print_vmcs_field(VMCS_APIC_ACCESS_ADDR_HIGH);
231 print_vmcs_field(VMCS_VAPIC_ADDR);
233 print_vmcs_field(VMCS_VAPIC_ADDR_HIGH);
236 print_vmcs_field(VMCS_TPR_THRESHOLD);
238 print_vmcs_field(VMCS_MSR_BITMAP);
240 print_vmcs_field(VMCS_MSR_BITMAP_HIGH);
243 print_vmcs_field(VMCS_EXEC_PTR);
245 print_vmcs_field(VMCS_EXEC_PTR_HIGH);
250 static void print_exit_ctrls() {
251 PrintDebug("VMCS_EXIT_CTRLS\n");
253 print_vmcs_field(VMCS_EXIT_CTRLS);
256 print_vmcs_field(VMCS_EXIT_MSR_STORE_CNT);
257 print_vmcs_field(VMCS_EXIT_MSR_STORE_ADDR);
259 print_vmcs_field(VMCS_EXIT_MSR_STORE_ADDR_HIGH);
262 print_vmcs_field(VMCS_EXIT_MSR_LOAD_CNT);
263 print_vmcs_field(VMCS_EXIT_MSR_LOAD_ADDR);
265 print_vmcs_field(VMCS_EXIT_MSR_LOAD_ADDR_HIGH);
271 static void print_entry_ctrls() {
272 PrintDebug("VMCS_ENTRY_CTRLS\n");
274 print_vmcs_field(VMCS_ENTRY_CTRLS);
276 print_vmcs_field(VMCS_ENTRY_MSR_LOAD_CNT);
277 print_vmcs_field(VMCS_ENTRY_MSR_LOAD_ADDR);
279 print_vmcs_field(VMCS_ENTRY_MSR_LOAD_ADDR_HIGH);
282 print_vmcs_field(VMCS_ENTRY_INT_INFO);
283 print_vmcs_field(VMCS_ENTRY_EXCP_ERR);
284 print_vmcs_field(VMCS_ENTRY_INSTR_LEN);
290 static void print_exit_info() {
291 PrintDebug("VMCS_EXIT_INFO\n");
293 print_vmcs_field(VMCS_EXIT_REASON);
294 print_vmcs_field(VMCS_EXIT_QUAL);
296 print_vmcs_field(VMCS_EXIT_INT_INFO);
297 print_vmcs_field(VMCS_EXIT_INT_ERR);
299 print_vmcs_field(VMCS_IDT_VECTOR_INFO);
300 print_vmcs_field(VMCS_IDT_VECTOR_ERR);
302 print_vmcs_field(VMCS_EXIT_INSTR_LEN);
304 print_vmcs_field(VMCS_GUEST_LINEAR_ADDR);
305 print_vmcs_field(VMCS_VMX_INSTR_INFO);
307 print_vmcs_field(VMCS_IO_RCX);
308 print_vmcs_field(VMCS_IO_RSI);
309 print_vmcs_field(VMCS_IO_RDI);
310 print_vmcs_field(VMCS_IO_RIP);
313 print_vmcs_field(VMCS_INSTR_ERR);
316 void v3_print_vmcs() {
318 print_vmcs_field(VMCS_LINK_PTR);
320 print_vmcs_field(VMCS_LINK_PTR_HIGH);
338 * Returns the field length in bytes
340 int v3_vmcs_get_field_len(vmcs_field_t field) {
342 /* 16 bit Control Fields */
343 case VMCS_GUEST_ES_SELECTOR:
344 case VMCS_GUEST_CS_SELECTOR:
345 case VMCS_GUEST_SS_SELECTOR:
346 case VMCS_GUEST_DS_SELECTOR:
347 case VMCS_GUEST_FS_SELECTOR:
348 case VMCS_GUEST_GS_SELECTOR:
349 case VMCS_GUEST_LDTR_SELECTOR:
350 case VMCS_GUEST_TR_SELECTOR:
351 case VMCS_HOST_ES_SELECTOR:
352 case VMCS_HOST_CS_SELECTOR:
353 case VMCS_HOST_SS_SELECTOR:
354 case VMCS_HOST_DS_SELECTOR:
355 case VMCS_HOST_FS_SELECTOR:
356 case VMCS_HOST_GS_SELECTOR:
357 case VMCS_HOST_TR_SELECTOR:
360 /* 32 bit Control Fields */
362 case VMCS_PROC_CTRLS:
363 case VMCS_SEC_PROC_CTRLS:
364 case VMCS_EXCP_BITMAP:
365 case VMCS_PG_FAULT_ERR_MASK:
366 case VMCS_PG_FAULT_ERR_MATCH:
367 case VMCS_CR3_TGT_CNT:
368 case VMCS_EXIT_CTRLS:
369 case VMCS_EXIT_MSR_STORE_CNT:
370 case VMCS_EXIT_MSR_LOAD_CNT:
371 case VMCS_ENTRY_CTRLS:
372 case VMCS_ENTRY_MSR_LOAD_CNT:
373 case VMCS_ENTRY_INT_INFO:
374 case VMCS_ENTRY_EXCP_ERR:
375 case VMCS_ENTRY_INSTR_LEN:
376 case VMCS_TPR_THRESHOLD:
378 case VMCS_EXIT_REASON:
379 case VMCS_EXIT_INT_INFO:
380 case VMCS_EXIT_INT_ERR:
381 case VMCS_IDT_VECTOR_INFO:
382 case VMCS_IDT_VECTOR_ERR:
383 case VMCS_EXIT_INSTR_LEN:
384 case VMCS_VMX_INSTR_INFO:
385 case VMCS_GUEST_ES_LIMIT:
386 case VMCS_GUEST_CS_LIMIT:
387 case VMCS_GUEST_SS_LIMIT:
388 case VMCS_GUEST_DS_LIMIT:
389 case VMCS_GUEST_FS_LIMIT:
390 case VMCS_GUEST_GS_LIMIT:
391 case VMCS_GUEST_LDTR_LIMIT:
392 case VMCS_GUEST_TR_LIMIT:
393 case VMCS_GUEST_GDTR_LIMIT:
394 case VMCS_GUEST_IDTR_LIMIT:
395 case VMCS_GUEST_ES_ACCESS:
396 case VMCS_GUEST_CS_ACCESS:
397 case VMCS_GUEST_SS_ACCESS:
398 case VMCS_GUEST_DS_ACCESS:
399 case VMCS_GUEST_FS_ACCESS:
400 case VMCS_GUEST_GS_ACCESS:
401 case VMCS_GUEST_LDTR_ACCESS:
402 case VMCS_GUEST_TR_ACCESS:
403 case VMCS_GUEST_INT_STATE:
404 case VMCS_GUEST_ACTIVITY_STATE:
405 case VMCS_GUEST_SMBASE:
406 case VMCS_GUEST_SYSENTER_CS:
407 case VMCS_HOST_SYSENTER_CS:
411 /* high bits of variable width fields
412 * We can probably just delete most of these....
414 case VMCS_IO_BITMAP_A_ADDR_HIGH:
415 case VMCS_IO_BITMAP_B_ADDR_HIGH:
416 case VMCS_MSR_BITMAP_HIGH:
417 case VMCS_EXIT_MSR_STORE_ADDR_HIGH:
418 case VMCS_EXIT_MSR_LOAD_ADDR_HIGH:
419 case VMCS_ENTRY_MSR_LOAD_ADDR_HIGH:
420 case VMCS_EXEC_PTR_HIGH:
421 case VMCS_TSC_OFFSET_HIGH:
422 case VMCS_VAPIC_ADDR_HIGH:
423 case VMCS_APIC_ACCESS_ADDR_HIGH:
424 case VMCS_LINK_PTR_HIGH:
425 case VMCS_GUEST_DBG_CTL_HIGH:
426 case VMCS_GUEST_PERF_GLOBAL_CTRL_HIGH:
427 case VMCS_HOST_PERF_GLOBAL_CTRL_HIGH:
430 /* Natural Width Control Fields */
431 case VMCS_IO_BITMAP_A_ADDR:
432 case VMCS_IO_BITMAP_B_ADDR:
433 case VMCS_MSR_BITMAP:
434 case VMCS_EXIT_MSR_STORE_ADDR:
435 case VMCS_EXIT_MSR_LOAD_ADDR:
436 case VMCS_ENTRY_MSR_LOAD_ADDR:
438 case VMCS_TSC_OFFSET:
439 case VMCS_VAPIC_ADDR:
440 case VMCS_APIC_ACCESS_ADDR:
442 case VMCS_GUEST_DBG_CTL:
443 case VMCS_GUEST_PERF_GLOBAL_CTRL:
444 case VMCS_HOST_PERF_GLOBAL_CTRL:
447 case VMCS_CR0_READ_SHDW:
448 case VMCS_CR4_READ_SHDW:
449 case VMCS_CR3_TGT_VAL_0:
450 case VMCS_CR3_TGT_VAL_1:
451 case VMCS_CR3_TGT_VAL_2:
452 case VMCS_CR3_TGT_VAL_3:
458 case VMCS_GUEST_LINEAR_ADDR:
462 case VMCS_GUEST_ES_BASE:
463 case VMCS_GUEST_CS_BASE:
464 case VMCS_GUEST_SS_BASE:
465 case VMCS_GUEST_DS_BASE:
466 case VMCS_GUEST_FS_BASE:
467 case VMCS_GUEST_GS_BASE:
468 case VMCS_GUEST_LDTR_BASE:
469 case VMCS_GUEST_TR_BASE:
470 case VMCS_GUEST_GDTR_BASE:
471 case VMCS_GUEST_IDTR_BASE:
475 case VMCS_GUEST_RFLAGS:
476 case VMCS_GUEST_PENDING_DBG_EXCP:
477 case VMCS_GUEST_SYSENTER_ESP:
478 case VMCS_GUEST_SYSENTER_EIP:
482 case VMCS_HOST_FS_BASE:
483 case VMCS_HOST_GS_BASE:
484 case VMCS_HOST_TR_BASE:
485 case VMCS_HOST_GDTR_BASE:
486 case VMCS_HOST_IDTR_BASE:
487 case VMCS_HOST_SYSENTER_ESP:
488 case VMCS_HOST_SYSENTER_EIP:
491 return sizeof(addr_t);
494 PrintError("Invalid VMCS field\n");
510 static const char VMCS_GUEST_ES_SELECTOR_STR[] = "GUEST_ES_SELECTOR";
511 static const char VMCS_GUEST_CS_SELECTOR_STR[] = "GUEST_CS_SELECTOR";
512 static const char VMCS_GUEST_SS_SELECTOR_STR[] = "GUEST_SS_SELECTOR";
513 static const char VMCS_GUEST_DS_SELECTOR_STR[] = "GUEST_DS_SELECTOR";
514 static const char VMCS_GUEST_FS_SELECTOR_STR[] = "GUEST_FS_SELECTOR";
515 static const char VMCS_GUEST_GS_SELECTOR_STR[] = "GUEST_GS_SELECTOR";
516 static const char VMCS_GUEST_LDTR_SELECTOR_STR[] = "GUEST_LDTR_SELECTOR";
517 static const char VMCS_GUEST_TR_SELECTOR_STR[] = "GUEST_TR_SELECTOR";
518 static const char VMCS_HOST_ES_SELECTOR_STR[] = "HOST_ES_SELECTOR";
519 static const char VMCS_HOST_CS_SELECTOR_STR[] = "HOST_CS_SELECTOR";
520 static const char VMCS_HOST_SS_SELECTOR_STR[] = "HOST_SS_SELECTOR";
521 static const char VMCS_HOST_DS_SELECTOR_STR[] = "HOST_DS_SELECTOR";
522 static const char VMCS_HOST_FS_SELECTOR_STR[] = "HOST_FS_SELECTOR";
523 static const char VMCS_HOST_GS_SELECTOR_STR[] = "HOST_GS_SELECTOR";
524 static const char VMCS_HOST_TR_SELECTOR_STR[] = "HOST_TR_SELECTOR";
525 static const char VMCS_IO_BITMAP_A_ADDR_STR[] = "IO_BITMAP_A_ADDR";
526 static const char VMCS_IO_BITMAP_A_ADDR_HIGH_STR[] = "IO_BITMAP_A_ADDR_HIGH";
527 static const char VMCS_IO_BITMAP_B_ADDR_STR[] = "IO_BITMAP_B_ADDR";
528 static const char VMCS_IO_BITMAP_B_ADDR_HIGH_STR[] = "IO_BITMAP_B_ADDR_HIGH";
529 static const char VMCS_MSR_BITMAP_STR[] = "MSR_BITMAPS";
530 static const char VMCS_MSR_BITMAP_HIGH_STR[] = "MSR_BITMAPS_HIGH";
531 static const char VMCS_EXIT_MSR_STORE_ADDR_STR[] = "EXIT_MSR_STORE_ADDR";
532 static const char VMCS_EXIT_MSR_STORE_ADDR_HIGH_STR[] = "EXIT_MSR_STORE_ADDR_HIGH";
533 static const char VMCS_EXIT_MSR_LOAD_ADDR_STR[] = "EXIT_MSR_LOAD_ADDR";
534 static const char VMCS_EXIT_MSR_LOAD_ADDR_HIGH_STR[] = "EXIT_MSR_LOAD_ADDR_HIGH";
535 static const char VMCS_ENTRY_MSR_LOAD_ADDR_STR[] = "ENTRY_MSR_LOAD_ADDR";
536 static const char VMCS_ENTRY_MSR_LOAD_ADDR_HIGH_STR[] = "ENTRY_MSR_LOAD_ADDR_HIGH";
537 static const char VMCS_EXEC_PTR_STR[] = "VMCS_EXEC_PTR";
538 static const char VMCS_EXEC_PTR_HIGH_STR[] = "VMCS_EXEC_PTR_HIGH";
539 static const char VMCS_TSC_OFFSET_STR[] = "TSC_OFFSET";
540 static const char VMCS_TSC_OFFSET_HIGH_STR[] = "TSC_OFFSET_HIGH";
541 static const char VMCS_VAPIC_ADDR_STR[] = "VAPIC_PAGE_ADDR";
542 static const char VMCS_VAPIC_ADDR_HIGH_STR[] = "VAPIC_PAGE_ADDR_HIGH";
543 static const char VMCS_APIC_ACCESS_ADDR_STR[] = "APIC_ACCESS_ADDR";
544 static const char VMCS_APIC_ACCESS_ADDR_HIGH_STR[] = "APIC_ACCESS_ADDR_HIGH";
545 static const char VMCS_LINK_PTR_STR[] = "VMCS_LINK_PTR";
546 static const char VMCS_LINK_PTR_HIGH_STR[] = "VMCS_LINK_PTR_HIGH";
547 static const char VMCS_GUEST_DBG_CTL_STR[] = "GUEST_DEBUG_CTL";
548 static const char VMCS_GUEST_DBG_CTL_HIGH_STR[] = "GUEST_DEBUG_CTL_HIGH";
549 static const char VMCS_GUEST_PERF_GLOBAL_CTRL_STR[] = "GUEST_PERF_GLOBAL_CTRL";
550 static const char VMCS_GUEST_PERF_GLOBAL_CTRL_HIGH_STR[] = "GUEST_PERF_GLOBAL_CTRL_HIGH";
551 static const char VMCS_HOST_PERF_GLOBAL_CTRL_STR[] = "HOST_PERF_GLOBAL_CTRL";
552 static const char VMCS_HOST_PERF_GLOBAL_CTRL_HIGH_STR[] = "HOST_PERF_GLOBAL_CTRL_HIGH";
553 static const char VMCS_PIN_CTRLS_STR[] = "PIN_VM_EXEC_CTRLS";
554 static const char VMCS_PROC_CTRLS_STR[] = "PROC_VM_EXEC_CTRLS";
555 static const char VMCS_EXCP_BITMAP_STR[] = "EXCEPTION_BITMAP";
556 static const char VMCS_PG_FAULT_ERR_MASK_STR[] = "PAGE_FAULT_ERROR_MASK";
557 static const char VMCS_PG_FAULT_ERR_MATCH_STR[] = "PAGE_FAULT_ERROR_MATCH";
558 static const char VMCS_CR3_TGT_CNT_STR[] = "CR3_TARGET_COUNT";
559 static const char VMCS_EXIT_CTRLS_STR[] = "VM_EXIT_CTRLS";
560 static const char VMCS_EXIT_MSR_STORE_CNT_STR[] = "VM_EXIT_MSR_STORE_COUNT";
561 static const char VMCS_EXIT_MSR_LOAD_CNT_STR[] = "VM_EXIT_MSR_LOAD_COUNT";
562 static const char VMCS_ENTRY_CTRLS_STR[] = "VM_ENTRY_CTRLS";
563 static const char VMCS_ENTRY_MSR_LOAD_CNT_STR[] = "VM_ENTRY_MSR_LOAD_COUNT";
564 static const char VMCS_ENTRY_INT_INFO_STR[] = "VM_ENTRY_INT_INFO_FIELD";
565 static const char VMCS_ENTRY_EXCP_ERR_STR[] = "VM_ENTRY_EXCEPTION_ERROR";
566 static const char VMCS_ENTRY_INSTR_LEN_STR[] = "VM_ENTRY_INSTR_LENGTH";
567 static const char VMCS_TPR_THRESHOLD_STR[] = "TPR_THRESHOLD";
568 static const char VMCS_SEC_PROC_CTRLS_STR[] = "VMCS_SEC_PROC_CTRLS";
569 static const char VMCS_INSTR_ERR_STR[] = "VM_INSTR_ERROR";
570 static const char VMCS_EXIT_REASON_STR[] = "EXIT_REASON";
571 static const char VMCS_EXIT_INT_INFO_STR[] = "VM_EXIT_INT_INFO";
572 static const char VMCS_EXIT_INT_ERR_STR[] = "VM_EXIT_INT_ERROR";
573 static const char VMCS_IDT_VECTOR_INFO_STR[] = "IDT_VECTOR_INFO";
574 static const char VMCS_IDT_VECTOR_ERR_STR[] = "IDT_VECTOR_ERROR";
575 static const char VMCS_EXIT_INSTR_LEN_STR[] = "VM_EXIT_INSTR_LENGTH";
576 static const char VMCS_VMX_INSTR_INFO_STR[] = "VMX_INSTR_INFO";
577 static const char VMCS_GUEST_ES_LIMIT_STR[] = "GUEST_ES_LIMIT";
578 static const char VMCS_GUEST_CS_LIMIT_STR[] = "GUEST_CS_LIMIT";
579 static const char VMCS_GUEST_SS_LIMIT_STR[] = "GUEST_SS_LIMIT";
580 static const char VMCS_GUEST_DS_LIMIT_STR[] = "GUEST_DS_LIMIT";
581 static const char VMCS_GUEST_FS_LIMIT_STR[] = "GUEST_FS_LIMIT";
582 static const char VMCS_GUEST_GS_LIMIT_STR[] = "GUEST_GS_LIMIT";
583 static const char VMCS_GUEST_LDTR_LIMIT_STR[] = "GUEST_LDTR_LIMIT";
584 static const char VMCS_GUEST_TR_LIMIT_STR[] = "GUEST_TR_LIMIT";
585 static const char VMCS_GUEST_GDTR_LIMIT_STR[] = "GUEST_GDTR_LIMIT";
586 static const char VMCS_GUEST_IDTR_LIMIT_STR[] = "GUEST_IDTR_LIMIT";
587 static const char VMCS_GUEST_ES_ACCESS_STR[] = "GUEST_ES_ACCESS";
588 static const char VMCS_GUEST_CS_ACCESS_STR[] = "GUEST_CS_ACCESS";
589 static const char VMCS_GUEST_SS_ACCESS_STR[] = "GUEST_SS_ACCESS";
590 static const char VMCS_GUEST_DS_ACCESS_STR[] = "GUEST_DS_ACCESS";
591 static const char VMCS_GUEST_FS_ACCESS_STR[] = "GUEST_FS_ACCESS";
592 static const char VMCS_GUEST_GS_ACCESS_STR[] = "GUEST_GS_ACCESS";
593 static const char VMCS_GUEST_LDTR_ACCESS_STR[] = "GUEST_LDTR_ACCESS";
594 static const char VMCS_GUEST_TR_ACCESS_STR[] = "GUEST_TR_ACCESS";
595 static const char VMCS_GUEST_INT_STATE_STR[] = "GUEST_INT_STATE";
596 static const char VMCS_GUEST_ACTIVITY_STATE_STR[] = "GUEST_ACTIVITY_STATE";
597 static const char VMCS_GUEST_SMBASE_STR[] = "GUEST_SMBASE";
598 static const char VMCS_GUEST_SYSENTER_CS_STR[] = "GUEST_SYSENTER_CS";
599 static const char VMCS_HOST_SYSENTER_CS_STR[] = "HOST_SYSENTER_CS";
600 static const char VMCS_CR0_MASK_STR[] = "CR0_GUEST_HOST_MASK";
601 static const char VMCS_CR4_MASK_STR[] = "CR4_GUEST_HOST_MASK";
602 static const char VMCS_CR0_READ_SHDW_STR[] = "CR0_READ_SHADOW";
603 static const char VMCS_CR4_READ_SHDW_STR[] = "CR4_READ_SHADOW";
604 static const char VMCS_CR3_TGT_VAL_0_STR[] = "CR3_TARGET_VALUE_0";
605 static const char VMCS_CR3_TGT_VAL_1_STR[] = "CR3_TARGET_VALUE_1";
606 static const char VMCS_CR3_TGT_VAL_2_STR[] = "CR3_TARGET_VALUE_2";
607 static const char VMCS_CR3_TGT_VAL_3_STR[] = "CR3_TARGET_VALUE_3";
608 static const char VMCS_EXIT_QUAL_STR[] = "EXIT_QUALIFICATION";
609 static const char VMCS_IO_RCX_STR[] = "IO_RCX";
610 static const char VMCS_IO_RSI_STR[] = "IO_RSI";
611 static const char VMCS_IO_RDI_STR[] = "IO_RDI";
612 static const char VMCS_IO_RIP_STR[] = "IO_RIP";
613 static const char VMCS_GUEST_LINEAR_ADDR_STR[] = "GUEST_LINEAR_ADDR";
614 static const char VMCS_GUEST_CR0_STR[] = "GUEST_CR0";
615 static const char VMCS_GUEST_CR3_STR[] = "GUEST_CR3";
616 static const char VMCS_GUEST_CR4_STR[] = "GUEST_CR4";
617 static const char VMCS_GUEST_ES_BASE_STR[] = "GUEST_ES_BASE";
618 static const char VMCS_GUEST_CS_BASE_STR[] = "GUEST_CS_BASE";
619 static const char VMCS_GUEST_SS_BASE_STR[] = "GUEST_SS_BASE";
620 static const char VMCS_GUEST_DS_BASE_STR[] = "GUEST_DS_BASE";
621 static const char VMCS_GUEST_FS_BASE_STR[] = "GUEST_FS_BASE";
622 static const char VMCS_GUEST_GS_BASE_STR[] = "GUEST_GS_BASE";
623 static const char VMCS_GUEST_LDTR_BASE_STR[] = "GUEST_LDTR_BASE";
624 static const char VMCS_GUEST_TR_BASE_STR[] = "GUEST_TR_BASE";
625 static const char VMCS_GUEST_GDTR_BASE_STR[] = "GUEST_GDTR_BASE";
626 static const char VMCS_GUEST_IDTR_BASE_STR[] = "GUEST_IDTR_BASE";
627 static const char VMCS_GUEST_DR7_STR[] = "GUEST_DR7";
628 static const char VMCS_GUEST_RSP_STR[] = "GUEST_RSP";
629 static const char VMCS_GUEST_RIP_STR[] = "GUEST_RIP";
630 static const char VMCS_GUEST_RFLAGS_STR[] = "GUEST_RFLAGS";
631 static const char VMCS_GUEST_PENDING_DBG_EXCP_STR[] = "GUEST_PENDING_DEBUG_EXCS";
632 static const char VMCS_GUEST_SYSENTER_ESP_STR[] = "GUEST_SYSENTER_ESP";
633 static const char VMCS_GUEST_SYSENTER_EIP_STR[] = "GUEST_SYSENTER_EIP";
634 static const char VMCS_HOST_CR0_STR[] = "HOST_CR0";
635 static const char VMCS_HOST_CR3_STR[] = "HOST_CR3";
636 static const char VMCS_HOST_CR4_STR[] = "HOST_CR4";
637 static const char VMCS_HOST_FS_BASE_STR[] = "HOST_FS_BASE";
638 static const char VMCS_HOST_GS_BASE_STR[] = "HOST_GS_BASE";
639 static const char VMCS_HOST_TR_BASE_STR[] = "HOST_TR_BASE";
640 static const char VMCS_HOST_GDTR_BASE_STR[] = "HOST_GDTR_BASE";
641 static const char VMCS_HOST_IDTR_BASE_STR[] = "HOST_IDTR_BASE";
642 static const char VMCS_HOST_SYSENTER_ESP_STR[] = "HOST_SYSENTER_ESP";
643 static const char VMCS_HOST_SYSENTER_EIP_STR[] = "HOST_SYSENTER_EIP";
644 static const char VMCS_HOST_RSP_STR[] = "HOST_RSP";
645 static const char VMCS_HOST_RIP_STR[] = "HOST_RIP";
649 const char * v3_vmcs_field_to_str(vmcs_field_t field) {
651 case VMCS_GUEST_ES_SELECTOR:
652 return VMCS_GUEST_ES_SELECTOR_STR;
653 case VMCS_GUEST_CS_SELECTOR:
654 return VMCS_GUEST_CS_SELECTOR_STR;
655 case VMCS_GUEST_SS_SELECTOR:
656 return VMCS_GUEST_SS_SELECTOR_STR;
657 case VMCS_GUEST_DS_SELECTOR:
658 return VMCS_GUEST_DS_SELECTOR_STR;
659 case VMCS_GUEST_FS_SELECTOR:
660 return VMCS_GUEST_FS_SELECTOR_STR;
661 case VMCS_GUEST_GS_SELECTOR:
662 return VMCS_GUEST_GS_SELECTOR_STR;
663 case VMCS_GUEST_LDTR_SELECTOR:
664 return VMCS_GUEST_LDTR_SELECTOR_STR;
665 case VMCS_GUEST_TR_SELECTOR:
666 return VMCS_GUEST_TR_SELECTOR_STR;
667 case VMCS_HOST_ES_SELECTOR:
668 return VMCS_HOST_ES_SELECTOR_STR;
669 case VMCS_HOST_CS_SELECTOR:
670 return VMCS_HOST_CS_SELECTOR_STR;
671 case VMCS_HOST_SS_SELECTOR:
672 return VMCS_HOST_SS_SELECTOR_STR;
673 case VMCS_HOST_DS_SELECTOR:
674 return VMCS_HOST_DS_SELECTOR_STR;
675 case VMCS_HOST_FS_SELECTOR:
676 return VMCS_HOST_FS_SELECTOR_STR;
677 case VMCS_HOST_GS_SELECTOR:
678 return VMCS_HOST_GS_SELECTOR_STR;
679 case VMCS_HOST_TR_SELECTOR:
680 return VMCS_HOST_TR_SELECTOR_STR;
681 case VMCS_IO_BITMAP_A_ADDR:
682 return VMCS_IO_BITMAP_A_ADDR_STR;
683 case VMCS_IO_BITMAP_A_ADDR_HIGH:
684 return VMCS_IO_BITMAP_A_ADDR_HIGH_STR;
685 case VMCS_IO_BITMAP_B_ADDR:
686 return VMCS_IO_BITMAP_B_ADDR_STR;
687 case VMCS_IO_BITMAP_B_ADDR_HIGH:
688 return VMCS_IO_BITMAP_B_ADDR_HIGH_STR;
689 case VMCS_MSR_BITMAP:
690 return VMCS_MSR_BITMAP_STR;
691 case VMCS_MSR_BITMAP_HIGH:
692 return VMCS_MSR_BITMAP_HIGH_STR;
693 case VMCS_EXIT_MSR_STORE_ADDR:
694 return VMCS_EXIT_MSR_STORE_ADDR_STR;
695 case VMCS_EXIT_MSR_STORE_ADDR_HIGH:
696 return VMCS_EXIT_MSR_STORE_ADDR_HIGH_STR;
697 case VMCS_EXIT_MSR_LOAD_ADDR:
698 return VMCS_EXIT_MSR_LOAD_ADDR_STR;
699 case VMCS_EXIT_MSR_LOAD_ADDR_HIGH:
700 return VMCS_EXIT_MSR_LOAD_ADDR_HIGH_STR;
701 case VMCS_ENTRY_MSR_LOAD_ADDR:
702 return VMCS_ENTRY_MSR_LOAD_ADDR_STR;
703 case VMCS_ENTRY_MSR_LOAD_ADDR_HIGH:
704 return VMCS_ENTRY_MSR_LOAD_ADDR_HIGH_STR;
706 return VMCS_EXEC_PTR_STR;
707 case VMCS_EXEC_PTR_HIGH:
708 return VMCS_EXEC_PTR_HIGH_STR;
709 case VMCS_TSC_OFFSET:
710 return VMCS_TSC_OFFSET_STR;
711 case VMCS_TSC_OFFSET_HIGH:
712 return VMCS_TSC_OFFSET_HIGH_STR;
713 case VMCS_VAPIC_ADDR:
714 return VMCS_VAPIC_ADDR_STR;
715 case VMCS_VAPIC_ADDR_HIGH:
716 return VMCS_VAPIC_ADDR_HIGH_STR;
717 case VMCS_APIC_ACCESS_ADDR:
718 return VMCS_APIC_ACCESS_ADDR_STR;
719 case VMCS_APIC_ACCESS_ADDR_HIGH:
720 return VMCS_APIC_ACCESS_ADDR_HIGH_STR;
722 return VMCS_LINK_PTR_STR;
723 case VMCS_LINK_PTR_HIGH:
724 return VMCS_LINK_PTR_HIGH_STR;
725 case VMCS_GUEST_DBG_CTL:
726 return VMCS_GUEST_DBG_CTL_STR;
727 case VMCS_GUEST_DBG_CTL_HIGH:
728 return VMCS_GUEST_DBG_CTL_HIGH_STR;
729 case VMCS_GUEST_PERF_GLOBAL_CTRL:
730 return VMCS_GUEST_PERF_GLOBAL_CTRL_STR;
731 case VMCS_GUEST_PERF_GLOBAL_CTRL_HIGH:
732 return VMCS_GUEST_PERF_GLOBAL_CTRL_HIGH_STR;
733 case VMCS_HOST_PERF_GLOBAL_CTRL:
734 return VMCS_HOST_PERF_GLOBAL_CTRL_STR;
735 case VMCS_HOST_PERF_GLOBAL_CTRL_HIGH:
736 return VMCS_HOST_PERF_GLOBAL_CTRL_HIGH_STR;
738 return VMCS_PIN_CTRLS_STR;
739 case VMCS_PROC_CTRLS:
740 return VMCS_PROC_CTRLS_STR;
741 case VMCS_EXCP_BITMAP:
742 return VMCS_EXCP_BITMAP_STR;
743 case VMCS_PG_FAULT_ERR_MASK:
744 return VMCS_PG_FAULT_ERR_MASK_STR;
745 case VMCS_PG_FAULT_ERR_MATCH:
746 return VMCS_PG_FAULT_ERR_MATCH_STR;
747 case VMCS_CR3_TGT_CNT:
748 return VMCS_CR3_TGT_CNT_STR;
749 case VMCS_EXIT_CTRLS:
750 return VMCS_EXIT_CTRLS_STR;
751 case VMCS_EXIT_MSR_STORE_CNT:
752 return VMCS_EXIT_MSR_STORE_CNT_STR;
753 case VMCS_EXIT_MSR_LOAD_CNT:
754 return VMCS_EXIT_MSR_LOAD_CNT_STR;
755 case VMCS_ENTRY_CTRLS:
756 return VMCS_ENTRY_CTRLS_STR;
757 case VMCS_ENTRY_MSR_LOAD_CNT:
758 return VMCS_ENTRY_MSR_LOAD_CNT_STR;
759 case VMCS_ENTRY_INT_INFO:
760 return VMCS_ENTRY_INT_INFO_STR;
761 case VMCS_ENTRY_EXCP_ERR:
762 return VMCS_ENTRY_EXCP_ERR_STR;
763 case VMCS_ENTRY_INSTR_LEN:
764 return VMCS_ENTRY_INSTR_LEN_STR;
765 case VMCS_TPR_THRESHOLD:
766 return VMCS_TPR_THRESHOLD_STR;
767 case VMCS_SEC_PROC_CTRLS:
768 return VMCS_SEC_PROC_CTRLS_STR;
770 return VMCS_INSTR_ERR_STR;
771 case VMCS_EXIT_REASON:
772 return VMCS_EXIT_REASON_STR;
773 case VMCS_EXIT_INT_INFO:
774 return VMCS_EXIT_INT_INFO_STR;
775 case VMCS_EXIT_INT_ERR:
776 return VMCS_EXIT_INT_ERR_STR;
777 case VMCS_IDT_VECTOR_INFO:
778 return VMCS_IDT_VECTOR_INFO_STR;
779 case VMCS_IDT_VECTOR_ERR:
780 return VMCS_IDT_VECTOR_ERR_STR;
781 case VMCS_EXIT_INSTR_LEN:
782 return VMCS_EXIT_INSTR_LEN_STR;
783 case VMCS_VMX_INSTR_INFO:
784 return VMCS_VMX_INSTR_INFO_STR;
785 case VMCS_GUEST_ES_LIMIT:
786 return VMCS_GUEST_ES_LIMIT_STR;
787 case VMCS_GUEST_CS_LIMIT:
788 return VMCS_GUEST_CS_LIMIT_STR;
789 case VMCS_GUEST_SS_LIMIT:
790 return VMCS_GUEST_SS_LIMIT_STR;
791 case VMCS_GUEST_DS_LIMIT:
792 return VMCS_GUEST_DS_LIMIT_STR;
793 case VMCS_GUEST_FS_LIMIT:
794 return VMCS_GUEST_FS_LIMIT_STR;
795 case VMCS_GUEST_GS_LIMIT:
796 return VMCS_GUEST_GS_LIMIT_STR;
797 case VMCS_GUEST_LDTR_LIMIT:
798 return VMCS_GUEST_LDTR_LIMIT_STR;
799 case VMCS_GUEST_TR_LIMIT:
800 return VMCS_GUEST_TR_LIMIT_STR;
801 case VMCS_GUEST_GDTR_LIMIT:
802 return VMCS_GUEST_GDTR_LIMIT_STR;
803 case VMCS_GUEST_IDTR_LIMIT:
804 return VMCS_GUEST_IDTR_LIMIT_STR;
805 case VMCS_GUEST_ES_ACCESS:
806 return VMCS_GUEST_ES_ACCESS_STR;
807 case VMCS_GUEST_CS_ACCESS:
808 return VMCS_GUEST_CS_ACCESS_STR;
809 case VMCS_GUEST_SS_ACCESS:
810 return VMCS_GUEST_SS_ACCESS_STR;
811 case VMCS_GUEST_DS_ACCESS:
812 return VMCS_GUEST_DS_ACCESS_STR;
813 case VMCS_GUEST_FS_ACCESS:
814 return VMCS_GUEST_FS_ACCESS_STR;
815 case VMCS_GUEST_GS_ACCESS:
816 return VMCS_GUEST_GS_ACCESS_STR;
817 case VMCS_GUEST_LDTR_ACCESS:
818 return VMCS_GUEST_LDTR_ACCESS_STR;
819 case VMCS_GUEST_TR_ACCESS:
820 return VMCS_GUEST_TR_ACCESS_STR;
821 case VMCS_GUEST_INT_STATE:
822 return VMCS_GUEST_INT_STATE_STR;
823 case VMCS_GUEST_ACTIVITY_STATE:
824 return VMCS_GUEST_ACTIVITY_STATE_STR;
825 case VMCS_GUEST_SMBASE:
826 return VMCS_GUEST_SMBASE_STR;
827 case VMCS_GUEST_SYSENTER_CS:
828 return VMCS_GUEST_SYSENTER_CS_STR;
829 case VMCS_HOST_SYSENTER_CS:
830 return VMCS_HOST_SYSENTER_CS_STR;
832 return VMCS_CR0_MASK_STR;
834 return VMCS_CR4_MASK_STR;
835 case VMCS_CR0_READ_SHDW:
836 return VMCS_CR0_READ_SHDW_STR;
837 case VMCS_CR4_READ_SHDW:
838 return VMCS_CR4_READ_SHDW_STR;
839 case VMCS_CR3_TGT_VAL_0:
840 return VMCS_CR3_TGT_VAL_0_STR;
841 case VMCS_CR3_TGT_VAL_1:
842 return VMCS_CR3_TGT_VAL_1_STR;
843 case VMCS_CR3_TGT_VAL_2:
844 return VMCS_CR3_TGT_VAL_2_STR;
845 case VMCS_CR3_TGT_VAL_3:
846 return VMCS_CR3_TGT_VAL_3_STR;
848 return VMCS_EXIT_QUAL_STR;
850 return VMCS_IO_RCX_STR;
852 return VMCS_IO_RSI_STR;
854 return VMCS_IO_RDI_STR;
856 return VMCS_IO_RIP_STR;
857 case VMCS_GUEST_LINEAR_ADDR:
858 return VMCS_GUEST_LINEAR_ADDR_STR;
860 return VMCS_GUEST_CR0_STR;
862 return VMCS_GUEST_CR3_STR;
864 return VMCS_GUEST_CR4_STR;
865 case VMCS_GUEST_ES_BASE:
866 return VMCS_GUEST_ES_BASE_STR;
867 case VMCS_GUEST_CS_BASE:
868 return VMCS_GUEST_CS_BASE_STR;
869 case VMCS_GUEST_SS_BASE:
870 return VMCS_GUEST_SS_BASE_STR;
871 case VMCS_GUEST_DS_BASE:
872 return VMCS_GUEST_DS_BASE_STR;
873 case VMCS_GUEST_FS_BASE:
874 return VMCS_GUEST_FS_BASE_STR;
875 case VMCS_GUEST_GS_BASE:
876 return VMCS_GUEST_GS_BASE_STR;
877 case VMCS_GUEST_LDTR_BASE:
878 return VMCS_GUEST_LDTR_BASE_STR;
879 case VMCS_GUEST_TR_BASE:
880 return VMCS_GUEST_TR_BASE_STR;
881 case VMCS_GUEST_GDTR_BASE:
882 return VMCS_GUEST_GDTR_BASE_STR;
883 case VMCS_GUEST_IDTR_BASE:
884 return VMCS_GUEST_IDTR_BASE_STR;
886 return VMCS_GUEST_DR7_STR;
888 return VMCS_GUEST_RSP_STR;
890 return VMCS_GUEST_RIP_STR;
891 case VMCS_GUEST_RFLAGS:
892 return VMCS_GUEST_RFLAGS_STR;
893 case VMCS_GUEST_PENDING_DBG_EXCP:
894 return VMCS_GUEST_PENDING_DBG_EXCP_STR;
895 case VMCS_GUEST_SYSENTER_ESP:
896 return VMCS_GUEST_SYSENTER_ESP_STR;
897 case VMCS_GUEST_SYSENTER_EIP:
898 return VMCS_GUEST_SYSENTER_EIP_STR;
900 return VMCS_HOST_CR0_STR;
902 return VMCS_HOST_CR3_STR;
904 return VMCS_HOST_CR4_STR;
905 case VMCS_HOST_FS_BASE:
906 return VMCS_HOST_FS_BASE_STR;
907 case VMCS_HOST_GS_BASE:
908 return VMCS_HOST_GS_BASE_STR;
909 case VMCS_HOST_TR_BASE:
910 return VMCS_HOST_TR_BASE_STR;
911 case VMCS_HOST_GDTR_BASE:
912 return VMCS_HOST_GDTR_BASE_STR;
913 case VMCS_HOST_IDTR_BASE:
914 return VMCS_HOST_IDTR_BASE_STR;
915 case VMCS_HOST_SYSENTER_ESP:
916 return VMCS_HOST_SYSENTER_ESP_STR;
917 case VMCS_HOST_SYSENTER_EIP:
918 return VMCS_HOST_SYSENTER_EIP_STR;
920 return VMCS_HOST_RSP_STR;
922 return VMCS_HOST_RIP_STR;