如何更改信号处理程序中的FPU上下文(C ++ / Linux)

我写了一个信号处理程序来捕获FPE错误。 即使发生这种情况,我也需要继续执行。 我收到一个ucontext_t作为参数,我可以将坏操作数从0更改为另一个值,但FPU上下文仍然不好,我跑到一个无限循环?

有人已经在Linux上创build了ucontext_t结构吗?

我终于find了处理这些情况的方法,通过像这样清除ucontext_t的状态标志:

... const long int cFPUStatusFlag = 0x3F; aContext->uc_mcontext.fpregs->sw &= ~cFPUStatusFlag; ... 

在FPU(x87)的状态寄存器的6位中,0x3F无效。 这样做意味着在计算之后检查FPEexception。

在64位的linux内核上,我没有找到任何方法来实现同样的事情。