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 Yifanfn 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 Yifanfn 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 Yifanunsafe 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 Yifanextern "C" fn eh_personality() {} 39