Как изменить контекст FPU в обработчике сигналов (C ++ / Linux) - PullRequest
3 голосов
/ 31 мая 2010

Я написал обработчик сигнала для отлова ошибок FPE. Мне нужно продолжить исполнение, даже если это произойдет. Я получаю ucontext_t в качестве параметра, я могу изменить неверный операнд с 0 на другое значение, но контекст FPU все еще плох, и я попадаю в бесконечный цикл?

Кто-то уже манипулирует структурой ucontext_t в Linux?

Я наконец нашел способ справиться с этими ситуациями, очистив флаг состояния ucontext_t следующим образом:

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

0x3F отрицается, чтобы поместить 0 в 6 битов регистра состояния FPU (x87). Это подразумевает проверку исключений FPE после расчета.

1 Ответ

0 голосов
/ 21 июля 2016

На 64-битном ядре Linux я не нашел способа добиться того же.

...