From jeff.horner at vanderbilt.edu  Wed Apr 12 06:46:51 2006
From: jeff.horner at vanderbilt.edu (Jeffrey Horner)
Date: Tue, 11 Apr 2006 23:46:51 -0500
Subject: [Rd] Stack checking, core dumps, and embedding R
In-Reply-To: <E725DDAC-4044-4A6E-B9F6-007FAF7225DA@r-project.org>
References: <1abe3fa90604110234v1b4958c0w1e51e2b49f7ff9c5@mail.gmail.com>
	<E725DDAC-4044-4A6E-B9F6-007FAF7225DA@r-project.org>
Message-ID: <443C863B.8030700@vanderbilt.edu>

Simon Urbanek wrote:
> On Apr 11, 2006, at 5:34 AM, A.J. Rossini wrote:
> 
>> I've been experiencing some interesting stack warnings recently  
>> when moving from R 2.2.x to the R 2.3.0 series and the R 2.4.0  
>> series.  In particular, I'm getting warnings of "Error: C stack  
>> usage is too close to the limit" before segfaulting, and this  
>> wasn't happening under the 2.2.x series.
>>
>> Here's the question statement:  (ONLY) In the situation where one  
>> is embedding R, is anyone else seeing this occur with recent (past  
>> 2 weeks) versions of R (both the 2.3.x and 2.4.x series)?
>>
> 
> When embedding R, the stack base is set to -1 (which is almost  
> certainly wrong) if R cannot find the stack base using some system  
> method. I have just fixed the detection for OS X, so you shouldn't  

My question may be unrelated, but I stumbled across it while trying to 
understand the above problem. The following is from R-trunk r37731 
src/unix/system.c in Rf_initialize_R() and is run when the os is neither 
linux nor freebsd:

     if(R_running_as_main_program) {
     /* This is not the main program, but unless embedded it is
        near the top, 5540 bytes away when checked. */
     R_CStackStart = (uintptr_t) &i + 6000;
     }

This is run before we know which direction the stack grows:

     {
         int ii;
     /* 1 is downwards */
         R_CStackDir = ((uintptr_t)&i > (uintptr_t)&ii) ? 1 : -1;
     }

So, R_CStackStart is being set to the address of i (on the stack) plus 
6000 bytes, an approximation to somewhere near the beginning of the 
stack, but this presumes the stack grows down, right? What if it grows 
up? Then shouldn't we subtract 6000 bytes?

> get that message there anymore. However, I was wondering why to not  
> set it to something reasonable - even if we are not the main  
> application, IMHO less harm is done setting it to something based on  
> the current stack pointer than using -1. The status quo relies on the  
> embedding application to set the stack base - I don't know if that's  
> a good idea. Opinions?
> 
> Cheers,
> Simon
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

-- 
Jeffrey Horner       Computer Systems Analyst         School of Medicine
615-322-8606         Department of Biostatistics   Vanderbilt University



[Rd] Stack checking, core dumps, and embedding R
Jeffrey Horner