/**************************************************************************/ /* mmglue: midipix architecture- and target-specific bits for musl libc */ /* Copyright (C) 2013--2023 SysDeer Technologies, LLC */ /* Released under the Standard MIT License; see COPYING.MMGLUE. */ /**************************************************************************/ #include #include #include #include "psxseh.h" extern const struct __seh_vtbl * __eh_vtbl; int __unwind_exception_filter( struct __exception_record * erec, void * fctx, mcontext_t * tctx, struct __dispatcher_context * dctx, __unwind_personality_routine uw_routine) { return __eh_vtbl->seh_exception_filter( erec,fctx,tctx,dctx,uw_routine); } int __unwind_exception_handler( struct __exception_record * erec, uintptr_t fbase, mcontext_t * tctx, struct __dispatcher_context * dctx) { return __eh_vtbl->seh_exception_handler( erec,fbase,tctx,dctx); } int __unwind_raise_exception(struct __unwind_exception * e) { return __eh_vtbl->seh_unwind_raise_exception(e); } void __unwind_delete_exception(struct __unwind_exception * e) { return __eh_vtbl->seh_unwind_delete_exception(e); } void __unwind_resume(struct __unwind_exception * e) { return __eh_vtbl->seh_unwind_resume(e); } int __unwind_resume_or_rethrow(struct __unwind_exception * e) { return __eh_vtbl->seh_unwind_resume_or_rethrow(e); } int __unwind_force( struct __unwind_exception * e, int (*stop_fn)( int, int, uintptr_t, struct __unwind_exception *, struct __unwind_context *, void *), void * ctx) { return __eh_vtbl->seh_unwind_force(e,stop_fn,ctx); } void * __unwind_get_language_specific_data(struct __unwind_context * uwctx) { return __eh_vtbl->seh_unwind_get_language_specific_data(uwctx); } int __unwind_backtrace( enum __unwind_reason_code (*trace_fn)( struct __unwind_context *, void *), void * ctx) { return __eh_vtbl->seh_unwind_backtrace(trace_fn,ctx); } int __unwind_calltrace() { return __eh_vtbl->seh_unwind_calltrace(); } uintptr_t __unwind_get_ip(const struct __unwind_context * uwctx) { return __eh_vtbl->seh_unwind_get_ip(uwctx); } void __unwind_set_ip(struct __unwind_context * uwctx, uintptr_t ip) { return __eh_vtbl->seh_unwind_set_ip(uwctx,ip); } uintptr_t __unwind_get_gr(const struct __unwind_context * uwctx, int idx) { return __eh_vtbl->seh_unwind_get_gr(uwctx,idx); } void __unwind_set_gr(struct __unwind_context * uwctx, int idx, uintptr_t rval) { return __eh_vtbl->seh_unwind_set_gr(uwctx,idx,rval); } uintptr_t __unwind_get_data_rel_base(const struct __unwind_context * uwctx) { return __eh_vtbl->seh_unwind_get_data_rel_base(uwctx); } uintptr_t __unwind_get_text_rel_base(const struct __unwind_context * uwctx) { return __eh_vtbl->seh_unwind_get_text_rel_base(uwctx); } uintptr_t __unwind_get_cfa(const struct __unwind_context * uwctx) { return __eh_vtbl->seh_unwind_get_cfa(uwctx); } uintptr_t __unwind_get_ip_info(const struct __unwind_context * uwctx, int * pinfo) { return __eh_vtbl->seh_unwind_get_ip_info(uwctx,pinfo); } uintptr_t __unwind_get_region_start(const struct __unwind_context * uwctx) { return __eh_vtbl->seh_unwind_get_region_start(uwctx); } void * __unwind_find_enclosing_function(const void * addr) { return __eh_vtbl->seh_unwind_find_enclosing_function(addr); }