Skip to content

Commit 403bc25

Browse files
committed
Make MXCSR editable by signal handlers on Windows
It's now possible to recover from floating point exception traps.
1 parent 3bcd40b commit 403bc25

File tree

1 file changed

+2
-0
lines changed

1 file changed

+2
-0
lines changed

libc/intrin/ntcontext2linux.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ textwindows void _ntcontext2linux(ucontext_t *ctx, const struct NtContext *cr) {
4848
ctx->uc_mcontext.fs = cr->SegFs;
4949
ctx->uc_mcontext.fpregs = &ctx->__fpustate;
5050
__repmovsb(&ctx->__fpustate, &cr->FltSave, sizeof(ctx->__fpustate));
51+
ctx->__fpustate.mxcsr = cr->MxCsr;
5152
}
5253

5354
textwindows void _ntlinux2context(struct NtContext *cr, const ucontext_t *ctx) {
@@ -74,6 +75,7 @@ textwindows void _ntlinux2context(struct NtContext *cr, const ucontext_t *ctx) {
7475
cr->SegCs = ctx->uc_mcontext.cs;
7576
cr->SegGs = ctx->uc_mcontext.gs;
7677
cr->SegFs = ctx->uc_mcontext.fs;
78+
cr->MxCsr = ctx->__fpustate.mxcsr;
7779
__repmovsb(&cr->FltSave, &ctx->__fpustate, sizeof(ctx->__fpustate));
7880
}
7981

0 commit comments

Comments
 (0)