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

时间:2010-05-31 09:12:34

标签: linux signal-handling fpu

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

有人已经在Linux上使用了ucontext_t结构吗?

我终于通过清除ucontext_t的状态标志找到了处理这些情况的方法,如下所示:

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

0x3F被否定为将FPU(x87)的状态寄存器的6位置为0。这样做意味着在计算后检查FPE异常。

1 个答案:

答案 0 :(得分:0)

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