1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
#![no_std] extern crate x86_64; pub mod bootinfo; /// Defines the entry point function. /// /// The function must have the signature `fn(&'static BootInfo) -> !`. /// /// This macro just creates a function named `_start`, which the linker will use as the entry /// point. The advantage of using this macro instead of providing an own `_start` function is /// that the macro ensures that the function and argument types are correct. #[macro_export] macro_rules! entry_point { ($path:path) => { #[export_name = "_start"] pub extern "C" fn __impl_start(boot_info: &'static $crate::bootinfo::BootInfo) -> ! { // validate the signature of the program entry point let f: fn(&'static $crate::bootinfo::BootInfo) -> ! = $path; f(boot_info) } }; }