summaryrefslogtreecommitdiff
path: root/hurd/thread.h
diff options
context:
space:
mode:
Diffstat (limited to 'hurd/thread.h')
-rw-r--r--hurd/thread.h19
1 files changed, 17 insertions, 2 deletions
diff --git a/hurd/thread.h b/hurd/thread.h
index 709e9ec..8290b6e 100644
--- a/hurd/thread.h
+++ b/hurd/thread.h
@@ -33,6 +33,18 @@ enum
RM_thread_exregs = 600,
};
+struct exception_frame
+{
+#if i386
+ l4_word_t regs[5];
+#else
+# error Not ported to this architecture!
+#endif
+ struct exception_frame *next;
+ struct exception_frame *prev;
+ l4_msg_t exception;
+};
+
struct exception_page
{
union
@@ -59,6 +71,11 @@ struct exception_page
/* The state of the thread (as returned by _L4_exchange_regs) */
l4_word_t saved_thread_state;
+ /* Top of the exception frame stack. */
+ struct exception_frame *exception_stack;
+ /* Bottom of the exception frame stack. */
+ struct exception_frame *exception_stack_bottom;
+
l4_word_t exception_handler_sp;
l4_word_t exception_handler_ip;
l4_word_t exception_handler_end;
@@ -109,8 +126,6 @@ enum
HURD_EXREGS_ABORT_IPC = HURD_EXREGS_ABORT_SEND | _L4_XCHG_REGS_CANCEL_RECV,
};
-typedef void (*hurd_exception_handler_t) (struct exception_page *);
-
#define RPC_STUB_PREFIX rm
#define RPC_ID_PREFIX RM
#undef RPC_TARGET_NEED_ARG