Re: [Mingw-w64-public] [PATCHv2] crt: Split out the __cxa_atexit and __cxa_thread_atexit entry points to separate files

2019-12-11 Thread Martin Storsjö

On Wed, 11 Dec 2019, JonY via Mingw-w64-public wrote:


On 12/11/19 7:08 AM, Martin Storsjö wrote:

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).



Patch OK.


Thanks, pushed!

// Martin

___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


Re: [Mingw-w64-public] [PATCHv2] crt: Split out the __cxa_atexit and __cxa_thread_atexit entry points to separate files

2019-12-11 Thread JonY via Mingw-w64-public
On 12/11/19 7:08 AM, Martin Storsjö wrote:
> 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).
> 

Patch OK.



signature.asc
Description: OpenPGP digital signature
___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


[Mingw-w64-public] [PATCHv2] crt: Split out the __cxa_atexit and __cxa_thread_atexit entry points to separate files

2019-12-10 Thread Martin Storsjö
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