This avoids potential conflicts with e.g. libstdc++ (which provides
__cxa_thread_atexit), if something pulls in e.g. __dso_handle or
__cxa_atexit (which libstdc++ doesn't provide).

Signed-off-by: Martin Storsjö <[email protected]>
---
 mingw-w64-crt/Makefile.am                     |   3 +-
 mingw-w64-crt/crt/cxa_atexit.c                | 164 ++----------------
 mingw-w64-crt/crt/cxa_thread_atexit.c         |  13 ++
 .../crt/{cxa_atexit.c => tls_atexit.c}        |   8 +-
 4 files changed, 32 insertions(+), 156 deletions(-)
 rewrite mingw-w64-crt/crt/cxa_atexit.c (92%)
 create mode 100644 mingw-w64-crt/crt/cxa_thread_atexit.c
 copy mingw-w64-crt/crt/{cxa_atexit.c => tls_atexit.c} (94%)

diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index d499e66b4..011692eb9 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -121,7 +121,8 @@ src_libmingw32=include/oscalls.h include/internal.h 
include/sect_attribs.h \
   crt/pseudo-reloc.c  crt/udll_argv.c      \
   crt/usermatherr.c   \
   crt/xtxtmode.c      crt/crt_handler.c    \
-  crt/tlsthrd.c       crt/tlsmthread.c     crt/tlsmcrt.c   crt/cxa_atexit.c
+  crt/tlsthrd.c       crt/tlsmthread.c     crt/tlsmcrt.c   \
+  crt/cxa_atexit.c    crt/cxa_thread_atexit.c crt/tls_atexit.c
 
 src_libscrnsave=libsrc/scrnsave.c
 src_libscrnsavw=libsrc/scrnsave.c
diff --git a/mingw-w64-crt/crt/cxa_atexit.c b/mingw-w64-crt/crt/cxa_atexit.c
dissimilarity index 92%
index 06912a826..c4b5be111 100644
--- a/mingw-w64-crt/crt/cxa_atexit.c
+++ b/mingw-w64-crt/crt/cxa_atexit.c
@@ -?,? +1,13 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+typedef void (__thiscall * dtor_fn)(void*);
+int __cxa_atexit(dtor_fn dtor, void *obj, void *dso);
+int __mingw_cxa_atexit(dtor_fn dtor, void *obj, void *dso);
+
+int __cxa_atexit(dtor_fn dtor, void *obj, void *dso) {
+  return __mingw_cxa_atexit(dtor, obj, dso);
+}
diff --git a/mingw-w64-crt/crt/cxa_thread_atexit.c 
b/mingw-w64-crt/crt/cxa_thread_atexit.c
new file mode 100644
index 000000000..0a5b8ef69
--- /dev/null
+++ b/mingw-w64-crt/crt/cxa_thread_atexit.c
@@ -0,0 +1,13 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+typedef void (__thiscall * dtor_fn)(void*);
+int __cxa_thread_atexit(dtor_fn dtor, void *obj, void *dso);
+int __mingw_cxa_thread_atexit(dtor_fn dtor, void *obj, void *dso);
+
+int __mingw_cxa_thread_atexit(dtor_fn dtor, void *obj, void *dso) {
+  return __cxa_thread_atexit(dtor, obj, dso);
+}
diff --git a/mingw-w64-crt/crt/cxa_atexit.c b/mingw-w64-crt/crt/tls_atexit.c
similarity index 94%
copy from mingw-w64-crt/crt/cxa_atexit.c
copy to mingw-w64-crt/crt/tls_atexit.c
index 06912a826..1062106de 100644
--- a/mingw-w64-crt/crt/cxa_atexit.c
+++ b/mingw-w64-crt/crt/tls_atexit.c
@@ -19,8 +19,8 @@
 
 
 typedef void (__thiscall * dtor_fn)(void*);
-int __cxa_atexit(dtor_fn dtor, void *obj, void *dso);
-int __cxa_thread_atexit(dtor_fn dtor, void *obj, void *dso);
+int __mingw_cxa_atexit(dtor_fn dtor, void *obj, void *dso);
+int __mingw_cxa_thread_atexit(dtor_fn dtor, void *obj, void *dso);
 
 typedef struct dtor_obj dtor_obj;
 struct dtor_obj {
@@ -37,7 +37,7 @@ static int inited = 0;
 static dtor_obj *global_dtors = NULL;
 static __thread dtor_obj *tls_dtors = NULL;
 
-int __cxa_atexit(dtor_fn dtor, void *obj, void *dso) {
+int __mingw_cxa_atexit(dtor_fn dtor, void *obj, void *dso) {
   if (!inited)
     return 1;
   assert(!dso || dso == &__dso_handle);
@@ -64,7 +64,7 @@ static void run_dtor_list(dtor_obj **ptr) {
   *ptr = NULL;
 }
 
-int __cxa_thread_atexit(dtor_fn dtor, void *obj, void *dso) {
+int __mingw_cxa_thread_atexit(dtor_fn dtor, void *obj, void *dso) {
   if (!inited)
     return 1;
   assert(!dso || dso == &__dso_handle);
-- 
2.17.1



_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to