Blame src/arch/nt64/unwind.c

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