Commit 4643bd9a authored by Tim Peters's avatar Tim Peters

Apparently FreeBSD enables some HW floating-point exceptions by default.

This can cause core dumps when Python runs.  Python relies on the 754-
(and C99-) mandated default "non-stop" mode for FP exceptions.  This
patch from Ben Laurie disables at least one FP exception on FreeBSD at
Python startup time.
parent 5b26abb3
......@@ -255,10 +255,15 @@ extern "C" {
* if the returned result is a NaN, or if a C89 box returns HUGE_VAL
* in non-overflow cases.
* X is evaluated more than once.
* Some platforms have better way to spell this, so expect some #ifdef'ery.
*/
#ifdef __FreeBSD__
#define Py_OVERFLOWED(X) isinf(X)
#else
#define Py_OVERFLOWED(X) ((X) != 0.0 && (errno == ERANGE || \
(X) == Py_HUGE_VAL || \
(X) == -Py_HUGE_VAL))
#endif
/* Py_SET_ERANGE_ON_OVERFLOW(x)
* If a libm function did not set errno, but it looks like the result
......
......@@ -303,6 +303,7 @@ Cameron Laird
Detlef Lannert
Soren Larsen
Piers Lauder
Ben Laurie
Chris Lawrence
Christopher Lee
Inyeol Lee
......
......@@ -2,8 +2,23 @@
#include "Python.h"
#ifdef __FreeBSD__
#include <floatingpoint.h>
#endif
int
main(int argc, char **argv)
{
/* 754 requires that FP exceptions run in "no stop" mode by default,
* and until C vendors implement C99's ways to control FP exceptions,
* Python requires non-stop mode. Alas, some platforms enable FP
* exceptions by default. Here we disable them.
*/
#ifdef __FreeBSD__
fp_except_t m;
m = fpgetmask();
fpsetmask(m & ~FP_X_OFL);
#endif
return Py_Main(argc, argv);
}
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