2010-05-31 26 views
3

我写了一个信号处理程序来捕获FPE错误。即使发生这种情况,我也需要继续执行。我收到一个ucontext_t作为参数,我可以将不良操作数从0更改为另一个值,但FPU上下文仍然不正确,我会遇到无限循环?如何更改信号处理程序(C++/Linux)中的FPU上下文

有人已经在Linux上处理了ucontext_t结构吗?

我终于找到了一种方法通过清除ucontext_t的状态标志像这样来处理这些情况:

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

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

回答

0

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