libsupc++: Make the destructor parameter to `__cxa_thread_atexit()` use the `__thisca...
authorLiu Hao <lh_mouse@126.com>
Thu, 8 Oct 2020 02:26:13 +0000 (10:26 +0800)
committerJonathan Yong <10walls@gmail.com>
Sat, 7 Nov 2020 02:50:43 +0000 (02:50 +0000)
commit7fc0f78c3f43af1967cb7b1ee8f4947f3b890aa2
treee6d028bf3901580a8afc67224cbdf05936529daf
parent44cab2d8fd777450953ee1c1dfeba6f67db13869
libsupc++: Make the destructor parameter to `__cxa_thread_atexit()` use the `__thiscall` calling convention for i686-w64-mingw32

The mingw-w64 implementations of `__cxa_thread_atexit()` and `__cxa_atexit()` have been
using `__thiscall` since two years ago. Using the default calling convention (which is
`__cdecl`) causes crashes as explained in PR83562.

Calling conventions have no effect on x86_64-w64-mingw32.

Reference: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83562
Reference: https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-crt/crt/cxa_thread_atexit.c
Reference: https://sourceforge.net/p/mingw-w64/mingw-w64/ci/f3e0fbb40cbc9f8821db8bd8a0c4dae8ff671e9f/
Reference: https://github.com/msys2/MINGW-packages/issues/7071
Signed-off-by: Liu Hao <lh_mouse@126.com>
    2020-10-08  Liu Hao  <lh_mouse@126.com>

libstdc++-v3:
* libsupc++/cxxabi.h: (__cxa_atexit): mark with _GLIBCXX_CDTOR_CALLABI
(__cxa_thread_atexit): ditto
* libsupc++/atexit_thread.cc: (__cxa_atexit): mark with
_GLIBCXX_CDTOR_CALLABI
(__cxa_thread_atexit): ditto
(elt): ditto
libstdc++-v3/libsupc++/atexit_thread.cc
libstdc++-v3/libsupc++/cxxabi.h