Commit f5c48b80 by Kai Tietz Committed by Kai Tietz

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.

From-SVN: r182237
parent b913199e
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> 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, * doc/xml/manual/abi.xml: Replace gcc-x.y.z with GCC x.y.z or x.y,
......
// Specific definitions for generic platforms -*- C++ -*- // Specific definitions for generic platforms -*- C++ -*-
// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, // 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 // 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 // software; you can redistribute it and/or modify it under the
...@@ -65,4 +65,12 @@ ...@@ -65,4 +65,12 @@
// ioctlsocket function doesn't work for normal file-descriptors. // ioctlsocket function doesn't work for normal file-descriptors.
#define _GLIBCXX_NO_IOCTL 1 #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 #endif
// Specific definitions for generic platforms -*- C++ -*- // Specific definitions for generic platforms -*- C++ -*-
// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, // 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 // 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 // software; you can redistribute it and/or modify it under the
...@@ -65,4 +65,12 @@ ...@@ -65,4 +65,12 @@
// ioctlsocket function doesn't work for normal file-descriptors. // ioctlsocket function doesn't work for normal file-descriptors.
#define _GLIBCXX_NO_IOCTL 1 #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 #endif
...@@ -51,6 +51,10 @@ ...@@ -51,6 +51,10 @@
#include <bits/cxxabi_tweaks.h> #include <bits/cxxabi_tweaks.h>
#include <bits/cxxabi_forced.h> #include <bits/cxxabi_forced.h>
#ifndef _GLIBCXX_USE_THISCALL_ON_DTOR
typedef void (*__cxa_dtor_type) (void *);
#endif
#ifdef __cplusplus #ifdef __cplusplus
namespace __cxxabiv1 namespace __cxxabiv1
{ {
...@@ -596,7 +600,7 @@ namespace __cxxabiv1 ...@@ -596,7 +600,7 @@ namespace __cxxabiv1
// Throw the exception. // Throw the exception.
void void
__cxa_throw(void*, std::type_info*, void (*) (void *)) __cxa_throw(void*, std::type_info*, __cxa_dtor_type)
__attribute__((__noreturn__)); __attribute__((__noreturn__));
// Used to implement exception handlers. // Used to implement exception handlers.
......
// -*- C++ -*- Exception handling routines for throwing. // -*- C++ -*- Exception handling routines for throwing.
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
// Free Software Foundation, Inc. // 2011 Free Software Foundation, Inc.
// //
// This file is part of GCC. // This file is part of GCC.
// //
...@@ -58,8 +58,8 @@ __gxx_exception_cleanup (_Unwind_Reason_Code code, _Unwind_Exception *exc) ...@@ -58,8 +58,8 @@ __gxx_exception_cleanup (_Unwind_Reason_Code code, _Unwind_Exception *exc)
extern "C" void extern "C" void
__cxxabiv1::__cxa_throw (void *obj, std::type_info *tinfo, __cxxabiv1::__cxa_throw (void *obj, std::type_info *tinfo,
void (*dest) (void *)) __cxa_dtor_type dest)
{ {
// Definitely a primary. // Definitely a primary.
__cxa_refcounted_exception *header __cxa_refcounted_exception *header
......
// -*- C++ -*- Exception handling and frame unwind runtime interface routines. // -*- C++ -*- Exception handling and frame unwind runtime interface routines.
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
// Free Software Foundation, Inc. // 2011 Free Software Foundation, Inc.
// //
// This file is part of GCC. // This file is part of GCC.
// //
...@@ -51,7 +51,7 @@ struct __cxa_exception ...@@ -51,7 +51,7 @@ struct __cxa_exception
{ {
// Manage the exception object itself. // Manage the exception object itself.
std::type_info *exceptionType; std::type_info *exceptionType;
void (*exceptionDestructor)(void *); __cxa_dtor_type exceptionDestructor;
// The C++ standard has entertaining rules wrt calling set_terminate // The C++ standard has entertaining rules wrt calling set_terminate
// and set_unexpected in the middle of the exception cleanup process. // and set_unexpected in the middle of the exception cleanup process.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment