module vrt.ext.unwind

Code Map

module vrt.ext.unwind;


enum _Unwind_Reason_Code
{
	NO_REASON,
	FOREIGN_EXCEPTION_CAUGHT,
	FATAL_PHASE2_ERROR,
	FATAL_PHASE1_ERROR,
	NORMAL_STOP,
	END_OF_STACK,
	HANDLER_FOUND,
	INSTALL_CONTEXT,
	CONTINUE_UNWIND,
}

enum _Unwind_Action
{
	SEARCH_PHASE,
	CLEANUP_PHASE,
	HANDLER_FRAME,
	FORCE_UNWIND,
	END_OF_STACK,
}

alias _Unwind_Exception_Cleanup_Fn = fn (_Unwind_Reason_Code, _Unwind_Exception*) (void);

struct _Unwind_Exception
{
public:
	exception_class: u64;
	exception_cleanup: _Unwind_Exception_Cleanup_Fn;
	private_1: uintptr_t;
	private_2: uintptr_t;
}

struct _Unwind_Context
{
}

fn _Unwind_Resume(_Unwind_Exception*) i32;
fn _Unwind_RaiseException(_Unwind_Exception*) i32;
fn _Unwind_GetLanguageSpecificData(ctx: _Unwind_Context*) u8*;
fn _Unwind_GetRegionStart(ctx: _Unwind_Context*) size_t;
fn _Unwind_GetTextRelBase(ctx: _Unwind_Context*) size_t;
fn _Unwind_GetDataRelBase(ctx: _Unwind_Context*) size_t;
fn _Unwind_GetGR(ctx: _Unwind_Context*, i: i32) size_t;
fn _Unwind_GetIP(ctx: _Unwind_Context*) uintptr_t;
fn _Unwind_SetGR(ctx: _Unwind_Context*, i: i32, n: size_t);
fn _Unwind_SetIP(ctx: _Unwind_Context*, new_value: uintptr_t);