summaryrefslogtreecommitdiff
path: root/hurd
diff options
context:
space:
mode:
authorNeal H. Walfield <neal@gnu.org>2008-12-17 19:33:13 +0100
committerNeal H. Walfield <neal@gnu.org>2008-12-17 19:33:13 +0100
commit4ef4096e11ad305d27b4f286098f392cc6be265a (patch)
treefdb3cd3cb2f8477899728fa3b2a4f9462d860f50 /hurd
parent5383ad657ed466342e65a0c90e9ea34bf86babc6 (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/ChangeLog7
-rw-r--r--hurd/Makefile.am3
-rw-r--r--hurd/exceptions.h106
-rw-r--r--hurd/headers.m41
-rw-r--r--hurd/thread.h78
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
{