From be31bff11d59e737566c6de81d645c2d0d207c5e Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Mon, 16 Nov 2020 09:09:18 +0100 Subject: [PATCH] Revert "Export `fenv` functions on all platforms (#213)" The implementation of `fesetenv` cannot be portable, as the value of `FE_DFL_ENV` differs between platforms. On FreeBSD, it is a actual environment. With glibc however, it's a sentinel -1 handled in the implementation of its floating point functions. With openlibm based on FreeBSD's libm, it assumes `FE_DFL_ENV` to be an actual environment. That assumption breaks using code that was compiled against glibc, e.g., `libcuda`: ``` Thread 1 "julia-debug" received signal SIGSEGV, Segmentation fault. 0x00007ffff7b855d0 in fesetenv () from /home/tim/Julia/julia/build/release/usr/bin/../lib/libopenlibm.so (gdb) bt ``` This reverts commit 5a27b4c0c0a5befc2b7622ff8517743963c1f1d2. Fixes https://github.com/JuliaLang/julia/issues/38427. --- amd64/fenv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amd64/fenv.c b/amd64/fenv.c index 173d4ce..ddf7dba 100644 --- a/amd64/fenv.c +++ b/amd64/fenv.c @@ -29,7 +29,7 @@ #include "bsd_fpu.h" #include "math_private.h" -#ifndef OPENLIBM_USE_HOST_FENV_H +#ifdef _WIN32 #define __fenv_static OLM_DLLEXPORT #endif #include