sagemath/sagemath-sigfpe.patch
Jerry James 87098dcde0 Add -buildroot patch and only build cython interfaces once.
Also:
- Drop LANGUAGES variable setting, now ignored by the sagemath build system.
- Drop unused SAGE_CBLAS variable from /usr/bin/sage.
- Do not force the C locale when launching sagemath.
- Allow the user to override SAGE_DEBUG in /usr/bin/sage.
- Add -ecm, -giac, and -latte patches to fix interactions with external tools.
- Add -sigfpe patch from upstream.
- Fix flask_autoindex and flask_openid imports in sagenb.
- Add Education category to the desktop file (bz 1624545).
- Fix SINGULAR_SO variable in /usr/bin/sage (bz 1636759 and 1655248).
- Invoke twistd-2 instead of twistd (bz 1640890).
- Improve jupyter integration (bz 1663165).
- Move existing jupyter integration into the notebook subpackage.
- Require python-jupyter-filesystem instead of owning its directories.
- Drop one more remnant of the F24 to F25 upgrade fixup.
2019-01-19 09:07:04 -07:00

143 lines
4.9 KiB
Diff

--- src/sage/libs/ecl.pyx.orig 2018-08-03 05:10:08.000000000 -0600
+++ src/sage/libs/ecl.pyx 2019-01-18 11:33:53.642921158 -0700
@@ -16,7 +16,7 @@ from __future__ import print_function, a
#adapted to work with pure Python types.
from libc.stdlib cimport abort
-from libc.signal cimport SIGINT, SIGBUS, SIGSEGV, SIGCHLD
+from libc.signal cimport SIGINT, SIGBUS, SIGSEGV, SIGCHLD, SIGFPE
from libc.signal cimport raise_ as signal_raise
from posix.signal cimport sigaction, sigaction_t
cimport cysignals.signals
@@ -48,9 +48,14 @@ cdef extern from "eclsig.h":
void ecl_sig_off()
cdef sigaction_t ecl_sigint_handler
cdef sigaction_t ecl_sigbus_handler
+ cdef sigaction_t ecl_sigfpe_handler
cdef sigaction_t ecl_sigsegv_handler
cdef mpz_t ecl_mpz_from_bignum(cl_object obj)
cdef cl_object ecl_bignum_from_mpz(mpz_t num)
+ cdef int fegetexcept()
+ cdef int feenableexcept(int)
+ cdef int fedisableexcept(int)
+ cdef int ecl_feflags
cdef cl_object string_to_object(char * s):
return ecl_read_from_cstring(s)
@@ -239,6 +244,7 @@ def init_ecl():
global ecl_has_booted
cdef char *argv[1]
cdef sigaction_t sage_action[32]
+ cdef int sage_fpes
cdef int i
if ecl_has_booted:
@@ -258,6 +264,8 @@ def init_ecl():
for i in range(1,32):
sigaction(i, NULL, &sage_action[i])
+ sage_fpes = fegetexcept()
+
#initialize ECL
ecl_set_option(ECL_OPT_SIGNAL_HANDLING_THREAD, 0)
cl_boot(1, argv)
@@ -265,8 +273,12 @@ def init_ecl():
#save signal handler from ECL
sigaction(SIGINT, NULL, &ecl_sigint_handler)
sigaction(SIGBUS, NULL, &ecl_sigbus_handler)
+ sigaction(SIGFPE, NULL, &ecl_sigfpe_handler)
sigaction(SIGSEGV, NULL, &ecl_sigsegv_handler)
+ #save ECL's floating point exception flags
+ ecl_feflags = fegetexcept()
+
#verify that no SIGCHLD handler was installed
cdef sigaction_t sig_test
sigaction(SIGCHLD, NULL, &sig_test)
@@ -277,6 +289,9 @@ def init_ecl():
for i in range(1,32):
sigaction(i, &sage_action[i], NULL)
+ fedisableexcept(ecl_feflags)
+ feenableexcept(sage_fpes)
+
#initialise list of objects and bind to global variable
# *SAGE-LIST-OF-OBJECTS* to make it rooted in the reachable tree for the GC
list_of_objects=cl_cons(Cnil,cl_cons(Cnil,Cnil))
--- src/sage/libs/eclsig.h.orig 2018-08-03 05:10:08.000000000 -0600
+++ src/sage/libs/eclsig.h 2019-01-18 11:33:53.642921158 -0700
@@ -9,25 +9,59 @@
#include <signal.h>
+
+/* Rummage around to determine how ECL was configured */
+#define ECL_AVOID_FPE_H /* Prevent some local includes */
+#include <ecl/config-internal.h>
+
+#ifdef HAVE_FENV_H
+#include <fenv.h>
+#ifndef FE_ALL_EXCEPT
+#define FE_ALL_EXCEPT FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INVALID
+#endif
+#else
+#ifndef FE_ALL_EXCEPT
+#define FE_ALL_EXCEPT 0
+#endif
+#endif
+
+#ifndef HAVE_FEENABLEEXCEPT
+/* These are GNU extensions */
+#define fegetexcept() 0
+#define feenablexcept(flags)
+#define fdisableexcept(flags)
+#endif
+
static struct sigaction ecl_sigint_handler;
static struct sigaction ecl_sigbus_handler;
+static struct sigaction ecl_sigfpe_handler;
static struct sigaction ecl_sigsegv_handler;
static struct sigaction sage_sigint_handler;
static struct sigaction sage_sigbus_handler;
+static struct sigaction sage_sigfpe_handler;
static struct sigaction sage_sigsegv_handler;
+static int ecl_feflags;
+static int sage_feflags;
static inline void set_ecl_signal_handler(void)
{
sigaction(SIGINT, &ecl_sigint_handler, &sage_sigint_handler);
sigaction(SIGBUS, &ecl_sigbus_handler, &sage_sigbus_handler);
+ sigaction(SIGFPE, &ecl_sigfpe_handler, &sage_sigfpe_handler);
sigaction(SIGSEGV, &ecl_sigsegv_handler, &sage_sigsegv_handler);
+ /* sage_feflags should be 0; we don't set them otherwise */
+ sage_feflags = fedisableexcept(FE_ALL_EXCEPT);
+ feenableexcept(ecl_feflags);
}
static inline void unset_ecl_signal_handler(void)
{
sigaction(SIGINT, &sage_sigint_handler, NULL);
sigaction(SIGBUS, &sage_sigbus_handler, NULL);
+ sigaction(SIGFPE, &sage_sigfpe_handler, NULL);
sigaction(SIGSEGV, &sage_sigsegv_handler, NULL);
+ ecl_feflags = fedisableexcept(FE_ALL_EXCEPT);
+ feenableexcept(sage_feflags);
}
/* This MUST be a macro because sig_on() must be in the same
--- src/sage/libs/mpmath/ext_impl.pyx.orig 2018-08-03 05:10:08.000000000 -0600
+++ src/sage/libs/mpmath/ext_impl.pyx 2019-01-18 11:33:53.643921141 -0700
@@ -164,9 +164,9 @@ opts_double_precision.rounding = ROUND_N
opts_mini_prec.prec = 5
opts_mini_prec.rounding = ROUND_D
-cdef double _double_inf = float("1e300") * float("1e300")
-cdef double _double_ninf = -_double_inf
-cdef double _double_nan = _double_inf - _double_inf
+cdef double _double_inf = float("inf")
+cdef double _double_ninf = float("-inf")
+cdef double _double_nan = float("nan")
cdef inline void MPF_init(MPF *x):
"""Allocate space and set value to zero.