Expand description
Exit QEMU with user-defined code.
Quit a running QEMU session with user-defined exit code. Useful for unit or integration tests using QEMU.
TL;DR
use qemu_exit::QEMUExit;
#[cfg(target_arch = "aarch64")]
let qemu_exit_handle = qemu_exit::AArch64::new();
// addr: The address of sifive_test.
#[cfg(target_arch = "riscv64")]
let qemu_exit_handle = qemu_exit::RISCV64::new(addr);
// io_base: I/O-base of isa-debug-exit.
// custom_exit_success: A custom success code; Must be an odd number.
#[cfg(target_arch = "x86_64")]
let qemu_exit_handle = qemu_exit::X86::new(io_base, custom_exit_success);
qemu_exit_handle.exit(1337);
qemu_exit_handle.exit_success();
qemu_exit_handle.exit_failure();Architecture Specific Configuration
AArch64
Pass the -semihosting argument to the QEMU invocation, e.g.:
qemu-system-aarch64 -M raspi3 -serial stdio -semihosting -kernel kernel8.imgRISCV64
You need to chose a machine with the sifive_test device, for exemple -M virt:
qemu-system-riscv64 -M virt -nographic -monitor none -serial stdio -kernel kernel.elfx86_64
Add the special ISA debug exit device by passing the flags:
-device isa-debug-exit,iobase=0xf4,iosize=0x04When instantiating the handle, iobase must be given as the first parameter.
The second parameter must be an EXIT_SUCCESS code of your choice that is an odd number, aka
bit number zero must be 1. This is needed because in QEMU, the provided code is internally
binary-OR’ed with 0x1. This is hardcoded and therefore, with isa-debug-exit, it is not
possible to let QEMU invoke exit(0).
let qemu_exit_handle = qemu_exit::X86::new(io_base, custom_exit_success);Literature
Re-exports
pub use x86::*;Modules
x86.
Traits
Generic interface for exiting QEMU.