|
@@ -3,7 +3,6 @@
|
|
|
use riscv::asm;
|
|
|
|
|
|
/// Default panic handler
|
|
|
-#[linkage = "weak"]
|
|
|
#[lang = "panic_fmt"]
|
|
|
unsafe extern "C" fn panic_fmt(
|
|
|
_: ::core::fmt::Arguments, // fmt
|
|
@@ -34,12 +33,26 @@ unsafe extern "C" fn panic_fmt(
|
|
|
// has to call `rustc_main`. That's covered by the `reset_handler` function in
|
|
|
// root of this crate.
|
|
|
#[lang = "start"]
|
|
|
-extern "C" fn start(
|
|
|
+extern "C" fn lang_start<T>(
|
|
|
main: fn(),
|
|
|
_argc: isize,
|
|
|
_argv: *const *const u8,
|
|
|
-) -> isize {
|
|
|
+) -> isize
|
|
|
+ where
|
|
|
+ T: Termination,
|
|
|
+{
|
|
|
main();
|
|
|
|
|
|
0
|
|
|
}
|
|
|
+
|
|
|
+#[lang = "termination"]
|
|
|
+pub trait Termination {
|
|
|
+ fn report(self) -> i32;
|
|
|
+}
|
|
|
+
|
|
|
+impl Termination for () {
|
|
|
+ fn report(self) -> i32 {
|
|
|
+ 0
|
|
|
+ }
|
|
|
+}
|