J'ai écrit un gestionnaire de signaux pour capturer les erreurs FPE. J'ai besoin de continuer l'exécution même si cela se produit. Je reçois un ucontext_t en paramètre, je peux changer le mauvais opérande de 0 à une autre valeur, mais le contexte FPU est toujours mauvais et je me retrouve dans une boucle infinie ?
Quelqu'un a-t-il déjà manipulé la structure ucontext_t sous Linux ?
J'ai finalement trouvé un moyen de gérer ces situations en effaçant le drapeau d'état de ucontext_t comme suit :
...
const long int cFPUStatusFlag = 0x3F;
aContext->uc_mcontext.fpregs->sw &= ~cFPUStatusFlag;
...
0x3F est désactivé pour mettre 0 dans les 6 bits du registre d'état de la FPU (x87). Cela implique de vérifier les exceptions FPE après le calcul.