Add a debug check for a non-empty FPU stack on x86 (see #4914)
[ghc-hetmet.git] / rts / RtsUtils.c
index 3df688f..8ef6c0d 100644 (file)
@@ -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
+}
+