diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2015-09-08 15:53:46 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2015-09-11 11:19:20 -0700 |
| commit | f4be2026dfb507e5db919cc5df8fd934e05fa0b8 (patch) | |
| tree | 278d5b3916042e7232b7ba98a5ead399a52057eb /src/libstd/sys/common/util.rs | |
| parent | 192c37537bc6ffaee06e8b4099dd09ae43bcfee7 (diff) | |
std: Internalize almost all of `std::rt`
This commit does some refactoring to make almost all of the `std::rt` private. Specifically, the following items are no longer part of its API: * DEFAULT_ERROR_CODE * backtrace * unwind * args * at_exit * cleanup * heap (this is just alloc::heap) * min_stack * util The module is now tagged as `#[doc(hidden)]` as the only purpose it's serve is an entry point for the `panic!` macro via the `begin_unwind` and `begin_unwind_fmt` reexports.
Diffstat (limited to 'src/libstd/sys/common/util.rs')
| -rw-r--r-- | src/libstd/sys/common/util.rs | 46 |
1 files changed, 46 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..979f1f48669 --- /dev/null +++ b/src/libstd/sys/common/util.rs @@ -0,0 +1,46 @@ +// 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 intrinsics; +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)); +} + +pub fn abort(args: fmt::Arguments) -> ! { + dumb_print(format_args!("fatal runtime error: {}", args)); + unsafe { intrinsics::abort(); } +} + +#[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", + thread::current().name().unwrap_or("<unknown>"))); +} |
