Commit 035b8ebb authored by Simon Marlow's avatar Simon Marlow
Browse files

Add a debug check for a non-empty FPU stack on x86 (see #4914)

parent 41147ad2
......@@ -345,6 +345,11 @@ hs_exit_(rtsBool wait_foreign)
OnExitHook();
// sanity check
#if defined(DEBUG)
checkFPUStack();
#endif
// Free the full argv storage
freeFullProgArgv();
......
......@@ -323,3 +323,18 @@ int rts_isProfiled(void)
return 0;
#endif
}
// Used for detecting a non-empty FPU stack on x86 (see #4914)
void checkFPUStack(void)
{
#ifdef x86_HOST_ARCH
static unsigned char buf[108];
asm("FSAVE %0":"=m" (buf));
if(buf[8]!=255 || buf[9]!=255) {
errorBelch("NONEMPTY FPU Stack, TAG = %x %x\n",buf[8],buf[9]);
abort();
}
#endif
}
......@@ -46,6 +46,8 @@ void printRtsInfo(void);
/* Alternate to raise(3) for threaded rts, for OpenBSD */
int genericRaise(int sig);
void checkFPUStack(void);
#include "EndPrivate.h"
#endif /* RTSUTILS_H */
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment