Fix some symbol version mismatches between libstdc++ and libsupc++/libcxxrt

that were causing the runtime and STL libraries to see different versions of
various classes and functions when libstdc++ is used as a filter.

Note: This changes the ABI for libcxxrt, but libcxxrt is currently only in
-STABLE for testing and is not used by anything unless explicitly enabled by
the end user.  No default compiler configurations use it.

libc++ will need to be recompiled after this change.  make buildworld will do
this automatically, but make in lib/libc++ will not necessarily work unless the
new libcxxrt is installed first.

PR:		kern/171610, stand/175453
Reviewed by:	kib
MFC after:	1 week
This commit is contained in:
David Chisnall 2013-01-28 11:12:49 +00:00
parent 3758c66a4f
commit 4792733bb8
2 changed files with 75 additions and 56 deletions

View File

@ -142,7 +142,36 @@ GLIBCXX_3.4 {
_ZdaPvRKSt9nothrow_t; _ZdaPvRKSt9nothrow_t;
_ZdlPv; _ZdlPv;
_ZdlPvRKSt9nothrow_t; _ZdlPvRKSt9nothrow_t;
extern "C++" {
std::set_new_handler*;
std::set_terminate*;
std::set_unexpected*;
std::bad_alloc;
std::bad_cast;
std::exception*;
"typeinfo for std::bad_alloc";
"typeinfo for std::bad_cast";
"typeinfo for std::exception";
"typeinfo name for std::bad_alloc";
"typeinfo name for std::bad_cast";
"typeinfo name for std::exception";
"vtable for std::bad_alloc";
"vtable for std::bad_cast";
"vtable for std::exception";
}; };
};
GLIBCXX_3.4.9 {
extern "C++" {
"std::bad_alloc::what() const";
"std::bad_cast::what() const";
"std::bad_typeid::what() const";
};
} GLIBCXX_3.4;
CXXABI_1.3.1 { CXXABI_1.3.1 {

View File

@ -209,18 +209,7 @@ CXXABI_1.3 {
"std::type_info::type_info(std::type_info const&)"; "std::type_info::type_info(std::type_info const&)";
"std::type_info::type_info(std::type_info const&)"; "std::type_info::type_info(std::type_info const&)";
"std::type_info::~type_info()";
"std::type_info::~type_info()";
"std::type_info::~type_info()";
"std::type_info::operator=(std::type_info const&)"; "std::type_info::operator=(std::type_info const&)";
"std::unexpected()";
"std::get_terminate()";
"std::set_terminate(void (*)())";
"std::get_unexpected()";
"std::set_unexpected(void (*)())";
"std::set_new_handler(void (*)())";
"std::uncaught_exception()";
"std::terminate()";
# Extensions # Extensions
@ -243,67 +232,22 @@ CXXABI_1.3.1 {
CXXRT_1.0 { CXXRT_1.0 {
extern "C++" { extern "C++" {
"std::bad_cast::what() const";
"std::bad_typeid::what() const";
"std::bad_alloc::what() const";
"std::exception::what() const";
"std::type_info::name() const"; "std::type_info::name() const";
"std::type_info::before(std::type_info const&) const"; "std::type_info::before(std::type_info const&) const";
"std::type_info::operator==(std::type_info const&) const"; "std::type_info::operator==(std::type_info const&) const";
"std::type_info::operator!=(std::type_info const&) const"; "std::type_info::operator!=(std::type_info const&) const";
"std::bad_typeid::bad_typeid(std::bad_typeid const&)";
"std::bad_typeid::bad_typeid()";
"std::bad_typeid::bad_typeid(std::bad_typeid const&)";
"std::bad_typeid::bad_typeid()";
"std::bad_typeid::~bad_typeid()";
"std::bad_typeid::~bad_typeid()";
"std::bad_typeid::~bad_typeid()";
"std::bad_typeid::operator=(std::bad_typeid const&)";
"std::bad_cast::bad_cast(std::bad_cast const&)"; "std::bad_cast::bad_cast(std::bad_cast const&)";
"std::bad_cast::bad_cast()"; "std::bad_cast::bad_cast()";
"std::bad_cast::bad_cast(std::bad_cast const&)"; "std::bad_cast::bad_cast(std::bad_cast const&)";
"std::bad_cast::bad_cast()"; "std::bad_cast::bad_cast()";
"std::bad_cast::~bad_cast()";
"std::bad_cast::~bad_cast()";
"std::bad_cast::~bad_cast()";
"std::bad_cast::operator=(std::bad_cast const&)"; "std::bad_cast::operator=(std::bad_cast const&)";
"std::bad_alloc::bad_alloc(std::bad_alloc const&)";
"std::bad_alloc::bad_alloc()";
"std::bad_alloc::bad_alloc(std::bad_alloc const&)";
"std::bad_alloc::bad_alloc()";
"std::bad_alloc::~bad_alloc()";
"std::bad_alloc::~bad_alloc()";
"std::bad_alloc::~bad_alloc()";
"std::bad_alloc::operator=(std::bad_alloc const&)";
"std::exception::exception(std::exception const&)"; "std::exception::exception(std::exception const&)";
"std::exception::exception()"; "std::exception::exception()";
"std::exception::exception(std::exception const&)"; "std::exception::exception(std::exception const&)";
"std::exception::exception()"; "std::exception::exception()";
"std::exception::~exception()";
"std::exception::~exception()";
"std::exception::~exception()";
"std::exception::operator=(std::exception const&)"; "std::exception::operator=(std::exception const&)";
"vtable for std::bad_typeid";
"vtable for std::bad_cast";
"vtable for std::bad_alloc";
"vtable for std::exception";
"vtable for std::type_info";
"typeinfo for std::bad_typeid";
"typeinfo for std::bad_cast";
"typeinfo for std::bad_alloc";
"typeinfo for std::exception";
"typeinfo for std::type_info";
"typeinfo name for std::bad_typeid";
"typeinfo name for std::bad_cast";
"typeinfo name for std::bad_alloc";
"typeinfo name for std::exception";
"typeinfo name for std::type_info";
"std::type_info::__is_function_p() const";
"std::type_info::__do_upcast(__cxxabiv1::__class_type_info const*, void**) const";
"std::type_info::__is_pointer_p() const";
@ -317,6 +261,7 @@ CXXRT_1.0 {
} CXXABI_1.3.1; } CXXABI_1.3.1;
GLIBCXX_3.4 { GLIBCXX_3.4 {
extern "C++" { extern "C++" {
"operator delete[](void*)"; "operator delete[](void*)";
@ -327,5 +272,50 @@ GLIBCXX_3.4 {
"operator new[](unsigned long)"; "operator new[](unsigned long)";
"operator new(unsigned long)"; "operator new(unsigned long)";
"operator new(unsigned long, std::nothrow_t const&)"; "operator new(unsigned long, std::nothrow_t const&)";
"std::unexpected()";
"std::get_terminate()";
"std::get_unexpected()";
"std::uncaught_exception()";
"std::terminate()";
"std::type_info::~type_info()";
"std::bad_cast::~bad_cast()";
"std::exception::~exception()";
std::set_new_handler*;
std::set_terminate*;
std::set_unexpected*;
std::exception*;
std::bad_alloc;
std::bad_typeid;
std::type_info*;
"vtable for std::bad_alloc";
"vtable for std::bad_cast";
"vtable for std::bad_typeid";
"vtable for std::exception";
"vtable for std::type_info";
"typeinfo for std::bad_alloc";
"typeinfo for std::bad_typeid";
"typeinfo for std::exception";
"typeinfo for std::bad_cast";
"typeinfo for std::exception";
"typeinfo for std::type_info";
"typeinfo name for std::bad_typeid";
"typeinfo name for std::bad_cast";
"typeinfo name for std::exception";
"typeinfo name for std::type_info";
}; };
}; };
GLIBCXX_3.4.9 {
extern "C++" {
"std::bad_typeid::what() const";
"std::bad_cast::what() const";
"std::bad_alloc::what() const";
};
} GLIBCXX_3.4;