1e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnant//===------------------------- cxa_handlers.cpp ---------------------------===// 2e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnant// 3e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnant// The LLVM Compiler Infrastructure 4e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnant// 5e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnant// 8e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnant// 9e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnant// This file implements the functionality associated with the terminate_handler, 10e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnant// unexpected_handler, and new_handler. 11e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnant//===----------------------------------------------------------------------===// 12e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnant 130f80bb79c0181c706cf6acce44f854e96ecaf755Howard Hinnant#ifndef _CXA_HANDLERS_H 140f80bb79c0181c706cf6acce44f854e96ecaf755Howard Hinnant#define _CXA_HANDLERS_H 150f80bb79c0181c706cf6acce44f854e96ecaf755Howard Hinnant 16e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnant#include <exception> 17e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnant 18e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnantnamespace std 19e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnant{ 20e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnant 213f034b77daeb3d7ab5a0c5167b2ffece7c9cbd28Howard Hinnant__attribute__((visibility("hidden"), noreturn)) 22e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnantvoid 23e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnant__unexpected(unexpected_handler func); 24e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnant 253f034b77daeb3d7ab5a0c5167b2ffece7c9cbd28Howard Hinnant__attribute__((visibility("hidden"), noreturn)) 26e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnantvoid 27e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnant__terminate(terminate_handler func) _NOEXCEPT; 28e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnant 29e8fcf83b576ff70ba5886fbd73434218a68ac414Howard Hinnant} // std 300f80bb79c0181c706cf6acce44f854e96ecaf755Howard Hinnant 310f80bb79c0181c706cf6acce44f854e96ecaf755Howard Hinnantextern "C" 320f80bb79c0181c706cf6acce44f854e96ecaf755Howard Hinnant{ 330f80bb79c0181c706cf6acce44f854e96ecaf755Howard Hinnant 340f80bb79c0181c706cf6acce44f854e96ecaf755Howard Hinnantextern void (*__cxa_terminate_handler)(); 350f80bb79c0181c706cf6acce44f854e96ecaf755Howard Hinnantextern void (*__cxa_unexpected_handler)(); 360f80bb79c0181c706cf6acce44f854e96ecaf755Howard Hinnantextern void (*__cxa_new_handler)(); 370f80bb79c0181c706cf6acce44f854e96ecaf755Howard Hinnant 384cfb63f07516ceff10be81c7dfac6c18122df782Howard Hinnant/* 394cfb63f07516ceff10be81c7dfac6c18122df782Howard Hinnant 404cfb63f07516ceff10be81c7dfac6c18122df782Howard Hinnant At some point in the future these three symbols will become 414cfb63f07516ceff10be81c7dfac6c18122df782Howard Hinnant C++11 atomic variables: 424cfb63f07516ceff10be81c7dfac6c18122df782Howard Hinnant 434cfb63f07516ceff10be81c7dfac6c18122df782Howard Hinnant extern std::atomic<std::terminate_handler> __cxa_terminate_handler; 444cfb63f07516ceff10be81c7dfac6c18122df782Howard Hinnant extern std::atomic<std::unexpected_handler> __cxa_unexpected_handler; 454cfb63f07516ceff10be81c7dfac6c18122df782Howard Hinnant extern std::atomic<std::new_handler> __cxa_new_handler; 464cfb63f07516ceff10be81c7dfac6c18122df782Howard Hinnant 474cfb63f07516ceff10be81c7dfac6c18122df782Howard Hinnant This change will not impact their ABI. But it will allow for a 486d00feffc82d4f8c0201242291a0e93b492e1dd4Howard Hinnant portable performance optimization. 494cfb63f07516ceff10be81c7dfac6c18122df782Howard Hinnant 504cfb63f07516ceff10be81c7dfac6c18122df782Howard Hinnant*/ 514cfb63f07516ceff10be81c7dfac6c18122df782Howard Hinnant 520f80bb79c0181c706cf6acce44f854e96ecaf755Howard Hinnant} // extern "C" 530f80bb79c0181c706cf6acce44f854e96ecaf755Howard Hinnant 540f80bb79c0181c706cf6acce44f854e96ecaf755Howard Hinnant#endif // _CXA_HANDLERS_H 55