123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- // NOTE: Adapted from cortex-m/src/lang_items.rs
- use riscv::asm;
- /// Default panic handler
- #[linkage = "weak"]
- #[lang = "panic_fmt"]
- unsafe extern "C" fn panic_fmt(
- _: ::core::fmt::Arguments, // fmt
- _: &'static str, // file
- _: u32, // line
- _: u32, // col
- ) -> ! {
- asm::ebreak();
- loop {}
- }
- /// Lang item required to make the normal `main` work in applications
- // This is how the `start` lang item works:
- // When `rustc` compiles a binary crate, it creates a `main` function that looks
- // like this:
- //
- // ```
- // #[export_name = "main"]
- // pub extern "C" fn rustc_main(argc: isize, argv: *const *const u8) -> isize {
- // start(main)
- // }
- // ```
- //
- // Where `start` is this function and `main` is the binary crate's `main`
- // function.
- //
- // The final piece is that the entry point of our program, the reset handler,
- // has to call `rustc_main`. That's covered by the `reset_handler` function in
- // root of this crate.
- #[lang = "start"]
- extern "C" fn start(
- main: fn(),
- _argc: isize,
- _argv: *const *const u8,
- ) -> isize {
- main();
- 0
- }
|