summaryrefslogtreecommitdiff
path: root/library/std/src/sys_common/util.rs
diff options
context:
space:
mode:
Diffstat (limited to 'library/std/src/sys_common/util.rs')
-rw-r--r--library/std/src/sys_common/util.rs28
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>")
+ ));
+}