diff options
author | Neal H. Walfield <neal@gnu.org> | 2008-12-17 19:33:13 +0100 |
---|---|---|
committer | Neal H. Walfield <neal@gnu.org> | 2008-12-17 19:33:13 +0100 |
commit | 4ef4096e11ad305d27b4f286098f392cc6be265a (patch) | |
tree | fdb3cd3cb2f8477899728fa3b2a4f9462d860f50 /hurd | |
parent | 5383ad657ed466342e65a0c90e9ea34bf86babc6 (diff) |
Merge hurd/exceptions.h into hurd/thread.h.
hurd/
2008-12-17 Neal H. Walfield <neal@gnu.org>
* exceptions.h: Merge contents of this file...
* thread.h: ... into this one. Update users.
* headers.m4: Don't link hurd/exceptions.h.
* Makefile.am (includehurd_HEADERS): Remove exceptions.h.
libc-parts/
2008-12-17 Neal H. Walfield <neal@gnu.org>
* backtrace.c: Don't include <hurd/exceptions.h>.
libhurd-mm/
2008-12-17 Neal H. Walfield <neal@gnu.org>
* anonymous.h: Don't include <hurd/exceptions.h>.
* as.h: Likewise.
* exceptions.c: Likewise.
* map.h: Likewise.
* message-buffer.c: Likewise.
* mm-init.c: Likewise.
* as-build.c: Don't include <hurd/exceptions.h>. Include
<viengoos/thread.h> and <viengoos/messenger.h>.
* as-dump.c: Include <viengoos/thread.h> and
<viengoos/messenger.h>.
* as-lookup.c: Likewise.
libpthread/
2008-12-17 Neal H. Walfield <neal@gnu.org>
* sysdeps/viengoos/ia32/pt-setup.c: Don't include
<hurd/exceptions.h> or <viengoos/thread.h>.
* sysdeps/viengoos/pt-startup.c (__pthread_startup): Don't include
<l4.h> or <hurd/exceptions.h>. Include <hurd/thread.h>.
(__pthread_startup): Set pthread->threadid using hurd_myself.
* sysdeps/viengoos/pt-sysdep.h: Don't cinlude
<hurd/exceptions.h>. Include <hurd/thread.h>.
* sysdeps/viengoos/pt-thread-dealloc.c: Don't include
<hurd/exceptions.h>. Include <hurd/thread.h>.
* sysdeps/viengoos/pt-thread-start.c: Don't include
<viengoos/thread.h> or <hurd/exceptions.h>. Include
<hurd/thread.h>.
libviengoos/
2008-12-17 Neal H. Walfield <neal@gnu.org>
* viengoos/misc.h: Don't include <hurd/exceptions.h>.
Diffstat (limited to 'hurd')
-rw-r--r-- | hurd/ChangeLog | 7 | ||||
-rw-r--r-- | hurd/Makefile.am | 3 | ||||
-rw-r--r-- | hurd/exceptions.h | 106 | ||||
-rw-r--r-- | hurd/headers.m4 | 1 | ||||
-rw-r--r-- | hurd/thread.h | 78 |
5 files changed, 85 insertions, 110 deletions
diff --git a/hurd/ChangeLog b/hurd/ChangeLog index e9ba5ba..ea3c095 100644 --- a/hurd/ChangeLog +++ b/hurd/ChangeLog @@ -1,5 +1,12 @@ 2008-12-17 Neal H. Walfield <neal@gnu.org> + * exceptions.h: Merge contents of this file... + * thread.h: ... into this one. Update users. + * headers.m4: Don't link hurd/exceptions.h. + * Makefile.am (includehurd_HEADERS): Remove exceptions.h. + +2008-12-17 Neal H. Walfield <neal@gnu.org> + * rmutex.h (__need_vg_thread_id_t): Don't include <l4/thread.h>. Define __need_vg_thread_id_t and include <viengoos/thread.h>. (struct ss_rmutex): Change owner to a vg_thread_id_t. diff --git a/hurd/Makefile.am b/hurd/Makefile.am index 4eae77a..5c28904 100644 --- a/hurd/Makefile.am +++ b/hurd/Makefile.am @@ -18,6 +18,5 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. includehurddir = $(includedir)/hurd -includehurd_HEADERS = startup.h stddef.h types.h \ - exceptions.h thread.h \ +includehurd_HEADERS = startup.h stddef.h types.h thread.h \ lock.h mutex.h rmutex.h error.h trace.h diff --git a/hurd/exceptions.h b/hurd/exceptions.h deleted file mode 100644 index efd779b..0000000 --- a/hurd/exceptions.h +++ /dev/null @@ -1,106 +0,0 @@ -/* activations.h - Activation handling definitions. - Copyright (C) 2007, 2008 Free Software Foundation, Inc. - Written by Neal H. Walfield <neal@gnu.org>. - - This file is part of the GNU Hurd. - - GNU Hurd is free software: you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - GNU Hurd is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with GNU Hurd. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _HURD_ACTIVATIONS_H -#define _HURD_ACTIVATIONS_H 1 - -#include <hurd/stddef.h> - -#include <stdint.h> -#include <viengoos/addr.h> -#include <viengoos/thread.h> -#include <hurd/error.h> - -/* Initializes the activation handler to allow receiving IPCs (but - does not handle other faults). This must be called exactly once - before any IPCs are sent. */ -extern void hurd_activation_handler_init_early (void); - -/* Initialize the activation handler. This must be called after the - storage sub-system has been initialized. At this point, the - activation handler is able to handle exceptions. */ -extern void hurd_activation_handler_init (void); - - -/* Return the calling thread's UTCB. Threading libraries should set - this to their own implementation once they are up and running. */ -extern struct hurd_utcb *(*hurd_utcb) (void); - -/* Allocate a utcb buffer and associated data structures (including an - exception messenger) for the thread THEAD (which must already exist - but should not be running). Installs the UTCB and exception - messenger in the thread object. Returns the new UTCB in *UTCB. - Returns 0 on success, otherwise an error code. */ -extern error_t hurd_activation_state_alloc (vg_addr_t thread, - struct hurd_utcb **utcb); - -/* Release the state allocated by hurd_activation_state_alloc. May - not be called by a thread on its own UTCB! */ -extern void hurd_activation_state_free (struct hurd_utcb *utcb); - - -/* When a thread causes an activation, the kernel invokes the thread's - activation handler. This points to the low-level activation handler, - which invokes activation_handler_activated. (It is passed a pointer - to the utcb.) - - This function must determine how to continue. It may, but need - not, immediately handle the activation. The problem with handling - an activation immediately is that this function runs on the - activation handler's tiny stack and it runs in activated mode. The - latter means that it may not fault (which generally precludes - accessing any dynamically allocated storage) or even properly send - IPC (as it has no easy way to determine when the IPC has been - received and when a reply is available--this information is - delivered by activations!). - - To allow an easy transition to another function in normal-mode, if - the function returns an activation_frame, then the activation - handler will call hurd_activation_handler_normal passing it that - argument. This function runs in normal mode and on the normal - stack. When this function returns, the interrupted state is - restored. */ -extern struct activation_frame *hurd_activation_handler_activated - (struct hurd_utcb *utcb); - -extern void hurd_activation_handler_normal - (struct activation_frame *activation_frame, struct hurd_utcb *utcb); - - -/* The first instruction of activation handler dispatcher. */ -extern char hurd_activation_handler_entry; -/* The instruction immediately following the last instruction of the - activation handler dispatcher. */ -extern char hurd_activation_handler_end; - - -/* Register the current extant IPC. */ -extern void hurd_activation_message_register (struct hurd_message_buffer *mb); - -/* Unregister the current extant IPC. This is normally done - automatically when a reply is receive. However, if the IPC is - aborted, then this function must be called before the next IPC may - be sent. */ -extern void hurd_activation_message_unregister (struct hurd_message_buffer *mb); - -/* Dump the activation stack to stdout. */ -extern void hurd_activation_stack_dump (void); - -#endif diff --git a/hurd/headers.m4 b/hurd/headers.m4 index da2d579..dc7d22a 100644 --- a/hurd/headers.m4 +++ b/hurd/headers.m4 @@ -13,7 +13,6 @@ AC_CONFIG_LINKS([sysroot/include/hurd/stddef.h:hurd/stddef.h sysroot/include/hurd/types.h:hurd/types.h sysroot/include/hurd/startup.h:hurd/startup.h - sysroot/include/hurd/exceptions.h:hurd/exceptions.h sysroot/include/hurd/thread.h:hurd/thread.h sysroot/include/hurd/lock.h:hurd/lock.h sysroot/include/hurd/trace.h:hurd/trace.h diff --git a/hurd/thread.h b/hurd/thread.h index f65f17f..94c29e8 100644 --- a/hurd/thread.h +++ b/hurd/thread.h @@ -93,7 +93,6 @@ struct activation_frame #include <viengoos/addr-trans.h> #include <viengoos/cap.h> #include <viengoos/messenger.h> -#include <hurd/exceptions.h> #include <setjmp.h> /* The user thread control block. */ @@ -133,13 +132,90 @@ struct hurd_utcb uintptr_t canary0; uintptr_t canary1; }; + +/* Return the calling thread's UTCB. Threading libraries should set + this to their own implementation once they are up and running. */ +extern struct hurd_utcb *(*hurd_utcb) (void); +/* Initializes the activation handler to allow receiving IPCs (but + does not handle other faults). This must be called exactly once + before any IPCs are sent. */ +extern void hurd_activation_handler_init_early (void); + +/* Initialize the activation handler. This must be called after the + storage sub-system has been initialized. At this point, the + activation handler is able to handle exceptions. */ +extern void hurd_activation_handler_init (void); + + +/* Allocate a utcb buffer and associated data structures (including an + exception messenger) for the thread THEAD (which must already exist + but should not be running). Installs the UTCB and exception + messenger in the thread object. Returns the new UTCB in *UTCB. + Returns 0 on success, otherwise an error code. */ +extern error_t hurd_activation_state_alloc (vg_addr_t thread, + struct hurd_utcb **utcb); + +/* Release the state allocated by hurd_activation_state_alloc. May + not be called by a thread on its own UTCB! */ +extern void hurd_activation_state_free (struct hurd_utcb *utcb); + + +/* When a thread causes an activation, the kernel invokes the thread's + activation handler. This points to the low-level activation handler, + which invokes activation_handler_activated. (It is passed a pointer + to the utcb.) + + This function must determine how to continue. It may, but need + not, immediately handle the activation. The problem with handling + an activation immediately is that this function runs on the + activation handler's tiny stack and it runs in activated mode. The + latter means that it may not fault (which generally precludes + accessing any dynamically allocated storage) or even properly send + IPC (as it has no easy way to determine when the IPC has been + received and when a reply is available--this information is + delivered by activations!). + + To allow an easy transition to another function in normal-mode, if + the function returns an activation_frame, then the activation + handler will call hurd_activation_handler_normal passing it that + argument. This function runs in normal mode and on the normal + stack. When this function returns, the interrupted state is + restored. */ +extern struct activation_frame *hurd_activation_handler_activated + (struct hurd_utcb *utcb); + +extern void hurd_activation_handler_normal + (struct activation_frame *activation_frame, struct hurd_utcb *utcb); + + +/* The first instruction of activation handler dispatcher. */ +extern char hurd_activation_handler_entry; +/* The instruction immediately following the last instruction of the + activation handler dispatcher. */ +extern char hurd_activation_handler_end; + + +/* Register the current extant IPC. */ +extern void hurd_activation_message_register (struct hurd_message_buffer *mb); + +/* Unregister the current extant IPC. This is normally done + automatically when a reply is receive. However, if the IPC is + aborted, then this function must be called before the next IPC may + be sent. */ +extern void hurd_activation_message_unregister (struct hurd_message_buffer *mb); + + /* Cause the activation frame to assume the state of the long jump buffer BUF. If SET_RET is true, the normal function return value is set to RET. */ extern void hurd_activation_frame_longjmp (struct activation_frame *af, jmp_buf buf, bool set_ret, int ret); + + +/* Dump the activation stack to stdout. */ +extern void hurd_activation_stack_dump (void); struct hurd_fault_catcher { |