diff options
author | Tycho Nightingale <tychon@FreeBSD.org> | 2015-04-01 20:36:07 +0000 |
---|---|---|
committer | Tycho Nightingale <tychon@FreeBSD.org> | 2015-04-01 20:36:07 +0000 |
commit | 703e4974aa45d77a4d683b07a2c8392c546703ca (patch) | |
tree | 9204222640e3ea1a86cc911a26eea0647c55a8cc /usr.sbin | |
parent | 892406d827f9d07cff60de30429afe53f9235dd7 (diff) | |
download | src-703e4974aa45d77a4d683b07a2c8392c546703ca.tar.gz src-703e4974aa45d77a4d683b07a2c8392c546703ca.zip |
Prior to aborting due to an instruction emulation error, it is always
interesting to see what the guest's %rip and instruction bytes are.
Reviewed by: grehan
Notes
Notes:
svn path=/head/; revision=280968
Diffstat (limited to 'usr.sbin')
-rw-r--r-- | usr.sbin/bhyve/bhyverun.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/usr.sbin/bhyve/bhyverun.c b/usr.sbin/bhyve/bhyverun.c index 97ed0460b3f3..271f67c4d054 100644 --- a/usr.sbin/bhyve/bhyverun.c +++ b/usr.sbin/bhyve/bhyverun.c @@ -495,22 +495,27 @@ vmexit_mtrap(struct vmctx *ctx, struct vm_exit *vmexit, int *pvcpu) static int vmexit_inst_emul(struct vmctx *ctx, struct vm_exit *vmexit, int *pvcpu) { - int err; + int err, i; + struct vie *vie; + stats.vmexit_inst_emul++; + vie = &vmexit->u.inst_emul.vie; err = emulate_mem(ctx, *pvcpu, vmexit->u.inst_emul.gpa, - &vmexit->u.inst_emul.vie, &vmexit->u.inst_emul.paging); + vie, &vmexit->u.inst_emul.paging); if (err) { - if (err == EINVAL) { - fprintf(stderr, - "Failed to emulate instruction at 0x%lx\n", - vmexit->rip); - } else if (err == ESRCH) { + if (err == ESRCH) { fprintf(stderr, "Unhandled memory access to 0x%lx\n", vmexit->u.inst_emul.gpa); } + fprintf(stderr, "Failed to emulate instruction ["); + for (i = 0; i < vie->num_valid; i++) { + fprintf(stderr, "0x%02x%s", vie->inst[i], + i != (vie->num_valid - 1) ? " " : ""); + } + fprintf(stderr, "] at 0x%lx\n", vmexit->rip); return (VMEXIT_ABORT); } |