about summary refs log tree commit diff
path: root/src/libstd/sys_common/thread.rs
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2017-09-14 03:02:58 +0000
committerbors <bors@rust-lang.org>2017-09-14 03:02:58 +0000
commit84bbd14e3f392d63524482e2f0c69cd6fcd7f2c5 (patch)
tree245c38d385167096343d83f9884d37275c349e27 /src/libstd/sys_common/thread.rs
parentd1ca653b170c235ad01a83d89fcb18b1f8b6a3b0 (diff)
parentb2b50635172254777d16d0fc6112e6d5b68b63f2 (diff)
downloadrust-84bbd14e3f392d63524482e2f0c69cd6fcd7f2c5.tar.gz
rust-84bbd14e3f392d63524482e2f0c69cd6fcd7f2c5.zip
Auto merge of #43972 - TobiasSchaffner:std_clean, r=alexcrichton
 Add the libstd-modifications needed for the L4Re target

This commit adds the needed modifications to compile the std crate for the L4 Runtime environment (L4Re).

A target for the L4Re was introduced in commit: c151220a84e40b65e45308cc0f3bbea4466d3acf

In many aspects implementations for linux also apply for the L4Re microkernel.

Some uncommon characteristics had to be resolved:
 * L4Re has no network funktionality
 * L4Re has a maximum stacksize of 1Mb for threads
 * L4Re has no uid or gid

Co-authored-by: Sebastian Humenda <sebastian.humenda@tu-dresden.de>
Diffstat (limited to 'src/libstd/sys_common/thread.rs')
-rw-r--r--src/libstd/sys_common/thread.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/libstd/sys_common/thread.rs b/src/libstd/sys_common/thread.rs
index 3ee160da5fa..87fb34a9dec 100644
--- a/src/libstd/sys_common/thread.rs
+++ b/src/libstd/sys_common/thread.rs
@@ -8,9 +8,12 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+use env;
 use alloc::boxed::FnBox;
 use libc;
+use sync::atomic::{self, Ordering};
 use sys::stack_overflow;
+use sys::thread as imp;
 
 pub unsafe fn start_thread(main: *mut libc::c_void) {
     // Next, set up our stack overflow handler which may get triggered if we run
@@ -20,3 +23,18 @@ pub unsafe fn start_thread(main: *mut libc::c_void) {
     // Finally, let's run some code.
     Box::from_raw(main as *mut Box<FnBox()>)()
 }
+
+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(imp::DEFAULT_MIN_STACK_SIZE);
+
+    // 0 is our sentinel value, so ensure that we'll never see 0 after
+    // initialization has run
+    MIN.store(amt + 1, Ordering::SeqCst);
+    amt
+}