pub enum VmExit {
InstructionLimit,
Breakpoint(u64),
Fault(MemFault),
Unlifted {
addr: u64,
error: CodeError,
},
Interrupt(Interrupt),
HookStop(HookId),
Error(Box<str>),
}Expand description
Why the machine stopped.
Variants§
InstructionLimit
The step budget ran out. The machine is resumable.
Breakpoint(u64)
Execution reached an address with a breakpoint on it. The breakpoint instruction has not been executed.
Fault(MemFault)
A memory access failed.
Unlifted
Code at this address could not be lifted.
Interrupt(Interrupt)
The machine stopped at a user p-code operation for the host to act:
an explicit vm.interrupt, or an op the interpreter has no semantics
for (syscall, cpuid, rdtsc, …). Everything before the op in
its block has retired and nothing after it has run. The machine stays
there until Vm::resume supplies the op’s effect; running again
without resuming reports the same interrupt.
HookStop(HookId)
A hook registered through the table asked the run to
stop. For a code or memory hook the machine is before the hooked
guest instruction, and running again executes it without notifying
the hook again. For an instruction hook the user op is still pending,
as Interrupt describes, until the caller resumes it.
Error(Box<str>)
The interpreter reported something the VM does not model as a guest event — a malformed block, an internal failure.