OLD | NEW |
(Empty) | |
| 1 //===------------------------- cxa_handlers.cpp ---------------------------===// |
| 2 // |
| 3 // The LLVM Compiler Infrastructure |
| 4 // |
| 5 // This file is dual licensed under the MIT and the University of Illinois Open |
| 6 // Source Licenses. See LICENSE.TXT for details. |
| 7 // |
| 8 // |
| 9 // This file implements the functionality associated with the terminate_handler, |
| 10 // unexpected_handler, and new_handler. |
| 11 //===----------------------------------------------------------------------===// |
| 12 |
| 13 #ifndef _CXA_HANDLERS_H |
| 14 #define _CXA_HANDLERS_H |
| 15 |
| 16 #include <exception> |
| 17 |
| 18 namespace std |
| 19 { |
| 20 |
| 21 __attribute__((visibility("hidden"), noreturn)) |
| 22 void |
| 23 __unexpected(unexpected_handler func); |
| 24 |
| 25 __attribute__((visibility("hidden"), noreturn)) |
| 26 void |
| 27 __terminate(terminate_handler func) _NOEXCEPT; |
| 28 |
| 29 } // std |
| 30 |
| 31 extern "C" |
| 32 { |
| 33 |
| 34 extern void (*__cxa_terminate_handler)(); |
| 35 extern void (*__cxa_unexpected_handler)(); |
| 36 extern void (*__cxa_new_handler)(); |
| 37 |
| 38 /* |
| 39 |
| 40 At some point in the future these three symbols will become |
| 41 C++11 atomic variables: |
| 42 |
| 43 extern std::atomic<std::terminate_handler> __cxa_terminate_handler; |
| 44 extern std::atomic<std::unexpected_handler> __cxa_unexpected_handler; |
| 45 extern std::atomic<std::new_handler> __cxa_new_handler; |
| 46 |
| 47 This change will not impact their ABI. But it will allow for a |
| 48 portable performance optimization. |
| 49 |
| 50 */ |
| 51 |
| 52 } // extern "C" |
| 53 |
| 54 #endif // _CXA_HANDLERS_H |
OLD | NEW |