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
