summaryrefslogtreecommitdiffstats
path: root/0007-Cygwin-__cxa-atexit.patch
blob: 6933294e24832fb368cf039df8a34ac0d8c2b43c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
From e83f365cde50e5566b270efd9b69ddc6eb900979 Mon Sep 17 00:00:00 2001
From: Jonathan Yong <10walls@gmail.com>
Date: Thu, 30 Oct 2014 17:15:02 +0800
Subject: [PATCH 07/11] Cygwin: __cxa-atexit

---
 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 357b0bed067..d67edad6df3 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -2130,6 +2130,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
@@ -2744,6 +2745,7 @@ mipstx39-*-elf* | mipstx39el-*-elf*)
 mmix-knuth-mmixware)
 	tm_file="${tm_file} newlib-stdint.h"
 	use_gcc_stdint=wrap
+	default_use_cxa_atexit=yes
 	;;
 mn10300-*-*)
 	tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
diff --git a/libgcc/config/i386/cygming-crtbegin.c b/libgcc/config/i386/cygming-crtbegin.c
index a89dfedca76..76fd3907ec5 100644
--- a/libgcc/config/i386/cygming-crtbegin.c
+++ b/libgcc/config/i386/cygming-crtbegin.c
@@ -145,7 +145,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.31.1