OSDN Git Service

PR libstdc++/511135
authorktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 12 Dec 2011 13:24:30 +0000 (13:24 +0000)
committerktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 12 Dec 2011 13:24:30 +0000 (13:24 +0000)
* libsupc++/cxxabi.h (__cxxabi_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 __cxxabi_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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@182237 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/config/os/mingw32-w64/os_defines.h
libstdc++-v3/config/os/mingw32/os_defines.h
libstdc++-v3/libsupc++/cxxabi.h
libstdc++-v3/libsupc++/eh_throw.cc
libstdc++-v3/libsupc++/unwind-cxx.h

index 72dfa7c..bf5afcd 100644 (file)
@@ -1,3 +1,16 @@
+2011-12-12  Kai Tietz  <ktietz@redhat.com>
+
+       PR libstdc++/511135
+       * libsupc++/cxxabi.h (__cxxabi_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 __cxxabi_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-11  Jonathan Wakely  <jwakely.gcc@gmail.com>
 
        * doc/xml/manual/abi.xml: Replace gcc-x.y.z with GCC x.y.z or x.y,
index c483a92..b612d06 100644 (file)
@@ -1,7 +1,7 @@
 // Specific definitions for generic platforms  -*- C++ -*-
 
 // Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
-// 2009, 2010  Free Software Foundation, Inc.
+// 2009, 2010, 2011  Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 // 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
index c483a92..b612d06 100644 (file)
@@ -1,7 +1,7 @@
 // Specific definitions for generic platforms  -*- C++ -*-
 
 // Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
-// 2009, 2010  Free Software Foundation, Inc.
+// 2009, 2010, 2011  Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
 // 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
index e78f551..7ed5c55 100644 (file)
 #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
 {
@@ -596,7 +600,7 @@ namespace __cxxabiv1
 
   // Throw the exception.
   void
-  __cxa_throw(void*, std::type_info*, void (*) (void *)) 
+  __cxa_throw(void*, std::type_info*, __cxa_dtor_type)
   __attribute__((__noreturn__));
 
   // Used to implement exception handlers.
index 728c5cc..0791f1a 100644 (file)
@@ -1,6 +1,6 @@
 // -*- C++ -*- Exception handling routines for throwing.
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-// Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+// 2011  Free Software Foundation, Inc.
 //
 // This file is part of GCC.
 //
@@ -58,8 +58,8 @@ __gxx_exception_cleanup (_Unwind_Reason_Code code, _Unwind_Exception *exc)
 
 
 extern "C" void
-__cxxabiv1::__cxa_throw (void *obj, std::type_info *tinfo, 
-                        void (*dest) (void *))
+__cxxabiv1::__cxa_throw (void *obj, std::type_info *tinfo,
+                        __cxa_dtor_type dest)
 {
   // Definitely a primary.
   __cxa_refcounted_exception *header
index e538bde..b9919ce 100644 (file)
@@ -1,6 +1,6 @@
 // -*- C++ -*- Exception handling and frame unwind runtime interface routines.
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
-// Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+// 2011  Free Software Foundation, Inc.
 //
 // This file is part of GCC.
 //
@@ -51,7 +51,7 @@ struct __cxa_exception
 {
   // Manage the exception object itself.
   std::type_info *exceptionType;
-  void (*exceptionDestructor)(void *)
+  __cxa_dtor_type exceptionDestructor
 
   // The C++ standard has entertaining rules wrt calling set_terminate
   // and set_unexpected in the middle of the exception cleanup process.