aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2011-12-12 17:34:19 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2011-12-12 17:34:19 +0000
commit60f3dad78ddb531ee3d2f6ef522ea8c0763aed47 (patch)
treea584bd100b0e0b16b30cfe4412bd40c3752cd24e
parent7252b079fc845799699196473b008d856ae630b6 (diff)
downloadgcc-60f3dad78ddb531ee3d2f6ef522ea8c0763aed47.zip
gcc-60f3dad78ddb531ee3d2f6ef522ea8c0763aed47.tar.gz
gcc-60f3dad78ddb531ee3d2f6ef522ea8c0763aed47.tar.bz2
revert: re PR target/51135 (SIGSEGV during exception cleanup on win32)
2011-12-12 Paolo Carlini <paolo.carlini@oracle.com> Revert: 2011-12-12 Kai Tietz <ktietz@redhat.com> PR libstdc++/51135 * libsupc++/cxxabi.h (__cxa_dtor_type): New type. (__cxa_throw): Use it for destructor-argument. * libsupc++/eh_throw.cc (__cxa_throw): Likewise. * libsupc++/unwind-cxx.h (__cxa_exception): Change type of member exceptionDestructor to __cxa_dtor_type. * config/os/mingw32-w64/os_defines.h (_GLIBCXX_USE_THISCALL_ON_DTOR): Define. (__cxa_dtor_type): Declare target secific type variant. * config/os/mingw32/os_defines.h: Likewise. From-SVN: r182250
-rw-r--r--libstdc++-v3/ChangeLog14
-rw-r--r--libstdc++-v3/config/os/mingw32-w64/os_defines.h8
-rw-r--r--libstdc++-v3/config/os/mingw32/os_defines.h8
-rw-r--r--libstdc++-v3/libsupc++/cxxabi.h6
-rw-r--r--libstdc++-v3/libsupc++/eh_throw.cc2
-rw-r--r--libstdc++-v3/libsupc++/unwind-cxx.h2
6 files changed, 16 insertions, 24 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 90fd704..8a46f1c 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,6 +1,18 @@
2011-12-12 Paolo Carlini <paolo.carlini@oracle.com>
- * Revert the last commit.
+ Revert:
+ 2011-12-12 Kai Tietz <ktietz@redhat.com>
+
+ PR libstdc++/51135
+ * libsupc++/cxxabi.h (__cxa_dtor_type): New type.
+ (__cxa_throw): Use it for destructor-argument.
+ * libsupc++/eh_throw.cc (__cxa_throw): Likewise.
+ * libsupc++/unwind-cxx.h (__cxa_exception): Change type of member
+ exceptionDestructor to __cxa_dtor_type.
+ * config/os/mingw32-w64/os_defines.h (_GLIBCXX_USE_THISCALL_ON_DTOR):
+ Define.
+ (__cxa_dtor_type): Declare target secific type variant.
+ * config/os/mingw32/os_defines.h: Likewise.
2011-12-12 Kai Tietz <ktietz@redhat.com>
diff --git a/libstdc++-v3/config/os/mingw32-w64/os_defines.h b/libstdc++-v3/config/os/mingw32-w64/os_defines.h
index b612d06..160c1ff 100644
--- a/libstdc++-v3/config/os/mingw32-w64/os_defines.h
+++ b/libstdc++-v3/config/os/mingw32-w64/os_defines.h
@@ -65,12 +65,4 @@
// ioctlsocket function doesn't work for normal file-descriptors.
#define _GLIBCXX_NO_IOCTL 1
-// See libstdc++/51135
-// Class constructors/destructors have __thiscall calling-convention
-// for IA 32-bit target.
-#if defined (__i386__)
-#define _GLIBCXX_USE_THISCALL_ON_DTOR 1
-typedef void (__thiscall *__cxa_dtor_type) (void *);
-#endif
-
#endif
diff --git a/libstdc++-v3/config/os/mingw32/os_defines.h b/libstdc++-v3/config/os/mingw32/os_defines.h
index b612d06..160c1ff 100644
--- a/libstdc++-v3/config/os/mingw32/os_defines.h
+++ b/libstdc++-v3/config/os/mingw32/os_defines.h
@@ -65,12 +65,4 @@
// ioctlsocket function doesn't work for normal file-descriptors.
#define _GLIBCXX_NO_IOCTL 1
-// See libstdc++/51135
-// Class constructors/destructors have __thiscall calling-convention
-// for IA 32-bit target.
-#if defined (__i386__)
-#define _GLIBCXX_USE_THISCALL_ON_DTOR 1
-typedef void (__thiscall *__cxa_dtor_type) (void *);
-#endif
-
#endif
diff --git a/libstdc++-v3/libsupc++/cxxabi.h b/libstdc++-v3/libsupc++/cxxabi.h
index 7ed5c55..aeaf4cc 100644
--- a/libstdc++-v3/libsupc++/cxxabi.h
+++ b/libstdc++-v3/libsupc++/cxxabi.h
@@ -51,10 +51,6 @@
#include <bits/cxxabi_tweaks.h>
#include <bits/cxxabi_forced.h>
-#ifndef _GLIBCXX_USE_THISCALL_ON_DTOR
-typedef void (*__cxa_dtor_type) (void *);
-#endif
-
#ifdef __cplusplus
namespace __cxxabiv1
{
@@ -600,7 +596,7 @@ namespace __cxxabiv1
// Throw the exception.
void
- __cxa_throw(void*, std::type_info*, __cxa_dtor_type)
+ __cxa_throw(void*, std::type_info*, void (*) (void *))
__attribute__((__noreturn__));
// Used to implement exception handlers.
diff --git a/libstdc++-v3/libsupc++/eh_throw.cc b/libstdc++-v3/libsupc++/eh_throw.cc
index 0791f1a..0e7083c 100644
--- a/libstdc++-v3/libsupc++/eh_throw.cc
+++ b/libstdc++-v3/libsupc++/eh_throw.cc
@@ -59,7 +59,7 @@ __gxx_exception_cleanup (_Unwind_Reason_Code code, _Unwind_Exception *exc)
extern "C" void
__cxxabiv1::__cxa_throw (void *obj, std::type_info *tinfo,
- __cxa_dtor_type dest)
+ void (*dest) (void *))
{
// Definitely a primary.
__cxa_refcounted_exception *header
diff --git a/libstdc++-v3/libsupc++/unwind-cxx.h b/libstdc++-v3/libsupc++/unwind-cxx.h
index b9919ce..3ce32e9 100644
--- a/libstdc++-v3/libsupc++/unwind-cxx.h
+++ b/libstdc++-v3/libsupc++/unwind-cxx.h
@@ -51,7 +51,7 @@ struct __cxa_exception
{
// Manage the exception object itself.
std::type_info *exceptionType;
- __cxa_dtor_type exceptionDestructor;
+ void (*exceptionDestructor)(void *);
// The C++ standard has entertaining rules wrt calling set_terminate
// and set_unexpected in the middle of the exception cleanup process.