Branch: Tag:

1998-09-02

1998-09-02 01:05:45 by Henrik Grubbström (Grubba) <grubba@grubba.org>

Added C-stack alignment code.
Now aligns the initial C stack on a 64KB boundary.

Rev: src/main.c:1.58

4:   ||| See the files COPYING and DISCLAIMER for more information.   \*/   #include "global.h" - RCSID("$Id: main.c,v 1.57 1998/08/10 23:33:30 hubbe Exp $"); + RCSID("$Id: main.c,v 1.58 1998/09/02 01:05:45 grubba Exp $");   #include "fdlib.h"   #include "backend.h"   #include "module.h"
323:   #define RLIMIT_NOFILE RLIMIT_OFILE   #endif    +  stack_top = (char *)&argv; +  +  /* Adjust for anything already pushed on the stack. +  * We align on a 64 KB boundary. +  * Thus we at worst, lose 64 KB stack. +  * +  * We have to do it this way since some compilers don't like +  * & and | on pointers, and casting to an integer type is +  * too unsafe (consider 64-bit systems). +  */ + #if STACK_DIRECTION < 0 +  /* Equvivalent with |= 0xffff */ +  stack_top += (~((unsigned long)stack_top)) & 0xffff; + #else /* STACK_DIRECTION >= 0 */ +  /* Equvivalent with &= ~0xffff */ +  stack_top -= ( ((unsigned long)stack_top)) & 0xffff; + #endif /* STACK_DIRECTION < 0 */ +    #if defined(HAVE_GETRLIMIT) && defined(RLIMIT_STACK)    {    struct rlimit lim;
332: Inside #if defined(HAVE_GETRLIMIT) && defined(RLIMIT_STACK) and #if defined(RLIM_INFINITY)
   if(lim.rlim_cur == RLIM_INFINITY)    lim.rlim_cur=1024*1024*128;   #endif -  stack_top= ((char *) &argv) + -  STACK_DIRECTION * (lim.rlim_cur - 8192 * sizeof(char *)); +  stack_top += STACK_DIRECTION * (lim.rlim_cur - 8192 * sizeof(char *)); +  + #ifdef STACK_DEBUG +  fprintf(stderr, "1: C-stack: 0x%08p - 0x%08p, direction:%d\n", +  &argv, stack_top, STACK_DIRECTION); + #endif /* STACK_DEBUG */    }    } - #else -  stack_top= ((char *) &argv) + -  STACK_DIRECTION * (1024*1024 * 128 - 8192 * sizeof(char *)); - #endif + #else /* !HAVE_GETRLIMIT || !RLIMIT_STACK */ +  /* 128 MB seems a bit extreme, most OS's seem to have their limit at ~8MB */ +  stack_top += STACK_DIRECTION * (1024*1024 * 128 - 8192 * sizeof(char *)); + #ifdef STACK_DEBUG +  fprintf(stderr, "2: C-stack: 0x%08p - 0x%08p, direction:%d\n", +  &argv, stack_top, STACK_DIRECTION); + #endif /* STACK_DEBUG */ + #endif /* HAVE_GETRLIMIT && RLIMIT_STACK */      #if defined(HAVE_SETRLIMIT) && defined(RLIMIT_NOFILE)    {