calcru-triggered panic?

Chuck Swiger cswiger at mac.com
Wed Nov 29 15:24:12 PST 2006


On Nov 29, 2006, at 2:51 PM, Scott Long wrote:
>> Is it possible to check how deep the stack is and avoid using a stack
>> buffer if too deep?
>> --
>> John Birrell
>
> I don't know how to do it in a platform-independent way.  For i386,
> I'd check %esp and see if it's getting close to a 2x page boundary.

You should be able to take the address of an automatic variable which  
gets allocated on the stack...?

#include <stdio.h>

int main(int argc, char *argv[])
{
     volatile int stack_location;

     printf("stack is at: %0p\n", &stack_location);
}

On a few platforms [1], they have a set of registers dedicated as  
temps which might be used instead of the stack, although taking the  
address of the variable should be enough to prevent the compiler from  
allocating it in a register.  But using "volatile" will keep the  
compiler from doing anything fancy with it.

-- 
-Chuck

[1]: The HP/PA and SPARC's register windows, for example.  But quick  
testing suggests that the above finds the stack on x86, SPARC, and  
PPC hardware, although I'm obviously testing userland code rather  
than running it inside a kernel module.  :-)



More information about the freebsd-current mailing list