#![no_std]
#![deny(rustdoc::broken_intra_doc_links)]
pub mod manifest;
pub mod panic_handler;
mod thread;
#[unsafe(no_mangle)]
pub unsafe extern "C" fn _start(args: *mut u8) -> i32 {
unsafe extern "Rust" {
fn main(args: *mut u8) -> i32;
}
unsafe { main(args) }
}
#[macro_export]
macro_rules! entry {
($path:path) => {
#[cfg(not(miri))]
#[unsafe(export_name = "main")]
pub unsafe fn __main(args: *mut u8) -> i32 {
let f: fn(Option<&::core::ffi::CStr>) -> i32 = $path;
let args = if args.is_null() {
None
} else {
let args = unsafe { core::ffi::CStr::from_ptr(args.cast_const().cast()) };
Some(args)
};
let ret = f(args);
$crate::__macro_support::__wait_for_thread_completion();
ret
}
};
}
#[doc(hidden)]
pub mod __macro_support {
pub use crate::thread::wait_for_completion as __wait_for_thread_completion;
}