summaryrefslogtreecommitdiffhomepage
path: root/arch
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2019-03-10 06:30:27 +0000
committermidipix <writeonce@midipix.org>2019-03-12 02:27:22 -0400
commitc2c8cdde83575bc555c575daa208a1248601eb4a (patch)
tree98d3ed7a65357a9de53b7c49da8ab6688cd34e1b /arch
parent1a03f61ed4c777d59d714a3663cb604c1df52b2d (diff)
downloadmmglue-c2c8cdde83575bc555c575daa208a1248601eb4a.tar.bz2
mmglue-c2c8cdde83575bc555c575daa208a1248601eb4a.tar.xz
abi: framework interfaces: imported psxseh.h.
Diffstat (limited to 'arch')
-rw-r--r--arch/nt64/psxseh.h94
1 files changed, 94 insertions, 0 deletions
diff --git a/arch/nt64/psxseh.h b/arch/nt64/psxseh.h
new file mode 100644
index 0000000..7809979
--- /dev/null
+++ b/arch/nt64/psxseh.h
@@ -0,0 +1,94 @@
+#ifndef _PSXSEH_H_
+#define _PSXSEH_H_
+
+
+enum __unwind_reason_code;
+
+struct _nt_exception_record;
+struct _nt_dispatcher_context;
+
+struct __unwind_exception;
+struct __unwind_context;
+
+
+
+
+typedef void * __thread_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 __seh_vtbl {
+ int (*seh_exception_filter)(
+ struct _nt_exception_record *,
+ void *,
+ __thread_context *,
+ struct _nt_dispatcher_context *,
+ __unwind_personality_routine);
+
+ int (*seh_exception_handler)(
+ struct _nt_exception_record *,
+ uintptr_t,
+ __thread_context *,
+ struct _nt_dispatcher_context *);
+
+ int (*seh_unwind_raise_exception)(
+ struct __unwind_exception *);
+
+ void (*seh_unwind_delete_exception)(
+ struct __unwind_exception *);
+
+ void (*seh_unwind_resume)(
+ struct __unwind_exception *);
+
+ int (*seh_unwind_resume_or_rethrow)(
+ struct __unwind_exception *);
+
+ int (*seh_unwind_force)(
+ struct __unwind_exception *,
+ int (*)(
+ int, int, uintptr_t,
+ struct __unwind_exception *,
+ struct __unwind_context *,
+ void *),
+ void *);
+
+ void * (*seh_unwind_get_language_specific_data)(
+ struct __unwind_context *);
+
+ int (*seh_unwind_backtrace)(
+ enum __unwind_reason_code (*)(
+ struct __unwind_context *,
+ void *),
+ void *);
+
+ int (*seh_unwind_calltrace)();
+
+
+ uintptr_t (*seh_unwind_get_ip)(const struct __unwind_context *);
+ void (*seh_unwind_set_ip)(struct __unwind_context *, uintptr_t);
+
+ uintptr_t (*seh_unwind_get_gr)(const struct __unwind_context *, int);
+ void (*seh_unwind_set_gr)(struct __unwind_context *, int, uintptr_t);
+
+ uintptr_t (*seh_unwind_get_data_rel_base)(const struct __unwind_context *);
+ uintptr_t (*seh_unwind_get_text_rel_base)(const struct __unwind_context *);
+
+ uintptr_t (*seh_unwind_get_cfa)(const struct __unwind_context *);
+ uintptr_t (*seh_unwind_get_ip_info)(const struct __unwind_context *, int *);
+
+ uintptr_t (*seh_unwind_get_region_start)(const struct __unwind_context *);
+ void * (*seh_unwind_find_enclosing_function)(const void *);
+
+ int (*__seh_vtbl_reserved[12]);
+};
+
+#endif