mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2025-12-06 02:40:26 -08:00
Change handling of C stack size
Previously: unconditionally use the size from ECL_OPT_C_STACK_SIZE if it is larger than the OS provided value and if possible resize the stack at runtime. Now: Use ECL_OPT_C_STACK_SIZE if provided. Otherwise, use a) the OS provided value if we can resize the stack at runtime (for Unix) or b) the new build option ECL_DEFAULT_C_STACK_SIZE (1 MB) if we can set the stack size at link time (for Windows).
This commit is contained in:
parent
a4e93f7b61
commit
d7b2dfb722
8 changed files with 36 additions and 29 deletions
|
|
@ -17,6 +17,9 @@ SOFTWARE_TYPE = NT
|
|||
SOFTWARE_VERSION = 5.0
|
||||
THEHOST = win32
|
||||
|
||||
# Size of the C stack in bytes
|
||||
ECL_DEFAULT_C_STACK_SIZE = 1048576
|
||||
|
||||
# Define to 1 to make a 64-bit build
|
||||
# ECL_WIN64 =
|
||||
|
||||
|
|
@ -132,7 +135,7 @@ CLIBS = $(CLIBS) DbgHelp.lib
|
|||
!endif
|
||||
|
||||
CFLAGS = /EHsc /DGC_DLL /DGC_BUILD /nologo /D_CRT_SECURE_NO_DEPRECATE $(CFLAGS_CONFIG)
|
||||
LDFLAGS = /link /incremental:no /nologo $(LDFLAGS_CONFIG)
|
||||
LDFLAGS = /link /incremental:no /nologo $(LDFLAGS_CONFIG) /STACK:$(ECL_DEFAULT_C_STACK_SIZE)
|
||||
|
||||
|
||||
# Additional configuration for thread support
|
||||
|
|
@ -346,6 +349,7 @@ ecl-cc.bat: util\ecl-cc.bat Makefile
|
|||
eclmin.lib: eclgmp.lib eclgc.lib lsp/config.lsp
|
||||
cd c
|
||||
$(MAKE) /nologo ECL_VERSION_NUMBER=$(ECL_VERSION_NUMBER) \
|
||||
ECL_DEFAULT_C_STACK_SIZE=$(ECL_DEFAULT_C_STACK_SIZE) \
|
||||
ECL_THREADS=$(ECL_THREADS) ECL_UNICODE=$(ECL_UNICODE) \
|
||||
ECL_SSE=$(ECL_SSE) ECL_WIN64=$(ECL_WIN64) \
|
||||
ECL_USE_DBGHELP=$(ECL_USE_DBGHELP) \
|
||||
|
|
|
|||
|
|
@ -168,6 +168,7 @@ $(HFILES): ../ecl/config.h.msvc6 ../ecl/config-internal.h.msvc6 Makefile
|
|||
-mkdir ..\ecl\impl
|
||||
cut.exe "@ECL_FPE_CODE@" "$(srcdir:\=/)/arch/$(ECL_FPE_CODE)" \
|
||||
"@ECL_VERSION_NUMBER@" "$(ECL_VERSION_NUMBER)" \
|
||||
"@ECL_DEFAULT_C_STACK_SIZE@" "$(ECL_DEFAULT_C_STACK_SIZE)" \
|
||||
"@ECL_THREADS@" "$(ECL_THREADS_FLAG)" \
|
||||
"@ECL_UNICODE@" "$(ECL_UNICODE_FLAG)" \
|
||||
"@ECL_SSE2@" "$(ECL_SSE_FLAG)" \
|
||||
|
|
@ -175,6 +176,7 @@ $(HFILES): ../ecl/config.h.msvc6 ../ecl/config-internal.h.msvc6 Makefile
|
|||
< ..\ecl\config.h.msvc6 > ..\ecl\config.h
|
||||
cut.exe "@ECL_FPE_CODE@" "$(srcdir:\=/)/arch/$(ECL_FPE_CODE)" \
|
||||
"@ECL_VERSION_NUMBER@" "$(ECL_VERSION_NUMBER)" \
|
||||
"@ECL_DEFAULT_C_STACK_SIZE@" "$(ECL_DEFAULT_C_STACK_SIZE)" \
|
||||
"@ECL_THREADS@" "$(ECL_THREADS_FLAG)" \
|
||||
"@ECL_UNICODE@" "$(ECL_UNICODE_FLAG)" \
|
||||
"@ECL_SSE2@" "$(ECL_SSE_FLAG)" \
|
||||
|
|
|
|||
|
|
@ -126,11 +126,8 @@
|
|||
/*
|
||||
* Memory limits for the old garbage collector.
|
||||
*/
|
||||
#define LISP_PAGESIZE 2048 /* Page size in bytes */
|
||||
#define MAXPAGE 16384 /* Maximum Memory Size */
|
||||
|
||||
/* We reserve these many bytes for computation with bignums registers */
|
||||
#define BIGNUM_REGISTER_SIZE 16
|
||||
#define LISP_PAGESIZE 2048 /* Page size in bytes */
|
||||
#define MAXPAGE 65536 /* Maximum Memory Size */
|
||||
|
||||
/* We allocate a number of strings in a pool which is used to speed up reading */
|
||||
#define ECL_MAX_STRING_POOL_SIZE 10
|
||||
|
|
@ -191,7 +188,17 @@
|
|||
# define ECL_MATHERR_TEST
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_LIBFFI) && defined(ECL_INCLUDE_FFI_H)
|
||||
#include "@ECL_LIBFFI_HEADER@"
|
||||
#endif
|
||||
|
||||
#define ECL_WINDOWS_BACKTRACE @ECL_USE_DBGHELP@
|
||||
#if !ECL_WINDOWS_BACKTRACE
|
||||
#undef ECL_WINDOWS_BACKTRACE
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_SYS_RESOURCE_H) && defined(RLIMIT_STACK) && !defined(NACL)
|
||||
#define ECL_DEFAULT_C_STACK_SIZE 0 /* Use the stack size provided by the OS */
|
||||
#else
|
||||
#define ECL_DEFAULT_C_STACK_SIZE @ECL_DEFAULT_C_STACK_SIZE@
|
||||
#endif
|
||||
|
|
|
|||
6
src/aclocal.m4
vendored
6
src/aclocal.m4
vendored
|
|
@ -251,6 +251,8 @@ AC_SUBST(EXEEXT)
|
|||
AC_SUBST(INSTALL_TARGET)dnl Which type of installation: flat directory or unix like.
|
||||
AC_SUBST(thehost)
|
||||
AC_SUBST(ECL_GC_DIR)dnl Which version of the Boehm-Weiser library to use
|
||||
AC_SUBST(ECL_DEFAULT_C_STACK_SIZE)dnl Default size of the C stack in bytes
|
||||
ECL_DEFAULT_C_STACK_SIZE=1048576 dnl Default to 1 MB if we can't set the stack size at runtime
|
||||
ECL_GC_DIR=bdwgc
|
||||
ECL_LDRPATH=''
|
||||
SHAREDEXT='so'
|
||||
|
|
@ -404,8 +406,8 @@ case "${host_os}" in
|
|||
enable_threads='yes'
|
||||
THREAD_CFLAGS='-D_THREAD_SAFE'
|
||||
THREAD_GC_FLAGS='--enable-threads=win32'
|
||||
SHARED_LDFLAGS=''
|
||||
BUNDLE_LDFLAGS=''
|
||||
SHARED_LDFLAGS="-Wl,--stack,${ECL_DEFAULT_C_STACK_SIZE}"
|
||||
BUNDLE_LDFLAGS="-Wl,--stack,${ECL_DEFAULT_C_STACK_SIZE}"
|
||||
SHAREDPREFIX=''
|
||||
SHAREDEXT='dll'
|
||||
PICFLAG=''
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ cl_fixnum ecl_option_values[ECL_OPT_LIMIT+1] = {
|
|||
128, /* ECL_OPT_FRAME_STACK_SAFETY_AREA */
|
||||
32768, /* ECL_OPT_LISP_STACK_SIZE */
|
||||
128, /* ECL_OPT_LISP_STACK_SAFETY_AREA */
|
||||
128*sizeof(cl_index)*1024, /* ECL_OPT_C_STACK_SIZE */
|
||||
ECL_DEFAULT_C_STACK_SIZE, /* ECL_OPT_C_STACK_SIZE */
|
||||
4*sizeof(cl_index)*1024, /* ECL_OPT_C_STACK_SAFETY_AREA */
|
||||
HEAP_SIZE_DEFAULT, /* ECL_OPT_HEAP_SIZE */
|
||||
1024*1024, /* ECL_OPT_HEAP_SAFETY_AREA */
|
||||
|
|
|
|||
23
src/configure
vendored
23
src/configure
vendored
|
|
@ -658,6 +658,7 @@ MANUAL_INSTALL_TARGET
|
|||
MANUAL_MAKE_TARGET
|
||||
MAKEINFO
|
||||
INSTALL_INFO
|
||||
ECL_DEFAULT_C_STACK_SIZE
|
||||
ECL_GC_DIR
|
||||
thehost
|
||||
INSTALL_TARGET
|
||||
|
|
@ -740,7 +741,6 @@ infodir
|
|||
docdir
|
||||
oldincludedir
|
||||
includedir
|
||||
runstatedir
|
||||
localstatedir
|
||||
sharedstatedir
|
||||
sysconfdir
|
||||
|
|
@ -866,7 +866,6 @@ datadir='${datarootdir}'
|
|||
sysconfdir='${prefix}/etc'
|
||||
sharedstatedir='${prefix}/com'
|
||||
localstatedir='${prefix}/var'
|
||||
runstatedir='${localstatedir}/run'
|
||||
includedir='${prefix}/include'
|
||||
oldincludedir='/usr/include'
|
||||
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
|
||||
|
|
@ -1119,15 +1118,6 @@ do
|
|||
| -silent | --silent | --silen | --sile | --sil)
|
||||
silent=yes ;;
|
||||
|
||||
-runstatedir | --runstatedir | --runstatedi | --runstated \
|
||||
| --runstate | --runstat | --runsta | --runst | --runs \
|
||||
| --run | --ru | --r)
|
||||
ac_prev=runstatedir ;;
|
||||
-runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
|
||||
| --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
|
||||
| --run=* | --ru=* | --r=*)
|
||||
runstatedir=$ac_optarg ;;
|
||||
|
||||
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
|
||||
ac_prev=sbindir ;;
|
||||
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
|
||||
|
|
@ -1265,7 +1255,7 @@ fi
|
|||
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
|
||||
datadir sysconfdir sharedstatedir localstatedir includedir \
|
||||
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
|
||||
libdir localedir mandir runstatedir
|
||||
libdir localedir mandir
|
||||
do
|
||||
eval ac_val=\$$ac_var
|
||||
# Remove trailing slashes.
|
||||
|
|
@ -1418,7 +1408,6 @@ Fine tuning of the installation directories:
|
|||
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
|
||||
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
|
||||
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
|
||||
--runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
|
||||
--libdir=DIR object code libraries [EPREFIX/lib]
|
||||
--includedir=DIR C header files [PREFIX/include]
|
||||
--oldincludedir=DIR C header files for non-gcc [/usr/include]
|
||||
|
|
@ -4952,7 +4941,7 @@ MV="mv"
|
|||
|
||||
|
||||
|
||||
ECL_GC_DIR=bdwgc
|
||||
ECL_DEFAULT_C_STACK_SIZE=1048576 ECL_GC_DIR=bdwgc
|
||||
ECL_LDRPATH=''
|
||||
SHAREDEXT='so'
|
||||
SHAREDPREFIX='lib'
|
||||
|
|
@ -5106,8 +5095,8 @@ LSP_FEATURES="(cons :android ${LSP_FEATURES})"
|
|||
enable_threads='yes'
|
||||
THREAD_CFLAGS='-D_THREAD_SAFE'
|
||||
THREAD_GC_FLAGS='--enable-threads=win32'
|
||||
SHARED_LDFLAGS=''
|
||||
BUNDLE_LDFLAGS=''
|
||||
SHARED_LDFLAGS="-Wl,--stack,${ECL_DEFAULT_C_STACK_SIZE}"
|
||||
BUNDLE_LDFLAGS="-Wl,--stack,${ECL_DEFAULT_C_STACK_SIZE}"
|
||||
SHAREDPREFIX=''
|
||||
SHAREDEXT='dll'
|
||||
PICFLAG=''
|
||||
|
|
@ -9007,8 +8996,6 @@ main ()
|
|||
if (*(data + i) != *(data3 + i))
|
||||
return 14;
|
||||
close (fd);
|
||||
free (data);
|
||||
free (data3);
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
|
|
|
|||
|
|
@ -159,8 +159,7 @@ The second set is related to the sizes of different stacks. Currently ECL uses f
|
|||
@item @code{FRAME_STACK_SAFETY_AREA} @tab cl_index @tab 128 @tab
|
||||
@item @code{LISP_STACK_SIZE} @tab cl_index @tab 32768 @tab Size of interpreter stack.
|
||||
@item @code{LISP_STACK_SAFETY_AREA} @tab cl_index @tab 128 @tab
|
||||
@item @code{C_STACK_SIZE} @tab cl_index @tab 131072 @tab Size of C
|
||||
stack@footnote{On operating systems on which ECL can resize the stack at runtime (currently only Unixes), the size of the C stack will be set to this value if the default stack size is smaller. Otherwise, this option should be set to the value of the available stack space to allow for reliable stack overflow detection.}.
|
||||
@item @code{C_STACK_SIZE} @tab cl_index @tab 0 or 1048576 @tab Size of C stack in bytes. The effect and default value of this option depends on the operating system. On Unix, the default is 0 which means that ECL will use the stack size provided by the OS. If set to a non-default value, ECL will set the stack size to the given value unless the stack size provided by the OS is already large enough. On Windows, the stack size is set at build time and cannot be changed at runtime. Here, we use a default of 1 MiB. For other operating systems, it is up to the user to set this value to the available stack size so that ECL can reliably detect stack overflows.
|
||||
@item @code{C_STACK_SAFETY_AREA} @tab cl_index @tab 4192 @tab
|
||||
@item @code{THREAD_INTERRUPT_SIGNAL} @tab unsigned int @tab 0 @tab If nonzero, specify the unix signal which is used to communicate different Lisp threads.
|
||||
@end multitable
|
||||
|
|
|
|||
|
|
@ -244,3 +244,9 @@
|
|||
#if defined(HAVE_LIBFFI) && defined(ECL_INCLUDE_FFI_H)
|
||||
#include "@ECL_LIBFFI_HEADER@"
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_SYS_RESOURCE_H) && defined(RLIMIT_STACK) && !defined(NACL)
|
||||
#define ECL_DEFAULT_C_STACK_SIZE 0 /* Use the stack size provided by the OS */
|
||||
#else
|
||||
#define ECL_DEFAULT_C_STACK_SIZE @ECL_DEFAULT_C_STACK_SIZE@
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue