git: ecf410623750 - main - Merge libcxxrt master 03c83f5a57be8c5b1a29a68de5638744f17d28ba

From: Dimitry Andric <dim_at_FreeBSD.org>
Date: Thu, 25 Jan 2024 17:44:09 UTC
The branch main has been updated by dim:

URL: https://cgit.FreeBSD.org/src/commit/?id=ecf4106237505fa9459ae871793b754334989c17

commit ecf4106237505fa9459ae871793b754334989c17
Merge: e95025ed9388 156745f57594
Author:     Dimitry Andric <dim@FreeBSD.org>
AuthorDate: 2024-01-25 17:41:44 +0000
Commit:     Dimitry Andric <dim@FreeBSD.org>
CommitDate: 2024-01-25 17:43:23 +0000

    Merge libcxxrt master 03c83f5a57be8c5b1a29a68de5638744f17d28ba
    
    Interesting fixes (* were already cherry-picked):
    - 03c83f5 add __cxa_init_primary_exception (#23)
    * 5d8a158 Fix two bugs in __cxa_end_cleanup()
    * b00c6c5 Insert padding in __cxa_dependent_exception
    * 45ca8b1 Insert padding in __cxa_exception struct for compatibility
    * f2e5509 Fix unlock in two-word version and add missing comment.
    - 6229590 Add an option for disabling emergency buffers. (#14)
    
    MFC after:      2 weeks

 contrib/libcxxrt/cxxabi.h     |  8 ++++++++
 contrib/libcxxrt/exception.cc | 44 +++++++++++++++++++++++++++++++++++--------
 lib/libcxxrt/Version.map      |  4 ++++
 3 files changed, 48 insertions(+), 8 deletions(-)

diff --cc lib/libcxxrt/Version.map
index 0d2dccbe2670,000000000000..a54b6a4daad5
mode 100644,000000..100644
--- a/lib/libcxxrt/Version.map
+++ b/lib/libcxxrt/Version.map
@@@ -1,394 -1,0 +1,398 @@@
 +# Define the same version as the libsupc++ from gcc 4.2.1 so that we can use
 +# libcxxrt as a drop-in replacement.
 +
 +CXXABI_1.3 {
 +
 +  global:
 +
 +    # ABI functions with C linkage
 +    __cxa_allocate_exception;
 +    __cxa_bad_cast;
 +    __cxa_bad_typeid;
 +    __cxa_begin_catch;
 +    __cxa_begin_cleanup;
 +    __cxa_call_unexpected;
 +    __cxa_current_exception_type;
 +    __cxa_demangle;
 +    __cxa_end_catch;
 +    __cxa_end_cleanup;
 +    __cxa_free_exception;
 +    __cxa_get_globals;
 +    __cxa_get_globals_fast;
 +    __cxa_guard_abort;
 +    __cxa_guard_acquire;
 +    __cxa_guard_release;
 +    __cxa_pure_virtual;
 +    __cxa_rethrow;
 +    __cxa_throw;
 +    __cxa_throw_bad_array_new_length;
 +    __cxa_type_match;
 +    __cxa_vec_cctor;
 +    __cxa_vec_cleanup;
 +    __cxa_vec_ctor;
 +    __cxa_vec_delete2;
 +    __cxa_vec_delete3;
 +    __cxa_vec_delete;
 +    __cxa_vec_dtor;
 +    __cxa_vec_new2;
 +    __cxa_vec_new3;
 +    __cxa_vec_new;
 +    __dynamic_cast;
 +    __gxx_personality_sj0;
 +    __gxx_personality_v0;
 +
 +    extern "C++" {
 +        # Type info classes and their destructors
 +        "__cxxabiv1::__array_type_info";
 +        "__cxxabiv1::__array_type_info::~__array_type_info()";
 +        "__cxxabiv1::__class_type_info";
 +        "__cxxabiv1::__class_type_info::~__class_type_info()";
 +        "__cxxabiv1::__enum_type_info";
 +        "__cxxabiv1::__enum_type_info::~__enum_type_info()";
 +        "__cxxabiv1::__function_type_info::";
 +        "__cxxabiv1::__function_type_info::~__function_type_info()";
 +        "__cxxabiv1::__fundamental_type_info";
 +        "__cxxabiv1::__fundamental_type_info::~__fundamental_type_info()";
 +        "__cxxabiv1::__pbase_type_info";
 +        "__cxxabiv1::__pbase_type_info::~__pbase_type_info()";
 +        "__cxxabiv1::__pointer_to_member_type_info";
 +        "__cxxabiv1::__pointer_to_member_type_info::~__pointer_to_member_type_info()";
 +        "__cxxabiv1::__pointer_type_info";
 +        "__cxxabiv1::__pointer_type_info::~__pointer_type_info()";
 +        "__cxxabiv1::__si_class_type_info";
 +        "__cxxabiv1::__si_class_type_info::~__si_class_type_info()";
 +        "__cxxabiv1::__vmi_class_type_info";
 +        "__cxxabiv1::__vmi_class_type_info::~__vmi_class_type_info()";
 +
 +        # vtables typeinfo classes.
 +        "vtable for __cxxabiv1::__array_type_info";
 +        "vtable for __cxxabiv1::__class_type_info";
 +        "vtable for __cxxabiv1::__enum_type_info";
 +        "vtable for __cxxabiv1::__function_type_info";
 +        "vtable for __cxxabiv1::__fundamental_type_info";
 +        "vtable for __cxxabiv1::__pbase_type_info";
 +        "vtable for __cxxabiv1::__pointer_to_member_type_info";
 +        "vtable for __cxxabiv1::__pointer_type_info";
 +        "vtable for __cxxabiv1::__si_class_type_info";
 +        "vtable for __cxxabiv1::__vmi_class_type_info";
 +
 +        # Type info for built-in types
 +        "typeinfo for bool const*";
 +        "typeinfo for bool";
 +        "typeinfo for char const*";
 +        "typeinfo for char";
 +        "typeinfo for double const*";
 +        "typeinfo for double";
 +        "typeinfo for float const*";
 +        "typeinfo for float";
 +        "typeinfo for int const*";
 +        "typeinfo for int";
 +        "typeinfo for long const*";
 +        "typeinfo for long double const*";
 +        "typeinfo for long double";
 +        "typeinfo for long long const*";
 +        "typeinfo for long long";
 +        "typeinfo for long";
 +        "typeinfo for short const*";
 +        "typeinfo for short";
 +        "typeinfo for signed char const*";
 +        "typeinfo for signed char";
 +        "typeinfo for unsigned char const*";
 +        "typeinfo for unsigned char";
 +        "typeinfo for unsigned int const*";
 +        "typeinfo for unsigned int";
 +        "typeinfo for unsigned long const*";
 +        "typeinfo for unsigned long long const*";
 +        "typeinfo for unsigned long long";
 +        "typeinfo for unsigned long";
 +        "typeinfo for unsigned short const*";
 +        "typeinfo for unsigned short";
 +        "typeinfo for void const*";
 +        "typeinfo for void";
 +        "typeinfo for wchar_t const*";
 +        "typeinfo for wchar_t";
 +
 +        "typeinfo for bool*";
 +        "typeinfo for wchar_t*";
 +        "typeinfo for short*";
 +        "typeinfo for char*";
 +        "typeinfo for unsigned char*";
 +        "typeinfo for long long*";
 +        "typeinfo for unsigned short*";
 +        "typeinfo for long*";
 +        "typeinfo for double*";
 +        "typeinfo for unsigned long*";
 +        "typeinfo for unsigned long long*";
 +        "typeinfo for int*";
 +        "typeinfo for long double*";
 +        "typeinfo for signed char*";
 +        "typeinfo for void*";
 +        "typeinfo for unsigned int*";
 +        "typeinfo for float*";
 +
 +        "typeinfo for __cxxabiv1::__array_type_info";
 +        "typeinfo for __cxxabiv1::__class_type_info";
 +        "typeinfo for __cxxabiv1::__enum_type_info";
 +        "typeinfo for __cxxabiv1::__function_type_info";
 +        "typeinfo for __cxxabiv1::__fundamental_type_info";
 +        "typeinfo for __cxxabiv1::__pbase_type_info";
 +        "typeinfo for __cxxabiv1::__pointer_to_member_type_info";
 +        "typeinfo for __cxxabiv1::__pointer_type_info";
 +        "typeinfo for __cxxabiv1::__si_class_type_info";
 +        "typeinfo for __cxxabiv1::__vmi_class_type_info";
 +
 +        # Typeinfo names.
 +
 +        "typeinfo name for unsigned char const*";
 +        "typeinfo name for long const*";
 +        "typeinfo name for double const*";
 +        "typeinfo name for unsigned long long const*";
 +        "typeinfo name for unsigned short const*";
 +        "typeinfo name for char const*";
 +        "typeinfo name for long long const*";
 +        "typeinfo name for short const*";
 +        "typeinfo name for unsigned int const*";
 +        "typeinfo name for float const*";
 +        "typeinfo name for bool const*";
 +        "typeinfo name for wchar_t const*";
 +        "typeinfo name for int const*";
 +        "typeinfo name for unsigned long const*";
 +        "typeinfo name for void const*";
 +        "typeinfo name for long double const*";
 +        "typeinfo name for signed char const*";
 +        "typeinfo name for wchar_t";
 +        "typeinfo name for short";
 +        "typeinfo name for char";
 +        "typeinfo name for float";
 +        "typeinfo name for void";
 +        "typeinfo name for unsigned int";
 +        "typeinfo name for bool";
 +        "typeinfo name for signed char";
 +        "typeinfo name for long double";
 +        "typeinfo name for int";
 +        "typeinfo name for unsigned long long";
 +        "typeinfo name for unsigned long";
 +        "typeinfo name for unsigned char";
 +        "typeinfo name for long";
 +        "typeinfo name for long long";
 +        "typeinfo name for unsigned short";
 +        "typeinfo name for double";
 +
 +        "typeinfo name for bool*";
 +        "typeinfo name for wchar_t*";
 +        "typeinfo name for short*";
 +        "typeinfo name for char*";
 +        "typeinfo name for unsigned char*";
 +        "typeinfo name for long long*";
 +        "typeinfo name for unsigned short*";
 +        "typeinfo name for long*";
 +        "typeinfo name for double*";
 +        "typeinfo name for unsigned long*";
 +        "typeinfo name for unsigned long long*";
 +        "typeinfo name for int*";
 +        "typeinfo name for long double*";
 +        "typeinfo name for signed char*";
 +        "typeinfo name for void*";
 +        "typeinfo name for unsigned int*";
 +        "typeinfo name for float*";
 +
 +        "typeinfo name for __cxxabiv1::__array_type_info";
 +        "typeinfo name for __cxxabiv1::__class_type_info";
 +        "typeinfo name for __cxxabiv1::__enum_type_info";
 +        "typeinfo name for __cxxabiv1::__function_type_info";
 +        "typeinfo name for __cxxabiv1::__fundamental_type_info";
 +        "typeinfo name for __cxxabiv1::__pbase_type_info";
 +        "typeinfo name for __cxxabiv1::__pointer_to_member_type_info";
 +        "typeinfo name for __cxxabiv1::__pointer_type_info";
 +        "typeinfo name for __cxxabiv1::__si_class_type_info";
 +        "typeinfo name for __cxxabiv1::__vmi_class_type_info";
 +
 +        "std::type_info::type_info(std::type_info const&)";
 +        "std::type_info::operator=(std::type_info const&)";
 +
 +
 +        # Extensions
 +        "pathscale::set_terminate(void (*)())";
 +        "pathscale::set_unexpected(void (*)())";
 +        "pathscale::set_use_thread_local_handlers(bool)";
 +    };
 +
 +    # C++11 typeinfo not understood by ld.bfd 2.17.50
 +    # std::nullptr_t
 +    _ZTIDn;_ZTIPDn;_ZTIPKDn;
 +    # char16_t
 +    _ZTIDi;_ZTIPDi;_ZTIPKDi;
 +    # char32_t
 +    _ZTIDs;_ZTIPDs;_ZTIPKDs;
 +    # IEEE 754r decimal floating point
 +    _ZTIDd;_ZTIPDd;_ZTIPKDd;
 +    _ZTIDe;_ZTIPDe;_ZTIPKDe;
 +    _ZTIDf;_ZTIPDf;_ZTIPKDf;
 +    # IEEE 754r half-precision floating point
 +    _ZTIDh;_ZTIPDh;_ZTIPKDh;
 +
 +    # C++11 typeinfo name not understood by ld.bfd 2.17.50
 +    # std::nullptr_t
 +    _ZTSDn;_ZTSPDn;_ZTSPKDn;
 +    # char16_t
 +    _ZTSDi;_ZTSPDi;_ZTSPKDi;
 +    # char32_t
 +    _ZTSDs;_ZTSPDs;_ZTSPKDs;
 +    # IEEE 754r decimal floating point
 +    _ZTSDd;_ZTSPDd;_ZTSPKDd;
 +    _ZTSDe;_ZTSPDe;_ZTSPKDe;
 +    _ZTSDf;_ZTSPDf;_ZTSPKDf;
 +    # IEEE 754r half-precision floating point
 +    _ZTSDh;_ZTSPDh;_ZTSPKDh;
 +
 +  local:
 +    *;
 +};
 +
 +CXXABI_1.3.1 {
 +    __cxa_get_exception_ptr;
 +} CXXABI_1.3;
 +
 +CXXABI_1.3.5 {
 +    extern "C++" {
 +        "typeinfo for __int128 const*";
 +        "typeinfo for __int128";
 +        "typeinfo for __int128*";
 +        "typeinfo for unsigned __int128 const*";
 +        "typeinfo for unsigned __int128";
 +        "typeinfo for unsigned __int128*";
 +    };
 +} CXXABI_1.3.1;
 +
 +CXXABI_1.3.6 {
 +    __cxa_deleted_virtual;
 +} CXXABI_1.3.5;
 +
 +CXXABI_1.3.9 {
 +    extern "C++" {
 +        "typeinfo name for __int128 const*";
 +        "typeinfo name for __int128";
 +        "typeinfo name for __int128*";
 +        "typeinfo name for unsigned __int128 const*";
 +        "typeinfo name for unsigned __int128";
 +        "typeinfo name for unsigned __int128*";
 +        "operator delete[](void*, unsigned int)";
 +        "operator delete(void*, unsigned int)";
 +        "operator delete[](void*, unsigned long)";
 +        "operator delete(void*, unsigned long)";
 +    };
 +} CXXABI_1.3.6;
 +
++CXXABI_1.3.11 {
++    __cxa_init_primary_exception;
++} CXXABI_1.3.9;
++
 +CXXRT_1.0 {
 +
 +    extern "C++" {
 +        "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_cast::bad_cast(std::bad_cast const&)";
 +        "std::bad_cast::bad_cast()";
 +        "std::bad_cast::operator=(std::bad_cast const&)";
 +        "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::operator=(std::exception const&)";
 +        "std::bad_alloc::bad_alloc(std::bad_alloc const&)";
 +        "std::bad_alloc::bad_alloc()";
 +        "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_current_primary_exception;
 +    __cxa_decrement_exception_refcount;
 +    __cxa_free_dependent_exception;
 +    __cxa_increment_exception_refcount;
 +    __cxa_rethrow_primary_exception;
 +
 +} CXXABI_1.3.6;
 +
 +
 +GLIBCXX_3.4 {
 +    extern "C++" {
 +        "operator delete[](void*)";
 +        "operator delete(void*)";
 +        "operator new[](unsigned int)";
 +        "operator new(unsigned int)";
 +        "operator new(unsigned int, std::nothrow_t const&)";
 +        "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::bad_array_new_length::~bad_array_new_length()";
 +
 +        "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";
 +        "vtable for std::bad_array_new_length";
 +
 +        "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 for std::bad_array_new_length";
 +        "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";
 +        "typeinfo name for std::bad_array_new_length";
 +
 +    };
 +};
 +
 +GLIBCXX_3.4.9 {
 +    extern "C++" {
 +        "std::bad_typeid::what() const";
 +        "std::bad_cast::what() const";
 +        "std::bad_alloc::what() const";
 +        "std::bad_array_new_length::what() const";
 +    };
 +} GLIBCXX_3.4;
 +
 +GLIBCXX_3.4.20 {
 +    extern "C++" {
 +        "std::get_new_handler()";
 +    };
 +} GLIBCXX_3.4.9;
 +
 +GLIBCXX_3.4.22 {
 +    extern "C++" {
 +        "std::uncaught_exceptions()";
 +    };
 +} GLIBCXX_3.4.20;
 +