[patch PR libstdc++/51135]: Fix [4.7 Regression] SIGSEGV during exception cleanup on win32
Jonathan Wakely
jwakely.gcc@gmail.com
Thu Dec 8 20:22:00 GMT 2011
On Dec 8, 2011 7:16 PM, "Kai Tietz" wrote:
>
> * unwind-cxx.h (__cxa_exception): Use for member
> exceptionDestructor the _GLIBCXX_DESTRUCTOR_CALLCONVENTION macro.
I think "Use the _GLIBCXX_DESTRUCTOR_CALLCONVENTION macro for the
exceptionDestructor member" would make more sense.
However ...
> Index: gcc/libstdc++-v3/libsupc++/cxxabi.h
> ===================================================================
> --- gcc.orig/libstdc++-v3/libsupc++/cxxabi.h
> +++ gcc/libstdc++-v3/libsupc++/cxxabi.h
> @@ -51,6 +51,16 @@
> #include <bits/cxxabi_tweaks.h>
> #include <bits/cxxabi_forced.h>
>
> +// On 32-bit IA native windows target is the used calling-convention
> +// for class-member-functions of kind __thiscall. As destructor is
> +// also of kind class-member-function, we need to specify for this
> +// target proper calling-convention on destructor-function-pointer.
> +#if defined (__MINGW32__) && defined (__i386__)
> +#define _GLIBCXX_DESTRUCTOR_CALLCONVENTION __thiscall
> +#else
> +#define _GLIBCXX_DESTRUCTOR_CALLCONVENTION
> +#endif
Could you define a typedef for void(*)(void*) and adapt that for
mingw32 instead of using the macro everywhere?
#if defined (__MINGW32__) && defined (__i386__)
typedef void (__thiscall *__cxxabi_dtor_type)(void*);
#else
typedef void (*__cxxabi_dtor_type)(void*);
#endif
(That would be my preference, but the maintainers of that code might disagree.)
More information about the Libstdc++
mailing list