From: Christophe R. <cr...@us...> - 2003-05-25 22:26:16
|
Update of /cvsroot/sbcl/sbcl/src/runtime In directory sc8-pr-cvs1:/tmp/cvs-serv11163/src/runtime Modified Files: bsd-os.c Log Message: 0.8.0.1: Fix build on FreeBSD ... don't #include <proc.h>, which defines a struct thread; (thanks to Henrik Motakef) ... do sigaltstack() if #+c-stack-is-control-stack (which is, in practice, all the time). (this /may/ break building on OpenBSD, which uses the same OS-dependent routines; it is possible that OpenBSD needs something from <proc.h>; if so, we need to find some compromise) Index: bsd-os.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/bsd-os.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- bsd-os.c 19 Apr 2003 01:17:13 -0000 1.15 +++ bsd-os.c 25 May 2003 22:26:13 -0000 1.16 @@ -34,7 +34,6 @@ #include <sys/types.h> #include <signal.h> /* #include <sys/sysinfo.h> */ -#include <sys/proc.h> #include "validate.h" vm_size_t os_vm_page_size; @@ -263,6 +262,16 @@ return all_threads; } int arch_os_thread_init(struct thread *thread) { + stack_t sigstack; +#ifdef LISP_FEATURE_C_STACK_IS_CONTROL_STACK + /* Signal handlers are run on the control stack, so if it is exhausted + * we had better use an alternate stack for whatever signal tells us + * we've exhausted it */ + sigstack.ss_sp=((void *) thread)+dynamic_values_bytes; + sigstack.ss_flags=0; + sigstack.ss_size = 32*SIGSTKSZ; + sigaltstack(&sigstack,0); +#endif return 1; /* success */ } int arch_os_thread_cleanup(struct thread *thread) { |