diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 0f5b58b2afb..a1e6e306cdb 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2007-05-04 Mark Mitchell + + * libsupc++/atexit_arm.cc: New file. + * libsupc++/vec.cc (__aeabi_atexit): Remove. + * libsupc++/cxxabi.h (__cxa_atexit): Add exception specification. + * libsupc++/Makefile.am: Add atexit_arm.cc. + * libsupc++/Makefile.in: Regenerated. + 2007-05-04 Paolo Carlini * include/bits/stl_construct.h (_Destroy(_ForwardIterator, diff --git a/libstdc++-v3/libsupc++/Makefile.am b/libstdc++-v3/libsupc++/Makefile.am index a30115e8713..7bc48b7c9b4 100644 --- a/libstdc++-v3/libsupc++/Makefile.am +++ b/libstdc++-v3/libsupc++/Makefile.am @@ -42,6 +42,7 @@ endif sources = \ array_type_info.cc \ + atexit_arm.cc \ bad_cast.cc \ bad_typeid.cc \ class_type_info.cc \ diff --git a/libstdc++-v3/libsupc++/Makefile.in b/libstdc++-v3/libsupc++/Makefile.in index 8a27bec7a4f..68631271403 100644 --- a/libstdc++-v3/libsupc++/Makefile.in +++ b/libstdc++-v3/libsupc++/Makefile.in @@ -69,21 +69,21 @@ am__installdirs = "$(DESTDIR)$(toolexeclibdir)" \ toolexeclibLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(noinst_LTLIBRARIES) $(toolexeclib_LTLIBRARIES) libsupc___la_LIBADD = -am__libsupc___la_SOURCES_DIST = array_type_info.cc bad_cast.cc \ - bad_typeid.cc class_type_info.cc del_op.cc del_opnt.cc \ - del_opv.cc del_opvnt.cc dyncast.cc eh_alloc.cc eh_arm.cc \ - eh_aux_runtime.cc eh_call.cc eh_catch.cc eh_exception.cc \ - eh_globals.cc eh_personality.cc eh_term_handler.cc \ - eh_terminate.cc eh_throw.cc eh_type.cc eh_unex_handler.cc \ - enum_type_info.cc function_type_info.cc \ +am__libsupc___la_SOURCES_DIST = array_type_info.cc atexit_arm.cc \ + bad_cast.cc bad_typeid.cc class_type_info.cc del_op.cc \ + del_opnt.cc del_opv.cc del_opvnt.cc dyncast.cc eh_alloc.cc \ + eh_arm.cc eh_aux_runtime.cc eh_call.cc eh_catch.cc \ + eh_exception.cc eh_globals.cc eh_personality.cc \ + eh_term_handler.cc eh_terminate.cc eh_throw.cc eh_type.cc \ + eh_unex_handler.cc enum_type_info.cc function_type_info.cc \ fundamental_type_info.cc guard.cc new_handler.cc new_op.cc \ new_opnt.cc new_opv.cc new_opvnt.cc pbase_type_info.cc \ pmem_type_info.cc pointer_type_info.cc pure.cc \ si_class_type_info.cc tinfo.cc tinfo2.cc vec.cc \ vmi_class_type_info.cc vterminate.cc cp-demangle.c -am__objects_1 = array_type_info.lo bad_cast.lo bad_typeid.lo \ - class_type_info.lo del_op.lo del_opnt.lo del_opv.lo \ - del_opvnt.lo dyncast.lo eh_alloc.lo eh_arm.lo \ +am__objects_1 = array_type_info.lo atexit_arm.lo bad_cast.lo \ + bad_typeid.lo class_type_info.lo del_op.lo del_opnt.lo \ + del_opv.lo del_opvnt.lo dyncast.lo eh_alloc.lo eh_arm.lo \ eh_aux_runtime.lo eh_call.lo eh_catch.lo eh_exception.lo \ eh_globals.lo eh_personality.lo eh_term_handler.lo \ eh_terminate.lo eh_throw.lo eh_type.lo eh_unex_handler.lo \ @@ -98,9 +98,9 @@ am_libsupc___la_OBJECTS = $(am__objects_1) $(am__objects_2) libsupc___la_OBJECTS = $(am_libsupc___la_OBJECTS) libsupc__convenience_la_LIBADD = am__libsupc__convenience_la_SOURCES_DIST = array_type_info.cc \ - bad_cast.cc bad_typeid.cc class_type_info.cc del_op.cc \ - del_opnt.cc del_opv.cc del_opvnt.cc dyncast.cc eh_alloc.cc \ - eh_arm.cc eh_aux_runtime.cc eh_call.cc eh_catch.cc \ + atexit_arm.cc bad_cast.cc bad_typeid.cc class_type_info.cc \ + del_op.cc del_opnt.cc del_opv.cc del_opvnt.cc dyncast.cc \ + eh_alloc.cc eh_arm.cc eh_aux_runtime.cc eh_call.cc eh_catch.cc \ eh_exception.cc eh_globals.cc eh_personality.cc \ eh_term_handler.cc eh_terminate.cc eh_throw.cc eh_type.cc \ eh_unex_handler.cc enum_type_info.cc function_type_info.cc \ @@ -342,6 +342,7 @@ headers = \ sources = \ array_type_info.cc \ + atexit_arm.cc \ bad_cast.cc \ bad_typeid.cc \ class_type_info.cc \ diff --git a/libstdc++-v3/libsupc++/atexit_arm.cc b/libstdc++-v3/libsupc++/atexit_arm.cc new file mode 100644 index 00000000000..fe2143b42b1 --- /dev/null +++ b/libstdc++-v3/libsupc++/atexit_arm.cc @@ -0,0 +1,44 @@ +// Copyright (C) 2007 Free Software Foundation, Inc. +// +// This file is part of GCC. +// +// GCC is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or (at your option) +// any later version. + +// GCC is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with GCC; see the file COPYING. If not, write to +// the Free Software Foundation, 51 Franklin Street, Fifth Floor, +// Boston, MA 02110-1301, USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +#include + +#if defined(__arm__) && defined(__ARM_EABI__) + +namespace __aeabiv1 +{ + extern "C" int + __aeabi_atexit (void *object, + void (*destructor) (void *), + void *dso_handle) throw () + { + return abi::__cxa_atexit(destructor, object, dso_handle); + } +} // namespace __aeabiv1 + +#endif // defined(__arm__) && defined(__ARM_EABI__) diff --git a/libstdc++-v3/libsupc++/cxxabi.h b/libstdc++-v3/libsupc++/cxxabi.h index c0418d82588..fb082d32ac2 100644 --- a/libstdc++-v3/libsupc++/cxxabi.h +++ b/libstdc++-v3/libsupc++/cxxabi.h @@ -136,7 +136,7 @@ namespace __cxxabiv1 // DSO destruction. int - __cxa_atexit(void (*)(void*), void*, void*); + __cxa_atexit(void (*)(void*), void*, void*) throw (); int __cxa_finalize(void*); diff --git a/libstdc++-v3/libsupc++/vec.cc b/libstdc++-v3/libsupc++/vec.cc index 08a710718b0..67caec86627 100644 --- a/libstdc++-v3/libsupc++/vec.cc +++ b/libstdc++-v3/libsupc++/vec.cc @@ -499,14 +499,6 @@ namespace __aeabiv1 2 * sizeof (std::size_t), /*destructor=*/NULL, dealloc); } - - extern "C" int - __aeabi_atexit (void *object, - void (*destructor) (void *), - void *dso_handle) - { - return abi::__cxa_atexit(destructor, object, dso_handle); - } } // namespace __aeabiv1 #endif // defined(__arm__) && defined(__ARM_EABI__)