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ö
---
Fixed the __cxa_thread_atexit case which was the wrong way before.
---
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.ccrt/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 0..3078c2444
--- /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 __cxa_thread_atexit(dtor_fn dtor, void *obj, void *dso) {
+ return __mingw_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
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public