# The C++ runtime: the Itanium C++ ABI's routines and the C++ standard
# library's, as their declarations state them. Portable: a mangled key states
# its parameter types, so no two runtimes export one key with two interfaces,
# and the ABI's `extern "C"` routines are declared alike by libsupc++ and
# libc++abi. None of it is radare2's; see README.md.

# operator new: [new.delete.single] and [new.delete.array], C++17 for the
# aligned forms. The Itanium C++ ABI's mangling (5.1.5) states every parameter
# type in the key: `m` is unsigned long and `j` unsigned int, so `_Znwm` is
# LP64's and `_Znwj` ILP32's. `std::align_val_t` passes as its underlying
# size_t, and a `const std::nothrow_t &` as a pointer.

_Znwm=func
func._Znwm.args=1
func._Znwm.arg.0=unsigned long,size
func._Znwm.ret=void *

_ZnwmRKSt9nothrow_t=func
func._ZnwmRKSt9nothrow_t.args=2
func._ZnwmRKSt9nothrow_t.arg.0=unsigned long,size
func._ZnwmRKSt9nothrow_t.arg.1=const nothrow_t *,tag
func._ZnwmRKSt9nothrow_t.ret=void *

_ZnwmSt11align_val_t=func
func._ZnwmSt11align_val_t.args=2
func._ZnwmSt11align_val_t.arg.0=unsigned long,size
func._ZnwmSt11align_val_t.arg.1=unsigned long,alignment
func._ZnwmSt11align_val_t.ret=void *

_ZnwmSt11align_val_tRKSt9nothrow_t=func
func._ZnwmSt11align_val_tRKSt9nothrow_t.args=3
func._ZnwmSt11align_val_tRKSt9nothrow_t.arg.0=unsigned long,size
func._ZnwmSt11align_val_tRKSt9nothrow_t.arg.1=unsigned long,alignment
func._ZnwmSt11align_val_tRKSt9nothrow_t.arg.2=const nothrow_t *,tag
func._ZnwmSt11align_val_tRKSt9nothrow_t.ret=void *

_Znam=func
func._Znam.args=1
func._Znam.arg.0=unsigned long,size
func._Znam.ret=void *

_ZnamRKSt9nothrow_t=func
func._ZnamRKSt9nothrow_t.args=2
func._ZnamRKSt9nothrow_t.arg.0=unsigned long,size
func._ZnamRKSt9nothrow_t.arg.1=const nothrow_t *,tag
func._ZnamRKSt9nothrow_t.ret=void *

_ZnamSt11align_val_t=func
func._ZnamSt11align_val_t.args=2
func._ZnamSt11align_val_t.arg.0=unsigned long,size
func._ZnamSt11align_val_t.arg.1=unsigned long,alignment
func._ZnamSt11align_val_t.ret=void *

_ZnamSt11align_val_tRKSt9nothrow_t=func
func._ZnamSt11align_val_tRKSt9nothrow_t.args=3
func._ZnamSt11align_val_tRKSt9nothrow_t.arg.0=unsigned long,size
func._ZnamSt11align_val_tRKSt9nothrow_t.arg.1=unsigned long,alignment
func._ZnamSt11align_val_tRKSt9nothrow_t.arg.2=const nothrow_t *,tag
func._ZnamSt11align_val_tRKSt9nothrow_t.ret=void *

_Znwj=func
func._Znwj.args=1
func._Znwj.arg.0=unsigned int,size
func._Znwj.ret=void *

_ZnwjRKSt9nothrow_t=func
func._ZnwjRKSt9nothrow_t.args=2
func._ZnwjRKSt9nothrow_t.arg.0=unsigned int,size
func._ZnwjRKSt9nothrow_t.arg.1=const nothrow_t *,tag
func._ZnwjRKSt9nothrow_t.ret=void *

_ZnwjSt11align_val_t=func
func._ZnwjSt11align_val_t.args=2
func._ZnwjSt11align_val_t.arg.0=unsigned int,size
func._ZnwjSt11align_val_t.arg.1=unsigned int,alignment
func._ZnwjSt11align_val_t.ret=void *

_ZnwjSt11align_val_tRKSt9nothrow_t=func
func._ZnwjSt11align_val_tRKSt9nothrow_t.args=3
func._ZnwjSt11align_val_tRKSt9nothrow_t.arg.0=unsigned int,size
func._ZnwjSt11align_val_tRKSt9nothrow_t.arg.1=unsigned int,alignment
func._ZnwjSt11align_val_tRKSt9nothrow_t.arg.2=const nothrow_t *,tag
func._ZnwjSt11align_val_tRKSt9nothrow_t.ret=void *

_Znaj=func
func._Znaj.args=1
func._Znaj.arg.0=unsigned int,size
func._Znaj.ret=void *

_ZnajRKSt9nothrow_t=func
func._ZnajRKSt9nothrow_t.args=2
func._ZnajRKSt9nothrow_t.arg.0=unsigned int,size
func._ZnajRKSt9nothrow_t.arg.1=const nothrow_t *,tag
func._ZnajRKSt9nothrow_t.ret=void *

_ZnajSt11align_val_t=func
func._ZnajSt11align_val_t.args=2
func._ZnajSt11align_val_t.arg.0=unsigned int,size
func._ZnajSt11align_val_t.arg.1=unsigned int,alignment
func._ZnajSt11align_val_t.ret=void *

_ZnajSt11align_val_tRKSt9nothrow_t=func
func._ZnajSt11align_val_tRKSt9nothrow_t.args=3
func._ZnajSt11align_val_tRKSt9nothrow_t.arg.0=unsigned int,size
func._ZnajSt11align_val_tRKSt9nothrow_t.arg.1=unsigned int,alignment
func._ZnajSt11align_val_tRKSt9nothrow_t.arg.2=const nothrow_t *,tag
func._ZnajSt11align_val_tRKSt9nothrow_t.ret=void *

# operator delete: [new.delete.single] and [new.delete.array], C++14 for the
# sized forms and C++17 for the aligned ones, mangled as above.

_ZdlPv=func
func._ZdlPv.args=1
func._ZdlPv.arg.0=void *,ptr
func._ZdlPv.ret=void

_ZdlPvRKSt9nothrow_t=func
func._ZdlPvRKSt9nothrow_t.args=2
func._ZdlPvRKSt9nothrow_t.arg.0=void *,ptr
func._ZdlPvRKSt9nothrow_t.arg.1=const nothrow_t *,tag
func._ZdlPvRKSt9nothrow_t.ret=void

_ZdlPvSt11align_val_t=func
func._ZdlPvSt11align_val_t.args=2
func._ZdlPvSt11align_val_t.arg.0=void *,ptr
func._ZdlPvSt11align_val_t.arg.1=size_t,alignment
func._ZdlPvSt11align_val_t.ret=void

_ZdlPvSt11align_val_tRKSt9nothrow_t=func
func._ZdlPvSt11align_val_tRKSt9nothrow_t.args=3
func._ZdlPvSt11align_val_tRKSt9nothrow_t.arg.0=void *,ptr
func._ZdlPvSt11align_val_tRKSt9nothrow_t.arg.1=size_t,alignment
func._ZdlPvSt11align_val_tRKSt9nothrow_t.arg.2=const nothrow_t *,tag
func._ZdlPvSt11align_val_tRKSt9nothrow_t.ret=void

_ZdlPvm=func
func._ZdlPvm.args=2
func._ZdlPvm.arg.0=void *,ptr
func._ZdlPvm.arg.1=unsigned long,size
func._ZdlPvm.ret=void

_ZdlPvmSt11align_val_t=func
func._ZdlPvmSt11align_val_t.args=3
func._ZdlPvmSt11align_val_t.arg.0=void *,ptr
func._ZdlPvmSt11align_val_t.arg.1=unsigned long,size
func._ZdlPvmSt11align_val_t.arg.2=unsigned long,alignment
func._ZdlPvmSt11align_val_t.ret=void

_ZdlPvj=func
func._ZdlPvj.args=2
func._ZdlPvj.arg.0=void *,ptr
func._ZdlPvj.arg.1=unsigned int,size
func._ZdlPvj.ret=void

_ZdlPvjSt11align_val_t=func
func._ZdlPvjSt11align_val_t.args=3
func._ZdlPvjSt11align_val_t.arg.0=void *,ptr
func._ZdlPvjSt11align_val_t.arg.1=unsigned int,size
func._ZdlPvjSt11align_val_t.arg.2=unsigned int,alignment
func._ZdlPvjSt11align_val_t.ret=void

_ZdaPv=func
func._ZdaPv.args=1
func._ZdaPv.arg.0=void *,ptr
func._ZdaPv.ret=void

_ZdaPvRKSt9nothrow_t=func
func._ZdaPvRKSt9nothrow_t.args=2
func._ZdaPvRKSt9nothrow_t.arg.0=void *,ptr
func._ZdaPvRKSt9nothrow_t.arg.1=const nothrow_t *,tag
func._ZdaPvRKSt9nothrow_t.ret=void

_ZdaPvSt11align_val_t=func
func._ZdaPvSt11align_val_t.args=2
func._ZdaPvSt11align_val_t.arg.0=void *,ptr
func._ZdaPvSt11align_val_t.arg.1=size_t,alignment
func._ZdaPvSt11align_val_t.ret=void

_ZdaPvSt11align_val_tRKSt9nothrow_t=func
func._ZdaPvSt11align_val_tRKSt9nothrow_t.args=3
func._ZdaPvSt11align_val_tRKSt9nothrow_t.arg.0=void *,ptr
func._ZdaPvSt11align_val_tRKSt9nothrow_t.arg.1=size_t,alignment
func._ZdaPvSt11align_val_tRKSt9nothrow_t.arg.2=const nothrow_t *,tag
func._ZdaPvSt11align_val_tRKSt9nothrow_t.ret=void

_ZdaPvm=func
func._ZdaPvm.args=2
func._ZdaPvm.arg.0=void *,ptr
func._ZdaPvm.arg.1=unsigned long,size
func._ZdaPvm.ret=void

_ZdaPvmSt11align_val_t=func
func._ZdaPvmSt11align_val_t.args=3
func._ZdaPvmSt11align_val_t.arg.0=void *,ptr
func._ZdaPvmSt11align_val_t.arg.1=unsigned long,size
func._ZdaPvmSt11align_val_t.arg.2=unsigned long,alignment
func._ZdaPvmSt11align_val_t.ret=void

_ZdaPvj=func
func._ZdaPvj.args=2
func._ZdaPvj.arg.0=void *,ptr
func._ZdaPvj.arg.1=unsigned int,size
func._ZdaPvj.ret=void

_ZdaPvjSt11align_val_t=func
func._ZdaPvjSt11align_val_t.args=3
func._ZdaPvjSt11align_val_t.arg.0=void *,ptr
func._ZdaPvjSt11align_val_t.arg.1=unsigned int,size
func._ZdaPvjSt11align_val_t.arg.2=unsigned int,alignment
func._ZdaPvjSt11align_val_t.ret=void

# The Itanium C++ ABI (itanium-cxx-abi.github.io/cxx-abi/abi.html): 3.3.5.3
# `__cxa_atexit` and `__cxa_finalize`, which glibc, bionic and libSystem export
# alike; 3.3.3 the one-time construction guards, through `void *` since the
# guard's width is the ABI's (64 bits generic, 32 on ARM EABI); 3.2.6 `__cxa_pure_virtual`
# and `__cxa_deleted_virtual`; 2.9.7 `__dynamic_cast`; 3.4 `__cxa_demangle`.
# Each `noreturn` is cxxabi.h's, libsupc++'s and libc++abi's alike.

__cxa_atexit=func
func.__cxa_atexit.args=3
func.__cxa_atexit.arg.0=func,func
func.__cxa_atexit.arg.1=void *,arg
func.__cxa_atexit.arg.2=void *,dso_handle
func.__cxa_atexit.ret=int

__cxa_finalize=func
func.__cxa_finalize.args=1
func.__cxa_finalize.arg.0=void *,dso_handle
func.__cxa_finalize.ret=void

__cxa_guard_acquire=func
func.__cxa_guard_acquire.args=1
func.__cxa_guard_acquire.arg.0=void *,guard_object
func.__cxa_guard_acquire.ret=int

__cxa_guard_release=func
func.__cxa_guard_release.args=1
func.__cxa_guard_release.arg.0=void *,guard_object
func.__cxa_guard_release.ret=void

__cxa_guard_abort=func
func.__cxa_guard_abort.args=1
func.__cxa_guard_abort.arg.0=void *,guard_object
func.__cxa_guard_abort.ret=void

__cxa_pure_virtual=func
func.__cxa_pure_virtual.args=0
func.__cxa_pure_virtual.noreturn=true
func.__cxa_pure_virtual.ret=void

__cxa_deleted_virtual=func
func.__cxa_deleted_virtual.args=0
func.__cxa_deleted_virtual.noreturn=true
func.__cxa_deleted_virtual.ret=void

__cxa_bad_cast=func
func.__cxa_bad_cast.args=0
func.__cxa_bad_cast.noreturn=true
func.__cxa_bad_cast.ret=void

__cxa_bad_typeid=func
func.__cxa_bad_typeid.args=0
func.__cxa_bad_typeid.noreturn=true
func.__cxa_bad_typeid.ret=void

__cxa_throw_bad_array_new_length=func
func.__cxa_throw_bad_array_new_length.args=0
func.__cxa_throw_bad_array_new_length.noreturn=true
func.__cxa_throw_bad_array_new_length.ret=void

__dynamic_cast=func
func.__dynamic_cast.args=4
func.__dynamic_cast.arg.0=const void *,sub
func.__dynamic_cast.arg.1=const __class_type_info *,src
func.__dynamic_cast.arg.2=const __class_type_info *,dst
func.__dynamic_cast.arg.3=ptrdiff_t,src2dst_offset
func.__dynamic_cast.ret=void *

__cxa_demangle=func
func.__cxa_demangle.args=4
func.__cxa_demangle.arg.0=const char *,mangled_name
func.__cxa_demangle.arg.1=char *,output_buffer
func.__cxa_demangle.arg.2=size_t *,length
func.__cxa_demangle.arg.3=int *,status
func.__cxa_demangle.ret=char *

# The Itanium C++ ABI's exception handling (itanium-cxx-abi.github.io/cxx-abi/
# abi-eh.html): 2.4.2 allocation, 2.4.3 `__cxa_throw`, 2.5.3 and 2.5.4 catching
# and rethrowing, 2.5.5 `__cxa_call_unexpected`; 1.4.3 `_Unwind_Resume`, which
# resumes propagation in another frame and never returns here (GCC's
# builtins.def declares it ATTR_NORETURN_NOTHROW_LIST). A type the ABI names
# in a namespace is written without it: the spellings are C.

__cxa_allocate_exception=func
func.__cxa_allocate_exception.args=1
func.__cxa_allocate_exception.arg.0=size_t,thrown_size
func.__cxa_allocate_exception.ret=void *

__cxa_free_exception=func
func.__cxa_free_exception.args=1
func.__cxa_free_exception.arg.0=void *,thrown_exception
func.__cxa_free_exception.ret=void

__cxa_throw=func
func.__cxa_throw.args=3
func.__cxa_throw.arg.0=void *,thrown_exception
func.__cxa_throw.arg.1=type_info *,tinfo
func.__cxa_throw.arg.2=func,dest
func.__cxa_throw.noreturn=true
func.__cxa_throw.ret=void

__cxa_get_exception_ptr=func
func.__cxa_get_exception_ptr.args=1
func.__cxa_get_exception_ptr.arg.0=void *,exception_object
func.__cxa_get_exception_ptr.ret=void *

__cxa_begin_catch=func
func.__cxa_begin_catch.args=1
func.__cxa_begin_catch.arg.0=void *,exception_object
func.__cxa_begin_catch.ret=void *

__cxa_end_catch=func
func.__cxa_end_catch.args=0
func.__cxa_end_catch.ret=void

__cxa_rethrow=func
func.__cxa_rethrow.args=0
func.__cxa_rethrow.noreturn=true
func.__cxa_rethrow.ret=void

__cxa_call_unexpected=func
func.__cxa_call_unexpected.args=1
func.__cxa_call_unexpected.arg.0=void *,exception_object
func.__cxa_call_unexpected.noreturn=true
func.__cxa_call_unexpected.ret=void

_Unwind_Resume=func
func._Unwind_Resume.args=1
func._Unwind_Resume.arg.0=struct _Unwind_Exception *,exception_object
func._Unwind_Resume.noreturn=true
func._Unwind_Resume.ret=void

# `std::terminate`, [[noreturn]] by [except.terminate]; and libstdc++'s
# `std::__throw_*` (bits/functexcept.h), each __attribute__((__noreturn__)).
# Only libstdc++ exports these; the mangling states each parameter, and
# `_ZSt24__throw_out_of_range_fmtPKcz` is variadic (`z`).

_ZSt9terminatev=func
func._ZSt9terminatev.args=0
func._ZSt9terminatev.noreturn=true
func._ZSt9terminatev.ret=void

_ZSt21__throw_bad_exceptionv=func
func._ZSt21__throw_bad_exceptionv.args=0
func._ZSt21__throw_bad_exceptionv.noreturn=true
func._ZSt21__throw_bad_exceptionv.ret=void

_ZSt17__throw_bad_allocv=func
func._ZSt17__throw_bad_allocv.args=0
func._ZSt17__throw_bad_allocv.noreturn=true
func._ZSt17__throw_bad_allocv.ret=void

_ZSt28__throw_bad_array_new_lengthv=func
func._ZSt28__throw_bad_array_new_lengthv.args=0
func._ZSt28__throw_bad_array_new_lengthv.noreturn=true
func._ZSt28__throw_bad_array_new_lengthv.ret=void

_ZSt16__throw_bad_castv=func
func._ZSt16__throw_bad_castv.args=0
func._ZSt16__throw_bad_castv.noreturn=true
func._ZSt16__throw_bad_castv.ret=void

_ZSt18__throw_bad_typeidv=func
func._ZSt18__throw_bad_typeidv.args=0
func._ZSt18__throw_bad_typeidv.noreturn=true
func._ZSt18__throw_bad_typeidv.ret=void

_ZSt19__throw_logic_errorPKc=func
func._ZSt19__throw_logic_errorPKc.args=1
func._ZSt19__throw_logic_errorPKc.arg.0=const char *,what
func._ZSt19__throw_logic_errorPKc.noreturn=true
func._ZSt19__throw_logic_errorPKc.ret=void

_ZSt20__throw_domain_errorPKc=func
func._ZSt20__throw_domain_errorPKc.args=1
func._ZSt20__throw_domain_errorPKc.arg.0=const char *,what
func._ZSt20__throw_domain_errorPKc.noreturn=true
func._ZSt20__throw_domain_errorPKc.ret=void

_ZSt24__throw_invalid_argumentPKc=func
func._ZSt24__throw_invalid_argumentPKc.args=1
func._ZSt24__throw_invalid_argumentPKc.arg.0=const char *,what
func._ZSt24__throw_invalid_argumentPKc.noreturn=true
func._ZSt24__throw_invalid_argumentPKc.ret=void

_ZSt20__throw_length_errorPKc=func
func._ZSt20__throw_length_errorPKc.args=1
func._ZSt20__throw_length_errorPKc.arg.0=const char *,what
func._ZSt20__throw_length_errorPKc.noreturn=true
func._ZSt20__throw_length_errorPKc.ret=void

_ZSt20__throw_out_of_rangePKc=func
func._ZSt20__throw_out_of_rangePKc.args=1
func._ZSt20__throw_out_of_rangePKc.arg.0=const char *,what
func._ZSt20__throw_out_of_rangePKc.noreturn=true
func._ZSt20__throw_out_of_rangePKc.ret=void

_ZSt24__throw_out_of_range_fmtPKcz=func
func._ZSt24__throw_out_of_range_fmtPKcz.args=2
func._ZSt24__throw_out_of_range_fmtPKcz.arg.0=const char *,format
func._ZSt24__throw_out_of_range_fmtPKcz.arg.1=,...
func._ZSt24__throw_out_of_range_fmtPKcz.noreturn=true
func._ZSt24__throw_out_of_range_fmtPKcz.ret=void

_ZSt21__throw_runtime_errorPKc=func
func._ZSt21__throw_runtime_errorPKc.args=1
func._ZSt21__throw_runtime_errorPKc.arg.0=const char *,what
func._ZSt21__throw_runtime_errorPKc.noreturn=true
func._ZSt21__throw_runtime_errorPKc.ret=void

_ZSt19__throw_range_errorPKc=func
func._ZSt19__throw_range_errorPKc.args=1
func._ZSt19__throw_range_errorPKc.arg.0=const char *,what
func._ZSt19__throw_range_errorPKc.noreturn=true
func._ZSt19__throw_range_errorPKc.ret=void

_ZSt22__throw_overflow_errorPKc=func
func._ZSt22__throw_overflow_errorPKc.args=1
func._ZSt22__throw_overflow_errorPKc.arg.0=const char *,what
func._ZSt22__throw_overflow_errorPKc.noreturn=true
func._ZSt22__throw_overflow_errorPKc.ret=void

_ZSt23__throw_underflow_errorPKc=func
func._ZSt23__throw_underflow_errorPKc.args=1
func._ZSt23__throw_underflow_errorPKc.arg.0=const char *,what
func._ZSt23__throw_underflow_errorPKc.noreturn=true
func._ZSt23__throw_underflow_errorPKc.ret=void

_ZSt19__throw_ios_failurePKc=func
func._ZSt19__throw_ios_failurePKc.args=1
func._ZSt19__throw_ios_failurePKc.arg.0=const char *,what
func._ZSt19__throw_ios_failurePKc.noreturn=true
func._ZSt19__throw_ios_failurePKc.ret=void

_ZSt19__throw_ios_failurePKci=func
func._ZSt19__throw_ios_failurePKci.args=2
func._ZSt19__throw_ios_failurePKci.arg.0=const char *,what
func._ZSt19__throw_ios_failurePKci.arg.1=int,error
func._ZSt19__throw_ios_failurePKci.noreturn=true
func._ZSt19__throw_ios_failurePKci.ret=void

_ZSt20__throw_system_errori=func
func._ZSt20__throw_system_errori.args=1
func._ZSt20__throw_system_errori.arg.0=int,error
func._ZSt20__throw_system_errori.noreturn=true
func._ZSt20__throw_system_errori.ret=void

_ZSt20__throw_future_errori=func
func._ZSt20__throw_future_errori.args=1
func._ZSt20__throw_future_errori.arg.0=int,error
func._ZSt20__throw_future_errori.noreturn=true
func._ZSt20__throw_future_errori.ret=void

_ZSt25__throw_bad_function_callv=func
func._ZSt25__throw_bad_function_callv.args=0
func._ZSt25__throw_bad_function_callv.noreturn=true
func._ZSt25__throw_bad_function_callv.ret=void
