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
This commit is contained in:
parent
892406d827
commit
703e4974aa
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=280968
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user