From 2de5743add75ae90442e9ff47061a67ff65e76d1 Mon Sep 17 00:00:00 2001 From: Jonathan Yong <10walls@gmail.com> Date: Thu, 30 Oct 2014 17:15:02 +0800 Subject: [PATCH 17/21] __cxa-atexit for Cygwin --- gcc/config.gcc | 2 ++ libgcc/config/i386/cygming-crtbegin.c | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/gcc/config.gcc b/gcc/config.gcc index 75807f5..aa5c032 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -1655,6 +1655,7 @@ i[34567]86-*-cygwin*) fi default_use_cxa_atexit=yes use_gcc_stdint=wrap + default_use_cxa_atexit=yes ;; x86_64-*-cygwin*) need_64bit_isa=yes @@ -1964,6 +1965,7 @@ mep-*-*) with_headers=yes fi use_gcc_stdint=wrap + default_use_cxa_atexit=yes ;; microblaze*-linux*) case $target in diff --git a/libgcc/config/i386/cygming-crtbegin.c b/libgcc/config/i386/cygming-crtbegin.c index 87928e5..90904cd 100644 --- a/libgcc/config/i386/cygming-crtbegin.c +++ b/libgcc/config/i386/cygming-crtbegin.c @@ -183,7 +183,11 @@ __gcc_register_frame (void) /* If we use the __cxa_atexit method to register C++ dtors at object construction, also use atexit to register eh frame info cleanup. */ +#ifdef __CYGWIN__ + __cxa_atexit(__gcc_deregister_frame, NULL, (void *)&__dso_handle); +#else atexit(__gcc_deregister_frame); +#endif /* __CYGWIN__ */ #endif /* DEFAULT_USE_CXA_ATEXIT */ } -- 2.4.5