56 lines · c
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//8// This file implements the functionality associated with the terminate_handler,9// unexpected_handler, and new_handler.10//===----------------------------------------------------------------------===//11 12#ifndef _CXA_HANDLERS_H13#define _CXA_HANDLERS_H14 15#include "__cxxabi_config.h"16 17#include <exception>18 19namespace std20{21 22_LIBCXXABI_HIDDEN _LIBCXXABI_NORETURN23void24__unexpected(unexpected_handler func);25 26_LIBCXXABI_HIDDEN _LIBCXXABI_NORETURN27void28__terminate(terminate_handler func) noexcept;29 30} // std31 32extern "C"33{34 35_LIBCXXABI_DATA_VIS extern void (*__cxa_terminate_handler)();36_LIBCXXABI_DATA_VIS extern void (*__cxa_unexpected_handler)();37_LIBCXXABI_DATA_VIS extern void (*__cxa_new_handler)();38 39/*40 41 At some point in the future these three symbols will become42 C++11 atomic variables:43 44 extern std::atomic<std::terminate_handler> __cxa_terminate_handler;45 extern std::atomic<std::unexpected_handler> __cxa_unexpected_handler;46 extern std::atomic<std::new_handler> __cxa_new_handler;47 48 This change will not impact their ABI. But it will allow for a49 portable performance optimization.50 51*/52 53} // extern "C"54 55#endif // _CXA_HANDLERS_H56