summaryrefslogtreecommitdiff
path: root/viengoos/thread.h
diff options
context:
space:
mode:
authorneal <neal>2007-12-04 18:12:20 +0000
committerneal <neal>2007-12-04 18:12:20 +0000
commit1a88abf3c2d9757b7b61128475d0a10bb1d07018 (patch)
tree3ae8794af2f969bb2cfb11e663c7886ebe737763 /viengoos/thread.h
parent127d8f9b0868aa58e21f946bea811efdeb106a99 (diff)
viengoos/
2007-12-04 Neal H. Walfield <neal@gnu.org> Remove exception threads. Replace with support for activations. * thread.h (THREAD_SLOTS): Bump to 3. (struct thread): Add field exception_page. Remove fields have_exception and exception. (thread_exregs): Take additional arguments exception_page and exception_page_out. Update users. (thread_raise_exception): New declaration. * thread.c (THREAD_VERSION): Define. (thread_init): Remove code related to the exception thread. (thread_commission): Likewise. (thread_decommission): Likewise. (thread_exregs): Likewise. Take additional arguments EXCEPTION_PAGE and EXCEPTION_PAGE_OUT. If CONTROL contains HURD_EXREGS_GET_REGS and EXCEPTION_PAGE_OUT is not NULL, return a capability to THREAD's exception page in *EXCEPTION_PAGE_OUT. If CONTROL contains HURD_EXREGS_SET_EXCEPTION_PAGE, then set THREAD's exception page to EXCEPTION_PAGE. (thread_raise_exception): New function. * server.c (server_loop): Remove code related to handling the exception thread. Call thread_raise_exception to propagate exception. Reimplement the exception_collect method. Update implementation of the thread_exregs method to support the new argument passing scheme. Add support for setting and retrieving the exception page. (REPLYW): Only clear MSG here. * rm.h (exception_collect): Take an additional argument, the principal. * object.h (object_type): New function. hurd/ 2007-12-04 Neal H. Walfield <neal@gnu.org> Remove exception threads. Replace with support for activations. * thread.h: Include <l4/ipc.h>. (struct exception_page): New structure. (THREAD_EXCEPTION_PAGE_SLOT): Define. (HURD_EXREGS_EXCEPTION_THREAD): Don't define. (HURD_EXREGS_SET_EXCEPTION_PAGE): Define. (HURD_EXREGS_SET_REGS): Update. (hurd_exception_handler_t): New definition. (struct hurd_thread_exregs_in): New structure. (struct hurd_thread_exregs_out): New structure. (thread_exregs): Replace the bulk of the arguments with struct hurd_thread_exregs_in and struct hurd_thread_exregs_out. Update users. * exceptions.h (HURD_THREAD_MAIN_VERSION): Remove macro. (HURD_THREAD_EXCEPTION_VERSION): Likewise. (hurd_thread_is_exception_thread): Remove function. (hurd_thread_is_main_thread): Likewise. (hurd_exception_thread): Likewise. (hurd_main_thread): Likewise. (exception_handler_loop): Remove declaration. (exception_handler): New declaration. (exception_handler_entry): Likewise. (exception_handler_end): Likewise. libhurd-mm/ 2007-12-04 Neal H. Walfield <neal@gnu.org> Remove exception threads. Replace with support for activations. * Makefile.am (ARCH_SOURCES): New variable. [ARCH_IA32]: Add ia32-exception-entry.S. (libhurd_mm_a_SOURCES): Add $(ARCH_SOURCES). * ia32-exception-entry.S: New file. * exceptions.c: Include <hurd/storage.h> and <hurd/thread.h>. (ARG): Don't define. (ARG64): Likewise. (ARG_ADDR): Likewise. (CHECK): Likewise. (exception_handler_loop): Remove function. (exception_fetch_exception): New function. (exception_handler): New function. (STACK_SIZE): Don't define. (stack): Don't declare. (exception_handler_init): Set up the thread's exception page. libpthread/ 2007-12-04 Neal H. Walfield <neal@gnu.org> Remove exception threads. Replace with support for activations. * sysdeps/l4/hurd/pt-sysdep.h (PTHREAD_SYSDEP_MEMBERS): Remove fields exception_handler_stack and exception_handler_sp. Add field exception_page. * sysdeps/l4/hurd/pt-thread-alloc.c (__pthread_thread_alloc): Allocate a page for THREAD->EXCEPTION_PAGE, not THREAD->EXCEPTION_HANDLER_STACK. * sysdeps/l4/hurd/ia32/pt-setup.c: Include <hurd/thread.h> and <hurd/exceptions.h>. (__pthread_setup): Remove code dealing with the exception thread. Set up the exception page. * sysdeps/l4/hurd/pt-thread-start.c (__pthread_thread_start): Remove code dealing with the exception thread. Update to use new rm_thread_exregs interface. Also set the thread's exception page. * sysdeps/l4/hurd/pt-thread-halt.c (__pthread_thread_halt): Remove code to dealing with the exception thread. Free the THREAD->EXCEPTION_PAGE. ruth/ 2007-12-04 Neal H. Walfield <neal@gnu.org> * ruth.c (main): Update to use new rm_thread_exregs interface.
Diffstat (limited to 'viengoos/thread.h')
-rw-r--r--viengoos/thread.h18
1 files changed, 12 insertions, 6 deletions
diff --git a/viengoos/thread.h b/viengoos/thread.h
index 3fadcfc..9310dc4 100644
--- a/viengoos/thread.h
+++ b/viengoos/thread.h
@@ -34,7 +34,7 @@ struct activity;
structure. */
enum
{
- THREAD_SLOTS = 2,
+ THREAD_SLOTS = 3,
};
struct thread
@@ -46,6 +46,9 @@ struct thread
this thread's storage is allocated!) */
struct cap activity;
+ /* Capability identifying a page to use to store exceptions. */
+ struct cap exception_page;
+
/* Allocated thread id. */
l4_thread_id_t tid;
@@ -59,10 +62,6 @@ struct thread
l4_word_t init : 1;
/* Whether the thread has been commissioned (a tid allocated). */
l4_word_t commissioned : 1;
-
- bool have_exception;
- /* 64 words (256/512 bytes). */
- l4_msg_t exception;
};
/* The hardwired base of the UTCB (2.5GB). */
@@ -97,10 +96,17 @@ extern error_t thread_exregs (struct activity *principal,
struct cap *aspace,
l4_word_t flags, struct cap_addr_trans addr_trans,
struct cap *activity,
+ struct cap *exception_page,
l4_word_t *sp, l4_word_t *ip,
l4_word_t *eflags, l4_word_t *user_handle,
struct cap *aspace_out,
- struct cap *activity_out);
+ struct cap *activity_out,
+ struct cap *exception_page_out);
+
+/* Send thread THREAD an exception. */
+extern void thread_raise_exception (struct activity *activity,
+ struct thread *thread,
+ l4_msg_t *msg);
/* Given the L4 thread id THREADID, find the associated thread. */
extern struct thread *thread_lookup (l4_thread_id_t threadid);