mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-10-30 20:51:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			64 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include <cstdlib>
 | |
| #include <cstdio>
 | |
| #include <exception>
 | |
| #include <bits/functexcept.h>
 | |
| #include <sdkconfig.h>
 | |
| 
 | |
| #ifndef CONFIG_COMPILER_CXX_EXCEPTIONS
 | |
| 
 | |
| const char *FATAL_EXCEPTION = "Fatal C++ exception: ";
 | |
| 
 | |
| extern "C" void __cxx_fatal_exception(void)
 | |
| {
 | |
|     abort();
 | |
| }
 | |
| 
 | |
| extern "C" bool __cxx_fatal_exception_bool(void)
 | |
| {
 | |
|     __cxx_fatal_exception();
 | |
|     return false;
 | |
| }
 | |
| 
 | |
| extern "C" void __cxx_fatal_exception_message(const char *msg)
 | |
| {
 | |
|     printf("%s%s\n", FATAL_EXCEPTION, msg);
 | |
|     abort();
 | |
| }
 | |
| 
 | |
| extern "C" void __cxx_fatal_exception_message_va(const char *msg, ...)
 | |
| {
 | |
|     __cxx_fatal_exception_message(msg);
 | |
| }
 | |
| 
 | |
| extern "C" void __cxx_fatal_exception_int(int i)
 | |
| {
 | |
|     printf("%s (%d)\n", FATAL_EXCEPTION, i);
 | |
|     abort();
 | |
| }
 | |
| 
 | |
| /* The following definitions are needed because libstdc++ is also compiled with
 | |
|    __throw_exception_again defined to throw, and some other exception code in a few places.
 | |
| 
 | |
|    This cause exception handler code to be emitted in the library even though it's mostly
 | |
|    unreachable (as any libstdc++ "throw" will first call one of the above stubs, which will abort).
 | |
| 
 | |
|    If these are left out, a bunch of unwanted exception handler code is linked.
 | |
| 
 | |
|    Note: these function prototypes are not correct.
 | |
| */
 | |
| 
 | |
| extern "C" void __cxa_allocate_exception(void) __attribute__((alias("__cxx_fatal_exception")));
 | |
| extern "C" void __cxa_allocate_dependent_exception(void) __attribute__((alias("__cxx_fatal_exception")));
 | |
| extern "C" void __cxa_begin_catch(void) __attribute__((alias("__cxx_fatal_exception")));
 | |
| extern "C" void __cxa_end_catch(void) __attribute__((alias("__cxx_fatal_exception")));
 | |
| extern "C" void __cxa_get_exception_ptr(void) __attribute__((alias("__cxx_fatal_exception")));
 | |
| extern "C" void __cxa_free_exception(void) __attribute__((alias("__cxx_fatal_exception")));
 | |
| extern "C" void __cxa_free_dependent_exception(void) __attribute__((alias("__cxx_fatal_exception")));
 | |
| extern "C" void __cxa_rethrow(void) __attribute__((alias("__cxx_fatal_exception")));
 | |
| extern "C" void __cxa_throw(void) __attribute__((alias("__cxx_fatal_exception")));
 | |
| extern "C" void __cxa_call_terminate(void) __attribute__((alias("__cxx_fatal_exception")));
 | |
| 
 | |
| bool std::uncaught_exception() __attribute__((alias("__cxx_fatal_exception_bool")));
 | |
| 
 | |
| #endif // CONFIG_COMPILER_CXX_EXCEPTIONS
 | 
