#![no_std] #![feature(llvm_asm)] #![feature(linkage)] #![feature(panic_info_message)] #[macro_use] pub mod console; mod syscall; mod lang_items; #[no_mangle] #[link_section = ".text.entry"] pub extern "C" fn _start() -> ! { clear_bss(); syscall::sys_exit(main()); panic!("unreachable after sys_exit!"); } #[linkage = "weak"] #[no_mangle] fn main() -> i32 { panic!("Cannot find main!"); } fn clear_bss() { extern "C" { fn start_bss(); fn end_bss(); } (start_bss as usize..end_bss as usize).for_each(|addr| { unsafe { (addr as *mut u8).write_volatile(0); } }); }