// Rust language features implementions use core::panic::PanicInfo; #[lang = "eh_personality"] extern fn eh_personality() { } #[cfg(target_arch = "x86_64")] #[panic_implementation] #[no_mangle] pub fn panic(info: &PanicInfo) -> ! { let location = info.location().unwrap(); let message = info.message().unwrap(); error!("\n\nPANIC in {} at line {}\n {}", location.file(), location.line(), message); if cfg!(feature = "qemu_auto_exit") { use arch::cpu; unsafe{ cpu::exit_in_qemu(3) } } else { loop { } } } #[cfg(target_arch = "riscv")] #[lang = "panic_fmt"] #[no_mangle] pub fn panic_fmt(fmt: ::core::fmt::Arguments, file: &'static str, line: u32, col: u32) -> ! { println!("\n\nPANIC in {} at {}:{}\n {}", file, line, col, fmt); loop {} } #[cfg(target_arch = "x86_64")] #[lang = "oom"] #[no_mangle] pub fn oom() -> ! { panic!("out of memory"); }