From fcf073b82c89dfc4a1c4dbb18e0369ff62c3d977 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net> Date: Tue, 28 Mar 2000 00:10:53 -0800 Subject: [PATCH] threads @ FreeBSD >= 4.0 should now work Rev: src/acconfig.h:1.56 Rev: src/configure.in:1.358 Rev: src/main.c:1.84 --- src/acconfig.h | 8 +++++++- src/configure.in | 50 +++++++++++++++++++++++++++++++++++++++++++++++- src/main.c | 8 +++++++- 3 files changed, 63 insertions(+), 3 deletions(-) diff --git a/src/acconfig.h b/src/acconfig.h index e8173d2e36..6ad811fd01 100644 --- a/src/acconfig.h +++ b/src/acconfig.h @@ -1,5 +1,5 @@ /* - * $Id: acconfig.h,v 1.55 2000/03/25 23:43:25 hubbe Exp $ + * $Id: acconfig.h,v 1.56 2000/03/28 08:10:53 hubbe Exp $ */ #ifndef MACHINE_H #define MACHINE_H @@ -104,6 +104,12 @@ */ #undef STACK_DIRECTION +/* Define this to the number of KB in the initial stack, + * currently this is 1 Mb on FreeBSD, 2Mb on Linux and + * unlimited (undefined) everywhere else + */ +#undef Pike_INITIAL_STACK_SIZE + /* If so, is it restricted to user and system time? */ #undef GETRUSAGE_RESTRICTED diff --git a/src/configure.in b/src/configure.in index ddaaae82e1..a10f5f0be4 100644 --- a/src/configure.in +++ b/src/configure.in @@ -1,4 +1,4 @@ -AC_REVISION("$Id: configure.in,v 1.357 2000/03/27 17:05:32 grubba Exp $") +AC_REVISION("$Id: configure.in,v 1.358 2000/03/28 08:10:53 hubbe Exp $") AC_INIT(interpret.c) AC_CONFIG_HEADER(machine.h) @@ -1373,6 +1373,51 @@ int main(int argc, char **argv) if test "x$PTHREAD_CONFIG" = xno ; then CFLAGS="${CFLAGS} -pthread" LD_FALLBACK_FLAGS="${LD_FALLBACK_FLAGS-} -lc_r" + + AC_MSG_CHECKING(Initial stack limit) + AC_CACHE_VAL(pike_cv_initial_stack_size,[ + AC_TRY_RUN([ +#include <stdio.h> + +static int depth=0; +FILE *f; + +void save_depth(void); + +void use_stack(void *page) +{ + void *X[8190]; + X[0]=page; + save_depth(); + use_stack(&X); +} + +void save_depth(void) +{ + depth+=sizeof(void *)*8192; + fprintf(f,"%d\n",depth); + fflush(f); + if(depth>0x80000000) exit(0); +} + +int main(int argc) +{ + f=fopen("confdefs.out.2","w"); /* weird filename to circumvent configure weirdness */ + save_depth(); + use_stack(0); +} +], +pike_cv_initial_stack_size='', +while read x; do pike_cv_initial_stack_size=$x ; done <confdefs.out.2) +rm confdefs.out.2 >/dev/null 2>/dev/null || : +]) + if test x$pike_cv_initial_stack_size = x ; then + AC_MSG_RESULT(unlimited) + else + AC_MSG_RESULT($pike_cv_initial_stack_size) + AC_DEFINE_UNQUOTED(Pike_INITIAL_STACK_SIZE,$pike_cv_initial_stack_size) + fi + else CFLAGS="$CFLAGS `pthread-config --cflags`" LIBS="$LIBS `pthread-config --libs`" @@ -3260,6 +3305,9 @@ AC_CACHE_VAL(pike_cv_sys_ccshared,[ esac else case $pike_cv_sys_os in + IRIX*) + AC_SYS_COMPILER_FLAG(-share,cc_shared,CCSHARED) + ;; hp*|HP*) CCSHARED="+z"; ;; FreeBSD*) CCSHARED="-fpic";; SCO_SV*) CCSHARED="-KPIC -dy -Bdynamic";; diff --git a/src/main.c b/src/main.c index 2857c65838..8df667cc1b 100644 --- a/src/main.c +++ b/src/main.c @@ -5,7 +5,7 @@ \*/ /**/ #include "global.h" -RCSID("$Id: main.c,v 1.83 2000/03/08 00:09:49 hubbe Exp $"); +RCSID("$Id: main.c,v 1.84 2000/03/28 08:10:53 hubbe Exp $"); #include "fdlib.h" #include "backend.h" #include "module.h" @@ -415,6 +415,12 @@ int dbm_main(int argc, char **argv) if(lim.rlim_cur == RLIM_INFINITY) lim.rlim_cur=1024*1024*32; #endif + +#ifdef Pike_INITIAL_STACK_SIZE + if(lim.rlim_cur > Pike_INITIAL_STACK_SIZE) + lim.rlim_cur=Pike_INITIAL_STACK_SIZE; +#endif + stack_top += STACK_DIRECTION * lim.rlim_cur; #ifdef HAVE_PTHREAD_INITIAL_THREAD_BOS -- GitLab