From: Nikodemus S. <de...@us...> - 2010-08-31 13:05:05
|
Update of /cvsroot/sbcl/sbcl/src/runtime In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv19584/src/runtime Modified Files: x86-bsd-os.c Log Message: 1.0.42.8: fix build on OpenBSD/i386 -current and upcoming 4.8 release * Patch by Josh Elsasser, lp#615489. * On OpenBSD/i386, the structure that stores the FPU state during signals was recently moved. Add a script to tools-for-build/ which is run from make-config.sh to detect where the FPU state is located, and create a src/runtime/openbsd-sigcontext.h header containing a #define which src/runtime/x86-bsd-os.c can use. This is necessary to build SBCL on recent -current snapshots of OpenBSD, and for the upcoming 4.8 release. * Missing NEWS entry for last commit. Index: x86-bsd-os.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/x86-bsd-os.c,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- x86-bsd-os.c 13 May 2009 18:13:48 -0000 1.17 +++ x86-bsd-os.c 31 Aug 2010 13:04:54 -0000 1.18 @@ -20,9 +20,12 @@ #endif #if defined(LISP_FEATURE_OPENBSD) -#include <machine/frame.h> #include <machine/npx.h> #include <stddef.h> +#include "openbsd-sigcontext.h" +#ifdef OS_OPENBSD_FPSTATE_IN_SIGFRAME +# include <machine/frame.h> +#endif #endif /* KLUDGE: There is strong family resemblance in the signal context @@ -248,11 +251,14 @@ void os_restore_fp_control(os_context_t *context) { - struct sigframe *frame; - union savefpu *fpu; +#ifdef OS_OPENBSD_FPSTATE_IN_SIGFRAME + struct sigframe *frame = (struct sigframe *)((char*)context - + offsetof(struct sigframe, sf_sc)); + union savefpu *fpu = frame->sf_fpstate; +#elif defined(OS_OPENBSD_FPSTATE_IN_SIGCONTEXT) + union savefpu *fpu = context->sc_fpstate; +#endif - frame = (struct sigframe *)((char*)context - offsetof(struct sigframe, sf_sc)); - fpu = frame->sf_fpstate; if (openbsd_use_fxsave) __asm__ __volatile__ ("fldcw %0" : : "m" (fpu->sv_xmm.sv_env.en_cw)); else |