aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2013-02-05 19:10:50 +0000
committerDimitry Andric <dim@FreeBSD.org>2013-02-05 19:10:50 +0000
commitde16ca02ea8b17e36a1be02b74bc35f2a5ca356f (patch)
tree9dfb10e7579330832e2f4d1999e50aed42652c4b
parent0520febff99ecc1cf53ec92d5e842164e00cfce7 (diff)
MFC r246028 (by theraven):
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 r246297: Add several missing symbols to libcxxrt's symbol version map, and remove a few duplicates. This should fix building world with -stdlib=libc++ after r246028. Submitted by: Yamaya Takashi <yamayan@kbh.biglobe.ne.jp>
Notes
svn path=/stable/9/; revision=246368
-rw-r--r--gnu/lib/libsupc++/Version.map29
-rw-r--r--lib/libcxxrt/Version.map118
2 files changed, 82 insertions, 65 deletions
diff --git a/gnu/lib/libsupc++/Version.map b/gnu/lib/libsupc++/Version.map
index ec6303ef78ec..dbcf4953979a 100644
--- a/gnu/lib/libsupc++/Version.map
+++ b/gnu/lib/libsupc++/Version.map
@@ -142,8 +142,37 @@ GLIBCXX_3.4 {
_ZdaPvRKSt9nothrow_t;
_ZdlPv;
_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 {
__cxa_get_exception_ptr;
diff --git a/lib/libcxxrt/Version.map b/lib/libcxxrt/Version.map
index ca990a0dddea..f7e12e1ce5b9 100644
--- a/lib/libcxxrt/Version.map
+++ b/lib/libcxxrt/Version.map
@@ -208,19 +208,7 @@ CXXABI_1.3 {
"typeinfo name for __cxxabiv1::__vmi_class_type_info";
"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::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
@@ -243,69 +231,22 @@ CXXABI_1.3.1 {
CXXRT_1.0 {
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::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::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::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::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::bad_typeid::bad_typeid(std::bad_typeid const&)";
+ "std::bad_typeid::bad_typeid()";
+ "std::bad_typeid::operator=(std::bad_typeid const&)";
"std::exception::exception(std::exception const&)";
"std::exception::exception()";
- "std::exception::~exception()";
- "std::exception::~exception()";
- "std::exception::~exception()";
"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";
-
-
+ "std::bad_alloc::bad_alloc(std::bad_alloc const&)";
+ "std::bad_alloc::bad_alloc()";
+ "std::bad_alloc::operator=(std::bad_alloc const&)";
};
__cxa_allocate_dependent_exception;
@@ -317,6 +258,7 @@ CXXRT_1.0 {
} CXXABI_1.3.1;
+
GLIBCXX_3.4 {
extern "C++" {
"operator delete[](void*)";
@@ -327,5 +269,51 @@ GLIBCXX_3.4 {
"operator new[](unsigned long)";
"operator new(unsigned long)";
"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::bad_typeid::~bad_typeid()";
+ "std::exception::~exception()";
+ "std::bad_alloc::~bad_alloc()";
+
+ "std::exception::what() const";
+
+ std::set_new_handler*;
+ std::set_terminate*;
+ std::set_unexpected*;
+ 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::bad_cast";
+ "typeinfo for std::exception";
+ "typeinfo for std::type_info";
+ "typeinfo name for std::bad_alloc";
+ "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;
+