diff options
Diffstat (limited to 'library/std/src/sys_common/util.rs')
-rw-r--r-- | library/std/src/sys_common/util.rs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/library/std/src/sys_common/util.rs b/library/std/src/sys_common/util.rs new file mode 100644 index 00000000000..9f7c3bd8795 --- /dev/null +++ b/library/std/src/sys_common/util.rs @@ -0,0 +1,28 @@ +use crate::fmt; +use crate::io::prelude::*; +use crate::sys::stdio::panic_output; +use crate::thread; + +pub fn dumb_print(args: fmt::Arguments<'_>) { + if let Some(mut out) = panic_output() { + let _ = out.write_fmt(args); + } +} + +// Other platforms should use the appropriate platform-specific mechanism for +// aborting the process. If no platform-specific mechanism is available, +// crate::intrinsics::abort() may be used instead. The above implementations cover +// all targets currently supported by libstd. + +pub fn abort(args: fmt::Arguments<'_>) -> ! { + dumb_print(format_args!("fatal runtime error: {}\n", args)); + crate::sys::abort_internal(); +} + +#[allow(dead_code)] // stack overflow detection not enabled on all platforms +pub unsafe fn report_overflow() { + dumb_print(format_args!( + "\nthread '{}' has overflowed its stack\n", + thread::current().name().unwrap_or("<unknown>") + )); +} |