Add support for __cxa_throw_bad_array_new_length in libcxxrt

It is required for use with newer g++49

Differential Revision:	https://reviews.freebsd.org/D982
Reviewed by:	theraven
Approved by:	theraven
MFC after:	3 weeks
This commit is contained in:
bapt 2014-10-21 10:19:45 +00:00
parent 6d77d39adc
commit 5a2c236299
4 changed files with 31 additions and 0 deletions

View File

@ -75,3 +75,8 @@ extern "C" void __cxa_deleted_virtual()
{ {
abort(); abort();
} }
extern "C" void __cxa_throw_bad_array_new_length()
{
throw std::bad_array_new_length();
}

View File

@ -82,5 +82,13 @@ const char* bad_typeid::what() const throw()
return "std::bad_typeid"; return "std::bad_typeid";
} }
bad_array_new_length::bad_array_new_length() throw() {}
bad_array_new_length::~bad_array_new_length() {}
bad_array_new_length::bad_array_new_length(const bad_array_new_length&) throw() {}
bad_array_new_length& bad_array_new_length::operator=(const bad_array_new_length&) throw()
{
return *this;
}
} // namespace std } // namespace std

View File

@ -81,6 +81,15 @@ namespace std
virtual const char* what() const throw(); virtual const char* what() const throw();
}; };
class bad_array_new_length: public exception
{
public:
bad_array_new_length() throw();
bad_array_new_length(const bad_array_new_length&) throw();
bad_array_new_length& operator=(const bad_array_new_length&) throw();
virtual ~bad_array_new_length();
virtual const char *what() const throw();
};
} // namespace std } // namespace std

View File

@ -26,6 +26,7 @@ CXXABI_1.3 {
__cxa_pure_virtual; __cxa_pure_virtual;
__cxa_rethrow; __cxa_rethrow;
__cxa_throw; __cxa_throw;
__cxa_throw_bad_array_new_length;
__cxa_type_match; __cxa_type_match;
__cxa_vec_cctor; __cxa_vec_cctor;
__cxa_vec_cleanup; __cxa_vec_cleanup;
@ -273,6 +274,9 @@ CXXRT_1.0 {
"std::bad_alloc::bad_alloc(std::bad_alloc const&)"; "std::bad_alloc::bad_alloc(std::bad_alloc const&)";
"std::bad_alloc::bad_alloc()"; "std::bad_alloc::bad_alloc()";
"std::bad_alloc::operator=(std::bad_alloc const&)"; "std::bad_alloc::operator=(std::bad_alloc const&)";
"std::bad_array_new_length::bad_array_new_length(std::bad_array_new_length const&)";
"std::bad_array_new_length::bad_array_new_length()";
"std::bad_array_new_length::operator=(std::bad_array_new_length const&)";
}; };
__cxa_allocate_dependent_exception; __cxa_allocate_dependent_exception;
@ -307,6 +311,7 @@ GLIBCXX_3.4 {
"std::bad_typeid::~bad_typeid()"; "std::bad_typeid::~bad_typeid()";
"std::exception::~exception()"; "std::exception::~exception()";
"std::bad_alloc::~bad_alloc()"; "std::bad_alloc::~bad_alloc()";
"std::bad_array_new_length::~bad_array_new_length()";
"std::exception::what() const"; "std::exception::what() const";
@ -320,17 +325,20 @@ GLIBCXX_3.4 {
"vtable for std::bad_typeid"; "vtable for std::bad_typeid";
"vtable for std::exception"; "vtable for std::exception";
"vtable for std::type_info"; "vtable for std::type_info";
"vtable for std::bad_array_new_length";
"typeinfo for std::bad_alloc"; "typeinfo for std::bad_alloc";
"typeinfo for std::bad_typeid"; "typeinfo for std::bad_typeid";
"typeinfo for std::bad_cast"; "typeinfo for std::bad_cast";
"typeinfo for std::exception"; "typeinfo for std::exception";
"typeinfo for std::type_info"; "typeinfo for std::type_info";
"typeinfo for std::bad_array_new_length";
"typeinfo name for std::bad_alloc"; "typeinfo name for std::bad_alloc";
"typeinfo name for std::bad_typeid"; "typeinfo name for std::bad_typeid";
"typeinfo name for std::bad_cast"; "typeinfo name for std::bad_cast";
"typeinfo name for std::exception"; "typeinfo name for std::exception";
"typeinfo name for std::type_info"; "typeinfo name for std::type_info";
"typeinfo name for std::bad_array_new_length";
}; };
}; };
@ -340,6 +348,7 @@ GLIBCXX_3.4.9 {
"std::bad_typeid::what() const"; "std::bad_typeid::what() const";
"std::bad_cast::what() const"; "std::bad_cast::what() const";
"std::bad_alloc::what() const"; "std::bad_alloc::what() const";
"std::bad_array_new_length::what() const";
}; };
} GLIBCXX_3.4; } GLIBCXX_3.4;