summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorBryan Cantrill <bryan@joyent.com>2011-04-18 21:00:42 -0700
committerBryan Cantrill <bryan@joyent.com>2011-04-18 21:00:42 -0700
commitd23e3c1d476d83c63a8186476d29e731a3d937c3 (patch)
treed616cce35ad7d078bb1a1216d628fd9acacb07ad /tools
parentd0fab591690db3a57921ea2e8506c7fa77be5dc5 (diff)
downloadillumos-kvm-d23e3c1d476d83c63a8186476d29e731a3d937c3.tar.gz
HVM-77 add vmregs[] variable to DTrace
Diffstat (limited to 'tools')
-rwxr-xr-xtools/kvm-triple.d64
1 files changed, 64 insertions, 0 deletions
diff --git a/tools/kvm-triple.d b/tools/kvm-triple.d
new file mode 100755
index 0000000..9dbfd28
--- /dev/null
+++ b/tools/kvm-triple.d
@@ -0,0 +1,64 @@
+#!/usr/sbin/dtrace -C
+
+/*
+ * Prints out the last several vmexits after a triple fault. Must be run
+ * with exitno.d.
+ */
+
+#pragma D option quiet
+#pragma D option bufpolicy=ring
+#pragma D option bufsize=16k
+
+BEGIN
+{
+ start = timestamp;
+}
+
+kvm-vexit
+{
+ printf("t+%-14d cpu: %-3d %-40s vpid: %-5d\n",
+ timestamp - start, cpu, strexitno[arg1],
+ vmregs[VMX_VIRTUAL_PROCESSOR_ID]);
+ printf(" rip: %16x rsp: %16x rfl: %16x\n",
+ vmregs[VMX_GUEST_RIP], vmregs[VMX_GUEST_RSP],
+ vmregs[VMX_GUEST_RFLAGS]);
+ printf(" cr0: %16x cr3: %16x cr4: %16x\n",
+ vmregs[VMX_GUEST_CR0], vmregs[VMX_GUEST_CR3],
+ vmregs[VMX_GUEST_CR4]);
+ printf(" ldt: %16x gdt: %16x idt: %16x\n",
+ vmregs[VMX_GUEST_LDTR_BASE], vmregs[VMX_GUEST_GDTR_BASE],
+ vmregs[VMX_GUEST_IDTR_BASE]);
+ printf(" cs: base=%x limit=%x selector=%x access=%x\n",
+ vmregs[VMX_GUEST_CS_BASE],
+ vmregs[VMX_GUEST_CS_LIMIT],
+ vmregs[VMX_GUEST_CS_SELECTOR],
+ vmregs[VMX_GUEST_CS_AR_BYTES]);
+ printf(" ds: base=%x limit=%x selector=%x access=%x\n",
+ vmregs[VMX_GUEST_DS_BASE],
+ vmregs[VMX_GUEST_DS_LIMIT],
+ vmregs[VMX_GUEST_DS_SELECTOR],
+ vmregs[VMX_GUEST_DS_AR_BYTES]);
+ printf(" es: base=%x limit=%x selector=%x access=%x\n",
+ vmregs[VMX_GUEST_ES_BASE],
+ vmregs[VMX_GUEST_ES_LIMIT],
+ vmregs[VMX_GUEST_ES_SELECTOR],
+ vmregs[VMX_GUEST_ES_AR_BYTES]);
+ printf(" fs: base=%x limit=%x selector=%x access=%x\n",
+ vmregs[VMX_GUEST_FS_BASE],
+ vmregs[VMX_GUEST_FS_LIMIT],
+ vmregs[VMX_GUEST_FS_SELECTOR],
+ vmregs[VMX_GUEST_FS_AR_BYTES]);
+ printf(" ss: base=%x limit=%x selector=%x access=%x\n",
+ vmregs[VMX_GUEST_SS_BASE],
+ vmregs[VMX_GUEST_SS_LIMIT],
+ vmregs[VMX_GUEST_SS_SELECTOR],
+ vmregs[VMX_GUEST_SS_AR_BYTES]);
+ printf("\n");
+}
+
+kvm-vexit
+/arg1 == EXIT_REASON_TRIPLE_FAULT/
+{
+ exit(0);
+}
+