From cc19109af966331f76cc8b6fd7c92eec36dc2276 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Wed, 24 Mar 2021 11:06:58 +0100 Subject: [PATCH] Cygwin: don't export _feinitialise from newlib Use the more official fesetenv(FE_DFL_ENV) from _dll_crt0, thus allowing to drop the _feinitialise declaration from fenv.h. Provide a no-op _feinitialise in Cygwin as exportable symbol for really old applications when _feinitialise was called from mainCRTStartup in crt0.o. Signed-off-by: Corinna Vinschen --- newlib/libc/machine/shared_x86/sys/fenv.h | 5 ----- newlib/libm/machine/shared_x86/fenv.c | 7 +------ winsup/cygwin/Makefile.in | 1 + winsup/cygwin/dcrt0.cc | 2 +- winsup/cygwin/fenv.c | 5 +++++ 5 files changed, 8 insertions(+), 12 deletions(-) create mode 100644 winsup/cygwin/fenv.c diff --git a/newlib/libc/machine/shared_x86/sys/fenv.h b/newlib/libc/machine/shared_x86/sys/fenv.h index e0408fe5b..243cac27a 100644 --- a/newlib/libc/machine/shared_x86/sys/fenv.h +++ b/newlib/libc/machine/shared_x86/sys/fenv.h @@ -170,11 +170,6 @@ int fegetprec (void); int fesetprec (int __prec); #endif -#ifdef __INSIDE_CYGWIN__ -/* Cygwin-internal ONLY. */ -extern void _feinitialise (); -#endif - #endif /* __CYGWIN__ */ #ifdef __cplusplus diff --git a/newlib/libm/machine/shared_x86/fenv.c b/newlib/libm/machine/shared_x86/fenv.c index 8d1f1ad7f..ccc08e2d8 100644 --- a/newlib/libm/machine/shared_x86/fenv.c +++ b/newlib/libm/machine/shared_x86/fenv.c @@ -63,10 +63,8 @@ static inline bool use_sse(void) return false; } -#ifndef __CYGWIN__ /* forward declaration */ static void _feinitialise (void); -#endif /* This function enables traps for each of the exceptions as indicated by the parameter except. The individual exceptions are described in @@ -451,10 +449,7 @@ fesetprec (int prec) #endif /* Set up the FPU and SSE environment at the start of execution. */ -#ifndef __CYGWIN__ -static -#endif -void +static void _feinitialise (void) { extern fenv_t __fe_dfl_env; diff --git a/winsup/cygwin/Makefile.in b/winsup/cygwin/Makefile.in index ff6798867..73d9b37fd 100644 --- a/winsup/cygwin/Makefile.in +++ b/winsup/cygwin/Makefile.in @@ -288,6 +288,7 @@ DLL_OFILES:= \ exec.o \ external.o \ fcntl.o \ + fenv.o \ fhandler.o \ fhandler_clipboard.o \ fhandler_console.o \ diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc index 810017956..d4a08d18b 100644 --- a/winsup/cygwin/dcrt0.cc +++ b/winsup/cygwin/dcrt0.cc @@ -1085,7 +1085,7 @@ _dll_crt0 () fork_info->alloc_stack (); #endif - _feinitialise (); + fesetenv (FE_DFL_ENV); _main_tls = &_my_tls; _main_tls->call ((DWORD (*) (void *, void *)) dll_crt0_1, NULL); } diff --git a/winsup/cygwin/fenv.c b/winsup/cygwin/fenv.c new file mode 100644 index 000000000..80f7cc52c --- /dev/null +++ b/winsup/cygwin/fenv.c @@ -0,0 +1,5 @@ +/* no-op function as entry point for applications built between + 2010-09-11 and 2011-03-16. That's the timeframe of _feinitialise + being called from mainCRTStartup in crt0.o. */ +void _feinitialise (void) +{} -- 2.43.5