sidestep potential over- and underflow in estimated stack bounds.
See buildlog here for evidence of such occurring: http://buildbot.rust-lang.org/builders/auto-linux-32-opt/builds/3910/steps/test/logs/stdio
This commit is contained in:
parent
185c074798
commit
243c5164ea
1 changed files with 15 additions and 1 deletions
|
@ -27,6 +27,7 @@ use marker::Send;
|
||||||
use ops::FnOnce;
|
use ops::FnOnce;
|
||||||
use sys;
|
use sys;
|
||||||
use thunk::Thunk;
|
use thunk::Thunk;
|
||||||
|
use usize;
|
||||||
|
|
||||||
// Reexport some of our utilities which are expected by other crates.
|
// Reexport some of our utilities which are expected by other crates.
|
||||||
pub use self::util::{default_sched_threads, min_stack, running_on_valgrind};
|
pub use self::util::{default_sched_threads, min_stack, running_on_valgrind};
|
||||||
|
@ -78,7 +79,20 @@ fn lang_start(main: *const u8, argc: int, argv: *const *const u8) -> int {
|
||||||
// FIXME #11359 we just assume that this thread has a stack of a
|
// FIXME #11359 we just assume that this thread has a stack of a
|
||||||
// certain size, and estimate that there's at most 20KB of stack
|
// certain size, and estimate that there's at most 20KB of stack
|
||||||
// frames above our current position.
|
// frames above our current position.
|
||||||
let my_stack_bottom = my_stack_top + 20000 - OS_DEFAULT_STACK_ESTIMATE;
|
const TWENTY_KB: uint = 20000;
|
||||||
|
|
||||||
|
// saturating-add to sidestep overflow
|
||||||
|
let top_plus_spill = if usize::MAX - TWENTY_KB < my_stack_top {
|
||||||
|
usize::MAX
|
||||||
|
} else {
|
||||||
|
my_stack_top + TWENTY_KB
|
||||||
|
};
|
||||||
|
// saturating-sub to sidestep underflow
|
||||||
|
let my_stack_bottom = if top_plus_spill < OS_DEFAULT_STACK_ESTIMATE {
|
||||||
|
0
|
||||||
|
} else {
|
||||||
|
top_plus_spill - OS_DEFAULT_STACK_ESTIMATE
|
||||||
|
};
|
||||||
|
|
||||||
let failed = unsafe {
|
let failed = unsafe {
|
||||||
// First, make sure we don't trigger any __morestack overflow checks,
|
// First, make sure we don't trigger any __morestack overflow checks,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue