Re: [Rd] Stack checking, core dumps, and embedding R

From: Jeffrey Horner <jeff.horner_at_vanderbilt.edu>
Date: Wed 12 Apr 2006 - 04:46:51 GMT

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@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

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Received on Wed Apr 12 15:13:04 2006

This archive was generated by hypermail 2.1.8 : Wed 12 Apr 2006 - 08:17:14 GMT