diff options
-rw-r--r-- | examples/ExceptionDemo/ExceptionDemo.cpp | 72 |
1 files changed, 9 insertions, 63 deletions
diff --git a/examples/ExceptionDemo/ExceptionDemo.cpp b/examples/ExceptionDemo/ExceptionDemo.cpp index 315f95ad463..1b2f3450530 100644 --- a/examples/ExceptionDemo/ExceptionDemo.cpp +++ b/examples/ExceptionDemo/ExceptionDemo.cpp @@ -79,64 +79,12 @@ #include <inttypes.h> +#include <unwind.h> + #ifndef USE_GLOBAL_STR_CONSTS #define USE_GLOBAL_STR_CONSTS true #endif -// System C++ ABI unwind types from: -// http://mentorembedded.github.com/cxx-abi/abi-eh.html (v1.22) - -extern "C" { - - typedef enum { - _URC_NO_REASON = 0, - _URC_FOREIGN_EXCEPTION_CAUGHT = 1, - _URC_FATAL_PHASE2_ERROR = 2, - _URC_FATAL_PHASE1_ERROR = 3, - _URC_NORMAL_STOP = 4, - _URC_END_OF_STACK = 5, - _URC_HANDLER_FOUND = 6, - _URC_INSTALL_CONTEXT = 7, - _URC_CONTINUE_UNWIND = 8 - } _Unwind_Reason_Code; - - typedef enum { - _UA_SEARCH_PHASE = 1, - _UA_CLEANUP_PHASE = 2, - _UA_HANDLER_FRAME = 4, - _UA_FORCE_UNWIND = 8, - _UA_END_OF_STACK = 16 - } _Unwind_Action; - - struct _Unwind_Exception; - - typedef void (*_Unwind_Exception_Cleanup_Fn) (_Unwind_Reason_Code, - struct _Unwind_Exception *); - - struct _Unwind_Exception { - uint64_t exception_class; - _Unwind_Exception_Cleanup_Fn exception_cleanup; - - uintptr_t private_1; - uintptr_t private_2; - - // @@@ The IA-64 ABI says that this structure must be double-word aligned. - // Taking that literally does not make much sense generically. Instead - // we provide the maximum alignment required by any type for the machine. - } __attribute__((__aligned__)); - - struct _Unwind_Context; - typedef struct _Unwind_Context *_Unwind_Context_t; - - extern const uint8_t *_Unwind_GetLanguageSpecificData (_Unwind_Context_t c); - extern uintptr_t _Unwind_GetGR (_Unwind_Context_t c, int i); - extern void _Unwind_SetGR (_Unwind_Context_t c, int i, uintptr_t n); - extern void _Unwind_SetIP (_Unwind_Context_t, uintptr_t new_value); - extern uintptr_t _Unwind_GetIP (_Unwind_Context_t context); - extern uintptr_t _Unwind_GetRegionStart (_Unwind_Context_t context); - -} // extern "C" - // // Example types // @@ -642,12 +590,11 @@ static bool handleActionValue(int64_t *resultAction, /// @param exceptionObject thrown _Unwind_Exception instance. /// @param context unwind system context /// @returns minimally supported unwinding control indicator -static _Unwind_Reason_Code handleLsda(int version, - const uint8_t *lsda, +static _Unwind_Reason_Code handleLsda(int version, const uint8_t *lsda, _Unwind_Action actions, - uint64_t exceptionClass, - struct _Unwind_Exception *exceptionObject, - _Unwind_Context_t context) { + _Unwind_Exception_Class exceptionClass, + struct _Unwind_Exception *exceptionObject, + struct _Unwind_Context *context) { _Unwind_Reason_Code ret = _URC_CONTINUE_UNWIND; if (!lsda) @@ -826,11 +773,10 @@ static _Unwind_Reason_Code handleLsda(int version, /// @param exceptionObject thrown _Unwind_Exception instance. /// @param context unwind system context /// @returns minimally supported unwinding control indicator -_Unwind_Reason_Code ourPersonality(int version, - _Unwind_Action actions, - uint64_t exceptionClass, +_Unwind_Reason_Code ourPersonality(int version, _Unwind_Action actions, + _Unwind_Exception_Class exceptionClass, struct _Unwind_Exception *exceptionObject, - _Unwind_Context_t context) { + struct _Unwind_Context *context) { #ifdef DEBUG fprintf(stderr, "We are in ourPersonality(...):actions is <%d>.\n", |