On 05/07/2016 12:16 AM, Evgenii Stepanov wrote: > Sorry, I did not look at the problem hard enough. > The real issue is interaction of this code with safestack > (http://clang.llvm.org/docs/SafeStack.html), which splits the stack in > 2 disjoint memory regions. If the two variables are allocated on > different stacks, the comparison result is truly undefined. > > I don't really understand what this code is tying to do. Is it > catching unlimited stack growth? Why does the comment speak about > heap?
It's a heuristic that enables an optimization. You could select CONFIG_TOYBOX_NORECURSE to disable this optimization. The help text of that option describes it a little: when one toybox command calls another, it can either recurse into the new command's main() function, or call the actual execve() to relaunch the toybox binary with a fresh environment. Recursing is much faster, but has the downside that if you do enough in a row you tend to accumulate debris (open filehandles and unfreed mallocs and such from being halfway through another program). (Plus if you do it _forever_, you'll actualy run out of stack.) So it checks how much stack we've used as a simple heuristic to see whether we should recurse or should exec. This heuristic has not been particularly tuned, that's one of my toysh todo items. (toysh is likely to be the heaviest user.) Rob _______________________________________________ Toybox mailing list [email protected] http://lists.landley.net/listinfo.cgi/toybox-landley.net
