[PATCH 06/11] cxx.cc: Fix dynamic initialization for static local variables

Corinna Vinschen corinna-cygwin@cygwin.com
Mon Jan 18 11:33:00 GMT 2021


On Jan 15 14:45, Ben Wijen wrote:
> The old implementation for __cxa_guard_acquire did not return 1,
> therefore dynamic initialization was never performed.
> 
> If concurrent-safe dynamic initialisation is ever needed, CXX ABI
> must be followed when re-implementing __cxa_guard_acquire (et al.)
> ---
>  winsup/cygwin/Makefile.in |  2 +-
>  winsup/cygwin/cxx.cc      | 10 ----------
>  2 files changed, 1 insertion(+), 11 deletions(-)
> 
> diff --git a/winsup/cygwin/Makefile.in b/winsup/cygwin/Makefile.in
> index a840f2b83..73d9b37fd 100644
> --- a/winsup/cygwin/Makefile.in
> +++ b/winsup/cygwin/Makefile.in
> @@ -69,7 +69,7 @@ COMMON_CFLAGS=-MMD ${$(*F)_CFLAGS} -Wimplicit-fallthrough=5 -Werror -fmerge-cons
>  ifeq ($(target_cpu),x86_64)
>  COMMON_CFLAGS+=-mcmodel=small
>  endif
> -COMPILE.cc+=${COMMON_CFLAGS} # -std=gnu++14
> +COMPILE.cc+=${COMMON_CFLAGS} -fno-threadsafe-statics # -std=gnu++14
>  COMPILE.c+=${COMMON_CFLAGS}
>  
>  AR:=@AR@
> diff --git a/winsup/cygwin/cxx.cc b/winsup/cygwin/cxx.cc
> index be3268549..b69524aca 100644
> --- a/winsup/cygwin/cxx.cc
> +++ b/winsup/cygwin/cxx.cc
> @@ -83,16 +83,6 @@ __cxa_pure_virtual (void)
>    api_fatal ("pure virtual method called");
>  }
>  
> -extern "C" void
> -__cxa_guard_acquire ()
> -{
> -}
> -
> -extern "C" void
> -__cxa_guard_release ()
> -{
> -}
> -
>  /* These routines are made available as last-resort fallbacks
>     for the application.  Should not be used in practice; the
>     entries in this struct get overwritten by each DLL as it
> -- 
> 2.29.2

Pushed.


Thanks,
Corinna


More information about the Cygwin-patches mailing list