diff options
| author | Brian Anderson <banderson@mozilla.com> | 2016-09-30 23:26:44 +0000 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2016-11-01 17:08:24 +0000 |
| commit | ca30691813836e1c6896e5ba5d4397eb717e7270 (patch) | |
| tree | 9079226fb2fa666135049c929ee654af15b635e9 /src/libstd/sys_common/util.rs | |
| parent | f3a709dc52bb3e617ccb016a8b20a741c23da77d (diff) | |
| download | rust-ca30691813836e1c6896e5ba5d4397eb717e7270.tar.gz rust-ca30691813836e1c6896e5ba5d4397eb717e7270.zip | |
std: Move sys_common to libstd/sys_common
Make the directory structure reflect the module structure. I've always found the existing structure confusing.
Diffstat (limited to 'src/libstd/sys_common/util.rs')
| -rw-r--r-- | src/libstd/sys_common/util.rs | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/libstd/sys_common/util.rs b/src/libstd/sys_common/util.rs new file mode 100644 index 00000000000..daa0c15920b --- /dev/null +++ b/src/libstd/sys_common/util.rs @@ -0,0 +1,50 @@ +// Copyright 2013 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use env; +use fmt; +use io::prelude::*; +use sync::atomic::{self, Ordering}; +use sys::stdio::Stderr; +use thread; + +pub fn min_stack() -> usize { + static MIN: atomic::AtomicUsize = atomic::AtomicUsize::new(0); + match MIN.load(Ordering::SeqCst) { + 0 => {} + n => return n - 1, + } + let amt = env::var("RUST_MIN_STACK").ok().and_then(|s| s.parse().ok()); + let amt = amt.unwrap_or(2 * 1024 * 1024); + // 0 is our sentinel value, so ensure that we'll never see 0 after + // initialization has run + MIN.store(amt + 1, Ordering::SeqCst); + amt +} + +pub fn dumb_print(args: fmt::Arguments) { + let _ = Stderr::new().map(|mut stderr| stderr.write_fmt(args)); +} + +// Other platforms should use the appropriate platform-specific mechanism for +// aborting the process. If no platform-specific mechanism is available, +// ::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)); + unsafe { ::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>"))); +} |
