diff options
author | Bryan Cantrill <bryan@joyent.com> | 2011-04-18 21:00:42 -0700 |
---|---|---|
committer | Bryan Cantrill <bryan@joyent.com> | 2011-04-18 21:00:42 -0700 |
commit | d23e3c1d476d83c63a8186476d29e731a3d937c3 (patch) | |
tree | d616cce35ad7d078bb1a1216d628fd9acacb07ad /tools | |
parent | d0fab591690db3a57921ea2e8506c7fa77be5dc5 (diff) | |
download | illumos-kvm-d23e3c1d476d83c63a8186476d29e731a3d937c3.tar.gz |
HVM-77 add vmregs[] variable to DTrace
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/kvm-triple.d | 64 |
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); +} + |