xref: /aosp_15_r20/external/crosvm/tools/examples/baremetal/src/main.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
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 Worker fn 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 Worker pub 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