#ifndef _SYS_UNWIND_H #define _SYS_UNWIND_H #include #include #ifdef __cplusplus extern "C" { #endif enum __unwind_reason_code { __URC_NO_REASON, __URC_FOREIGN_EXCEPTION, __URC_FATAL_PHASE2, __URC_FATAL_PHASE1, __URC_NORMAL_STOP, __URC_END_OF_STACK, __URC_HANDLER_FOUND, __URC_INSTALL_CONTEXT, __URC_CONTINUE_UNWIND, }; #define __UA_SEARCH_PHASE 0x01 #define __UA_CLEANUP_PHASE 0x02 #define __UA_HANDLER_FRAME 0x04 #define __UA_FORCE_UNWIND 0x08 #define __UA_END_OF_STACK 0x10 struct __exception_record; struct __dispatcher_context; struct __unwind_exception; struct __unwind_context; typedef enum __unwind_reason_code(*__unwind_personality_routine)( int, int, uintptr_t, struct __unwind_exception *, struct __unwind_context *); typedef void (*__unwind_exception_cleanup_routine)( enum __unwind_reason_code, struct __unwind_exception *); struct __unwind_exception { uintptr_t exception_class; __unwind_exception_cleanup_routine exception_cleanup; uintptr_t __opaque[6]; }; int __unwind_exception_filter( struct __exception_record *, void *, mcontext_t *, struct __dispatcher_context *, __unwind_personality_routine); int __unwind_exception_handler( struct __exception_record *, uintptr_t, mcontext_t *, struct __dispatcher_context *); int __unwind_raise_exception( struct __unwind_exception *); void __unwind_delete_exception( struct __unwind_exception *); void __unwind_resume( struct __unwind_exception *); int __unwind_resume_or_rethrow( struct __unwind_exception *); int __unwind_force( struct __unwind_exception *, int (*)( int, int, uintptr_t, struct __unwind_exception *, struct __unwind_context *, void *), void *); void * __unwind_get_language_specific_data( struct __unwind_context *); int __unwind_backtrace( enum __unwind_reason_code (*)( struct __unwind_context *, void *), void *); int __unwind_calltrace(); uintptr_t __unwind_get_ip(const struct __unwind_context *); void __unwind_set_ip(struct __unwind_context *, uintptr_t); uintptr_t __unwind_get_gr(const struct __unwind_context *, int); void __unwind_set_gr(struct __unwind_context *, int, uintptr_t); uintptr_t __unwind_get_data_rel_base(const struct __unwind_context *); uintptr_t __unwind_get_text_rel_base(const struct __unwind_context *); uintptr_t __unwind_get_cfa(const struct __unwind_context *); uintptr_t __unwind_get_ip_info(const struct __unwind_context *, int *); uintptr_t __unwind_get_region_start(const struct __unwind_context *); void * __unwind_find_enclosing_function(const void *); #ifdef __cplusplus } #endif #endif