2010-05-31 23 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內核上,我沒有找到任何方法來實現同樣的事情。