3 //! The `rt` module provides a narrow set of runtime services,
4 //! including the global heap (exported in `heap`) and unwinding and
5 //! backtrace support. The APIs in this module are highly unstable,
6 //! and should be considered as private implementation details for the
11 reason
= "this public module should not exist and is highly likely \
17 // Re-export some of our utilities which are expected by other crates.
18 pub use crate::panicking
::{begin_panic, begin_panic_fmt, panic_count}
;
20 // To reduce the generated code of the new `lang_start`, this function is doing
23 fn lang_start_internal(
24 main
: &(dyn Fn() -> i32 + Sync
+ crate::panic
::RefUnwindSafe
),
26 argv
: *const *const u8,
30 use crate::sys_common
;
31 use crate::sys_common
::thread_info
;
32 use crate::thread
::Thread
;
37 let main_guard
= sys
::thread
::guard
::init();
38 sys
::stack_overflow
::init();
40 // Next, set up the current Thread with the guard information we just
41 // created. Note that this isn't necessary in general for new threads,
42 // but we just do this to name the main thread and to give it correct
43 // info about the stack bounds.
44 let thread
= Thread
::new(Some("main".to_owned()));
45 thread_info
::set(main_guard
, thread
);
47 // Store our args if necessary in a squirreled away location
48 sys
::args
::init(argc
, argv
);
50 // Let's run some code!
51 let exit_code
= panic
::catch_unwind(main
);
53 sys_common
::cleanup();
54 exit_code
.unwrap_or(101) as isize
60 fn lang_start
<T
: crate::process
::Termination
+ '
static>(
63 argv
: *const *const u8,
66 &move || crate::sys_common
::backtrace
::__rust_begin_short_backtrace(main
).report(),