## Linker script for GNU namespace versioning.
##
## Copyright (C) 2002-2021 Free Software Foundation, Inc.
##
## This file is part of the libstdc++ version 3 distribution.
##
## This file is part of the GNU ISO C++ Library.  This library 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 3, or (at your option)
## any later version.
##
## This library 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 this library; see the file COPYING3.  If not see
## <http://www.gnu.org/licenses/>.

GLIBCXX_8.0 {

  global:

    # Names inside the 'extern' block are demangled names.
    extern "C++"
    {
      std::*;
      std::__8::*;
      std::random_device::*
    };

    # operator new(size_t)
    _Znw[jmy];
    # operator new(size_t, std::nothrow_t const&)
    _Znw[jmy]RKSt9nothrow_t;

    # operator delete(void*)
    _ZdlPv;
    # operator delete(void*, std::nothrow_t const&)
    _ZdlPvRKSt9nothrow_t;

    # operator new[](size_t)
    _Zna[jmy];
    # operator new[](size_t, std::nothrow_t const&)
    _Zna[jmy]RKSt9nothrow_t;

    # operator delete[](void*)
    _ZdaPv;
    # operator delete[](void*, std::nothrow_t const&)
    _ZdaPvRKSt9nothrow_t;

    # function-scope static objects requires a guard variable.
    _ZGVNSt*;

    # VTT structure
    _ZTTNSt*;

    # vtable
    _ZTVSt*;
    _ZTVNSt*;
    _ZTVN9__gnu_cxx3__818stdio_sync_filebufI[cw]NSt3__811char_traitsI[cw]EEEE;

    # thunk
    _ZTv0_n12_NS*;
    _ZTv0_n24_NS*;

    # typeinfo structure
    _ZTISt*;
    _ZTINSt*;

    # typeinfo name
    _ZTSSt*;
    _ZTSNSt*;

    # locale
    _ZNSt3__89has_facetINS_*;

    # hash
    _ZNSt8__detail3__812__prime_listE;
    _ZNSt3tr18__detail3__812__prime_listE;

    # thread/mutex/condition_variable/future
    __once_proxy;

    # std::__detail::_List_node_base
    _ZNSt8__detail3__815_List_node_base7_M_hook*;
    _ZNSt8__detail3__815_List_node_base9_M_unhookEv;
    _ZNSt8__detail3__815_List_node_base10_M_reverseEv;
    _ZNSt8__detail3__815_List_node_base11_M_transfer*;
    _ZNSt8__detail3__815_List_node_base4swapER*;

    # std::__convert_to_v
    _ZNSt3__814__convert_to_v*;

    # std::__copy_streambufs
    _ZNSt3__817__copy_streambufsI*;
    _ZNSt3__821__copy_streambufs_eofI*;

    # std::__istream_extract(wistream&, wchar_t*, streamsize)
    _ZNSt3__817__istream_extractIwNS_11char_traitsIwEEEEvRNS_13basic_istreamIT_T0_EEPS4_[ilx];

    # __gnu_cxx::__atomic_add
    # __gnu_cxx::__exchange_and_add
    _ZN9__gnu_cxx3__812__atomic_addEPV[il][il];
    _ZN9__gnu_cxx3__818__exchange_and_addEPV[li][il];

    # __gnu_cxx::__pool
    _ZN9__gnu_cxx3__86__poolILb[01]EE13_M_initializeEv;
    _ZN9__gnu_cxx3__86__poolILb[01]EE16_M_reserve_blockE[jmy][jmy];
    _ZN9__gnu_cxx3__86__poolILb[01]EE16_M_reclaim_blockEPc[jmy];
    _ZN9__gnu_cxx3__86__poolILb[01]EE10_M_destroyEv;
    _ZN9__gnu_cxx3__86__poolILb1EE16_M_get_thread_idEv;

    _ZN9__gnu_cxx3__817__pool_alloc_base9_M_refillE[jmy];
    _ZN9__gnu_cxx3__817__pool_alloc_base16_M_get_free_listE[jmy];
    _ZN9__gnu_cxx3__817__pool_alloc_base12_M_get_mutexEv;

    _ZN9__gnu_cxx3__89free_list6_M_getE[jmy];
    _ZN9__gnu_cxx3__89free_list8_M_clearEv;

    # __gnu_cxx::stdio_sync_filebuf
    _ZTVN9__gnu_cxx3__818stdio_sync_filebufI[cw]St3__811char_traitsI[cw]EEE;
    _ZN9__gnu_cxx3__818stdio_sync_filebufI[cw]NSt3__811char_traitsI[cw]EEE[5-9]*;

    # debug mode
    _ZN11__gnu_debug19_Safe_sequence_base12_M_get_mutexEv;
    _ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv;
    _ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv;
    _ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv;
    _ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_;

    _ZN11__gnu_debug19_Safe_iterator_base9_M_attach*;
    _ZN11__gnu_debug19_Safe_iterator_base16_M_attach_single*;
    _ZN11__gnu_debug19_Safe_iterator_base9_M_detachEv;
    _ZN11__gnu_debug19_Safe_iterator_base16_M_detach_singleEv;
    _ZN11__gnu_debug19_Safe_iterator_base12_M_get_mutexEv;
    _ZNK11__gnu_debug19_Safe_iterator_base11_M_singularEv;
    _ZNK11__gnu_debug19_Safe_iterator_base14_M_can_compareERKS0_;

    _ZNK11__gnu_debug16_Error_formatter10_M_message*;
    _ZNK11__gnu_debug16_Error_formatter8_M_error*;

    # __gnu_debug::_Safe_unordered_container_base
    # __gnu_debug::_Safe_local_iterator_base
    _ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_;
    _ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv;
    _ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb;
    _ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv;
    _ZN11__gnu_debug25_Safe_local_iterator_base16_M_attach_singleEPNS_19_Safe_sequence_baseEb;

    # parallel mode
    _ZN14__gnu_parallel9_Settings3getEv;
    _ZN14__gnu_parallel9_Settings3setERS0_;

  local:
    *;
};


# Symbols in the support library (libsupc++) have their own tag.
CXXABI_2.0 {

  global:
    __cxa_allocate_exception;
    __cxa_allocate_dependent_exception;
    __cxa_bad_cast;
    __cxa_bad_typeid;
    __cxa_begin_catch;
    __cxa_begin_cleanup;
    __cxa_call_unexpected;
    __cxa_current_exception_type;
    __cxa_deleted_virtual;
    __cxa_demangle;
    __cxa_end_catch;
    __cxa_end_cleanup;
    __cxa_free_exception;
    __cxa_free_dependent_exception;
    __cxa_get_exception_ptr;
    __cxa_init_primary_exception;
    __cxa_get_globals;
    __cxa_get_globals_fast;
    __cxa_guard_abort;
    __cxa_guard_acquire;
    __cxa_guard_release;
    __cxa_pure_virtual;
    __cxa_rethrow;
    __cxa_thread_atexit;
    __cxa_throw;
    __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;
    __gxx_personality_v0;
    __gxx_personality_sj0;
    __dynamic_cast;

    # std::exception_ptr
    _ZNSt15__exception_ptr13exception_ptrC1Ev;
    _ZNSt15__exception_ptr13exception_ptrC2Ev;
    _ZNSt15__exception_ptr13exception_ptrC1EPv;
    _ZNSt15__exception_ptr13exception_ptrC1ERKS0_;
    _ZNSt15__exception_ptr13exception_ptrC2ERKS0_;
    _ZNSt15__exception_ptr13exception_ptrC1EMS0_FvvE;
    _ZNSt15__exception_ptr13exception_ptrC2EMS0_FvvE;
    _ZNSt15__exception_ptr13exception_ptrD1Ev;
    _ZNSt15__exception_ptr13exception_ptrD2Ev;
    _ZNSt15__exception_ptr13exception_ptraSERKS0_;
    _ZNKSt15__exception_ptr13exception_ptrcvMS0_FvvEEv;
    _ZNKSt15__exception_ptr13exception_ptrntEv;
    _ZNKSt15__exception_ptr13exception_ptr20__cxa_exception_typeEv;
    _ZNSt15__exception_ptr13exception_ptr4swapERS0_;
    _ZNSt15__exception_ptreqERKNS_13exception_ptrES2_;
    _ZNSt15__exception_ptrneERKNS_13exception_ptrES2_;

    _ZSt17current_exceptionv;
    _ZSt17rethrow_exceptionNSt15__exception_ptr13exception_ptrE;

    # std::nested_exception
    _ZNSt16nested_exceptionD*;
    _ZTISt16nested_exception;
    _ZTVSt16nested_exception;

    # std::bad_function_call.
    _ZNSt17bad_function_callD*;
    _ZTISt17bad_function_call;
    _ZTSSt17bad_function_call;
    _ZTVSt17bad_function_call;

    __cxa_throw_bad_array_new_length;
    _Z*St20bad_array_new_length*;

    __cxa_throw_bad_array_length;
    _Z*St16bad_array_length*;

    # Default function.
    _ZSt11_Hash_bytesPKv*;

    # FNV hash.
    _ZSt15_Fnv_hash_bytesPKv*;

    # __gnu_cxx::_verbose_terminate_handler()
    _ZN9__gnu_cxx3__827__verbose_terminate_handlerEv;

    # *_type_info classes, ctor and dtor
    _ZN10__cxxabiv117__array_type_info*;
    _ZN10__cxxabiv117__class_type_info*;
    _ZN10__cxxabiv116__enum_type_info*;
    _ZN10__cxxabiv120__function_type_info*;
    _ZN10__cxxabiv123__fundamental_type_info*;
    _ZN10__cxxabiv117__pbase_type_info*;
    _ZN10__cxxabiv129__pointer_to_member_type_info*;
    _ZN10__cxxabiv119__pointer_type_info*;
    _ZN10__cxxabiv120__si_class_type_info*;
    _ZN10__cxxabiv121__vmi_class_type_info*;

    # *_type_info classes, member functions
    _ZNK10__cxxabiv117__class_type_info*;
    _ZNK10__cxxabiv120__function_type_info*;
    _ZNK10__cxxabiv117__pbase_type_info*;
    _ZNK10__cxxabiv129__pointer_to_member_type_info*;
    _ZNK10__cxxabiv119__pointer_type_info*;
    _ZNK10__cxxabiv120__si_class_type_info*;
    _ZNK10__cxxabiv121__vmi_class_type_info*;

    # typeinfo structure
    _ZTI[a-z];
    _ZTIP[a-z];
    _ZTIPK[a-z];
    _ZTIN10__cxxabiv117__array_type_infoE;
    _ZTIN10__cxxabiv117__class_type_infoE;
    _ZTIN10__cxxabiv116__enum_type_infoE;
    _ZTIN10__cxxabiv120__function_type_infoE;
    _ZTIN10__cxxabiv123__fundamental_type_infoE;
    _ZTIN10__cxxabiv117__pbase_type_infoE;
    _ZTIN10__cxxabiv129__pointer_to_member_type_infoE;
    _ZTIN10__cxxabiv119__pointer_type_infoE;
    _ZTIN10__cxxabiv120__si_class_type_infoE;
    _ZTIN10__cxxabiv121__vmi_class_type_infoE;
    _ZTIN10__cxxabiv115__forced_unwindE;
    _ZTIN10__cxxabiv119__foreign_exceptionE;
    _ZTIN10__cxxabiv115__forced_unwindE;
    _ZTIN10__cxxabiv119__foreign_exceptionE;

    # typeinfo name
    _ZTS[a-z];
    _ZTSP[a-z];
    _ZTSPK[a-z];
    _ZTSN10__cxxabiv117__array_type_infoE;
    _ZTSN10__cxxabiv117__class_type_infoE;
    _ZTSN10__cxxabiv116__enum_type_infoE;
    _ZTSN10__cxxabiv120__function_type_infoE;
    _ZTSN10__cxxabiv123__fundamental_type_infoE;
    _ZTSN10__cxxabiv117__pbase_type_infoE;
    _ZTSN10__cxxabiv129__pointer_to_member_type_infoE;
    _ZTSN10__cxxabiv119__pointer_type_infoE;
    _ZTSN10__cxxabiv120__si_class_type_infoE;
    _ZTSN10__cxxabiv121__vmi_class_type_infoE;

    # typeinfo for char8_t
    _ZTIDu;
    _ZTIPDu;
    _ZTIPKDu;

    # typeinfo for char16_t and char32_t
    _ZTIDs;
    _ZTIPDs;
    _ZTIPKDs;
    _ZTIDi;
    _ZTIPDi;
    _ZTIPKDi;

    # typeinfo for decimal floating point types
    _ZTID[fde];
    _ZTIPD[fde];
    _ZTIPKD[fde];

    # typeinfo for decltype(nullptr)
    _ZTIDn;
    _ZTIPDn;
    _ZTIPKDn;

    # typeinfo for __int128 and unsigned __int128
    _ZTI[no];
    _ZTIP[no];
    _ZTIPK[no];

    # virtual table
    _ZTVN10__cxxabiv117__array_type_infoE;
    _ZTVN10__cxxabiv117__class_type_infoE;
    _ZTVN10__cxxabiv116__enum_type_infoE;
    _ZTVN10__cxxabiv120__function_type_infoE;
    _ZTVN10__cxxabiv123__fundamental_type_infoE;
    _ZTVN10__cxxabiv117__pbase_type_infoE;
    _ZTVN10__cxxabiv129__pointer_to_member_type_infoE;
    _ZTVN10__cxxabiv119__pointer_type_infoE;
    _ZTVN10__cxxabiv120__si_class_type_infoE;
    _ZTVN10__cxxabiv121__vmi_class_type_infoE;

    # operator delete(void*, std::size_t)
    _ZdlPv[jmy];
    # operator delete[](void*, std::size_t)
    _ZdaPv[jmy];

    # __gnu_cxx::__freeres()
    _ZN9__gnu_cxx9__freeresEv;

    # C++17 aligned new/delete
    _Znw[jmy]St11align_val_t;
    _Znw[jmy]St11align_val_tRKSt9nothrow_t;
    _Zna[jmy]St11align_val_t;
    _Zna[jmy]St11align_val_tRKSt9nothrow_t;
    _ZdlPvSt11align_val_t;
    _ZdlPvSt11align_val_tRKSt9nothrow_t;
    _ZdlPv[jmy]St11align_val_t;
    _ZdaPvSt11align_val_t;
    _ZdaPvSt11align_val_tRKSt9nothrow_t;
    _ZdaPv[jmy]St11align_val_t;
};

# Symbols in the support library (libsupc++) supporting trans-mem.
CXXABI_TM_1 {

  global:
    __cxa_tm_cleanup;

};
