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

如何在信号处理程序(C+;+;/Linux)中更改FPU上下文,linux,signal-handling,fpu,Linux,Signal Handling,Fpu,我编写了一个信号处理程序来捕获FPE错误。即使发生这种情况,我也需要继续执行。我收到一个ucontext_t作为参数,我可以将坏操作数从0更改为另一个值,但FPU上下文仍然坏,并且我运行到一个无限循环 是否有人已经在Linux上手动操作ucontext\t结构 我最终找到了一种处理这些情况的方法,方法是清除ucontext的状态标志,如下所示: ... const long int cFPUStatusFlag = 0x3F; aContext->uc_mcontext.fpregs-&g

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

是否有人已经在Linux上手动操作ucontext\t结构

我最终找到了一种处理这些情况的方法,方法是清除ucontext的状态标志,如下所示:

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

0x3F取反,将0放入FPU(x87)状态寄存器的6位。这样做意味着在计算后检查FPE异常。

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