xref: /aosp_15_r20/external/bazelbuild-rules_rust/test/no_std/main.rs (revision d4726bddaa87cc4778e7472feed243fa4b6c267f)
1*d4726bddSHONG Yifan #![no_std]
2*d4726bddSHONG Yifan #![no_main]
3*d4726bddSHONG Yifan #![feature(lang_items)]
4*d4726bddSHONG Yifan 
5*d4726bddSHONG Yifan use core::arch::asm;
6*d4726bddSHONG Yifan use core::arch::global_asm;
7*d4726bddSHONG Yifan use core::panic::PanicInfo;
8*d4726bddSHONG Yifan 
9*d4726bddSHONG Yifan #[panic_handler]
panic(_info: &PanicInfo) -> !10*d4726bddSHONG Yifan fn panic(_info: &PanicInfo) -> ! {
11*d4726bddSHONG Yifan     exit(1);
12*d4726bddSHONG Yifan }
13*d4726bddSHONG Yifan 
14*d4726bddSHONG Yifan global_asm! {
15*d4726bddSHONG Yifan     ".global _start",
16*d4726bddSHONG Yifan     "_start:",
17*d4726bddSHONG Yifan     "mov rdi, rsp",
18*d4726bddSHONG Yifan     "call start_main"
19*d4726bddSHONG Yifan }
20*d4726bddSHONG Yifan 
exit(status: i32) -> !21*d4726bddSHONG Yifan fn exit(status: i32) -> ! {
22*d4726bddSHONG Yifan     unsafe {
23*d4726bddSHONG Yifan         asm!(
24*d4726bddSHONG Yifan             "syscall",
25*d4726bddSHONG Yifan             in("rax") 60,
26*d4726bddSHONG Yifan             in("rdi") status,
27*d4726bddSHONG Yifan             options(noreturn)
28*d4726bddSHONG Yifan         );
29*d4726bddSHONG Yifan     }
30*d4726bddSHONG Yifan }
31*d4726bddSHONG Yifan 
32*d4726bddSHONG Yifan #[no_mangle]
start_main(_stack_top: *const u8) -> !33*d4726bddSHONG Yifan unsafe fn start_main(_stack_top: *const u8) -> ! {
34*d4726bddSHONG Yifan     exit(0);
35*d4726bddSHONG Yifan }
36*d4726bddSHONG Yifan 
37*d4726bddSHONG Yifan #[lang = "eh_personality"]
eh_personality()38*d4726bddSHONG Yifan extern "C" fn eh_personality() {}
39