On Tue, Feb 23, 2016 at 5:17 AM, Steven Chamberlain <ste...@pyro.eu.org> wrote: > Hi, > > Mathieu Malaterre wrote: >> Steven Chamberlain <ste...@pyro.eu.org> wrote: >> > Gianfranco Costamagna wrote: >> >> file.c:5:38: error: ‘mcontext_t’ has no member named ‘fpregs’ >> >> uint32_t mxcsr = ucon.uc_mcontext.fpregs->mxcsr; >> > >> > FreeBSD doesn't seem to have fpregs in mcontext_t or sigcontext. >> > But I think mc_fpstate might be the same thing; but that isn't >> > implemented as a struct... >> >> Correct. Looks like other are handling it this way also >> https://github.com/fukamachi/clozure-cl/blob/master/level-1/x86-trap-support.lisp > > For future reference, I came up with this alternate implementation of > restoreControlRegs() for kFreeBSD (untested, except it builds and passes > the testsuite): > > #include <machine/npx.h> > > inline void > restoreControlRegs (const ucontext_t & ucon, bool clearExceptions) > { > struct envxmm *ex = (struct envxmm *)(ucon.uc_mcontext.mc_fpstate); > setCw ((ex->en_cw & cwRestoreMask) | cwRestoreVal); > setMxcsr (ex->en_mxcsr, clearExceptions); > }
Thanks a lot for the update. Could you send me the actual full debdiff you used. Here is what I get from fall.d.o when I use your patch: [...] IexMathFpu.cpp: In function 'void Iex_2_2::setFpExceptionHandler(Iex_2_2::FpExceptionHandler)': IexMathFpu.cpp:482:9: error: 'struct sigaction' has no member named 'sa_restorer' action.sa_restorer = 0; ^ [...]