1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2022 The ChromiumOS Authors 2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file. 4*bb4ee6a4SAndroid Build Coastguard Worker 5*bb4ee6a4SAndroid Build Coastguard Worker #![no_std] // don't link the Rust standard library 6*bb4ee6a4SAndroid Build Coastguard Worker #![no_main] // disable all Rust-level entry points 7*bb4ee6a4SAndroid Build Coastguard Worker 8*bb4ee6a4SAndroid Build Coastguard Worker use core::arch::asm; 9*bb4ee6a4SAndroid Build Coastguard Worker use core::arch::global_asm; 10*bb4ee6a4SAndroid Build Coastguard Worker use core::panic::PanicInfo; 11*bb4ee6a4SAndroid Build Coastguard Worker 12*bb4ee6a4SAndroid Build Coastguard Worker use log::*; 13*bb4ee6a4SAndroid Build Coastguard Worker 14*bb4ee6a4SAndroid Build Coastguard Worker global_asm!(include_str!("../src/boot.asm")); 15*bb4ee6a4SAndroid Build Coastguard Worker 16*bb4ee6a4SAndroid Build Coastguard Worker /// This function is called on panic. 17*bb4ee6a4SAndroid Build Coastguard Worker #[panic_handler] panic(_info: &PanicInfo) -> !18*bb4ee6a4SAndroid Build Coastguard Workerfn panic(_info: &PanicInfo) -> ! { 19*bb4ee6a4SAndroid Build Coastguard Worker // Execute a debug breakpoint instruction to cause a VMEXIT. 20*bb4ee6a4SAndroid Build Coastguard Worker // SAFETY: This instruction will exit the hosting VM, so no further Rust code will execute. 21*bb4ee6a4SAndroid Build Coastguard Worker unsafe { 22*bb4ee6a4SAndroid Build Coastguard Worker asm!("int3"); 23*bb4ee6a4SAndroid Build Coastguard Worker } 24*bb4ee6a4SAndroid Build Coastguard Worker // Just in case we are still running somehow, spin forever. 25*bb4ee6a4SAndroid Build Coastguard Worker loop {} 26*bb4ee6a4SAndroid Build Coastguard Worker } 27*bb4ee6a4SAndroid Build Coastguard Worker 28*bb4ee6a4SAndroid Build Coastguard Worker #[no_mangle] main() -> !29*bb4ee6a4SAndroid Build Coastguard Workerpub extern "C" fn main() -> ! { 30*bb4ee6a4SAndroid Build Coastguard Worker com_logger::init(); 31*bb4ee6a4SAndroid Build Coastguard Worker error!("Hello World!"); 32*bb4ee6a4SAndroid Build Coastguard Worker panic!(); 33*bb4ee6a4SAndroid Build Coastguard Worker } 34