summaryrefslogtreecommitdiff
path: root/libpthread/sysdeps/viengoos
diff options
context:
space:
mode:
authorNeal H. Walfield <neal@gnu.org>2009-01-16 21:18:32 +0100
committerNeal H. Walfield <neal@gnu.org>2009-01-16 21:18:32 +0100
commit8e7249d8deae3a82c086f435b7e31ec16d1457da (patch)
treef1b309d53e2452b7bfe99cdfbfda0a1697f24e02 /libpthread/sysdeps/viengoos
parent992370c0219936911f3bba6c62b00c886ecae392 (diff)
Conditionalize use of l4 functions on USE_L4.
/ 2009-01-16 Neal H. Walfield <neal@gnu.org> * Makefile.am (L4_SUBDIRS): New variable. Set to l4 directories if USE_L4 is true, otherwise leave empty. (SUBDIRS): Remove libl4 and laden. Replace with $(USE_L4). Rearrange order. benchmarks/ 2009-01-16 Neal H. Walfield <neal@gnu.org> * activity-distribution.c (main): Use vg_thread_id_t and hurd_myself, not l4_thread_id_t and l4_myself. [USE_L4]: Only l4_sleep in this case. * cache.c (helper_fork): Use hurd_myself, not l4_myself. (main) [USE_L4]: Only call _L4_kdb in this case. * shared-memory-distribution.c (main): Use vg_thread_id_t and hurd_myself, not l4_thread_id_t and l4_myself. hieronymus/ 2009-01-16 Neal H. Walfield <neal@gnu.org> * hieronymus.c (main): Use uint64_t, not l4_uint64_t. (main) [USE_L4]: Don't sleep in this case. hurd/ 2009-01-16 Neal H. Walfield <neal@gnu.org> * lock.h (ss_mutex_trace_add) [! USE_L4]: Set SS_LOCK_TRACE[I].TID to zero. * thread.h (hurd_myself) [USE_L4]: Return l4_myself. * trace.h (trace_buffer_add) [! USE_L4 && ! RM_INTERN]: Use hurd_myself, not l4_myself. [! USE_L4 && RM_INTERN]: Don't print a tid. libc-parts/ 2009-01-16 Neal H. Walfield <neal@gnu.org> * _exit.c (_exit): Use sched_yield, not l4_yield. * backtrace.c [USE_L4]: Only include <l4.h> in this case. [! RM_INTERN]: Include <hurd/thread.h>. (backtrace_print) [! USE_L4 && ! RM_INTERN]: Use hurd_myself to get the caller's tid. [! USE_L4 && RM_INTERN]: Don't print a tid. * ia32-cmain.c [! USE_L4]: Don't include <l4/globals.h>, <l4/init.h>, <l4/stubs.h>, or <l4/stubs-init.h>. (cmain) [! USE_L4]: Don't call l4_init or l4_init_stubs. * loader.c: Don't include <l4.h>. Include <bits/wordsize.h> and <endian.h>. (loader_elf_load): Use __WORDSIZE, __BYTE_ORDER, __LITTLE_ENDIAN and __BIG_ENDIAN instead of their L4 names. * panic.c: Include <viengoos/thread.h>. [! RM_INTERN]: Include <hurd/thread.h>. (panic_) [! USE_L4 && ! RM_INTERN]: Use hurd_myself, not l4_myself. [! USE_L4 && RM_INTERN]: Don't print a tid. (panic_): Call sched_yield, not l4_yield. * process-spawn.c (process_spawn) [! USE_L4]: Don't pass utcb and kip information. Change sp from a l4_word_to to a uintptr_t. * profile.c [! USE_L4]: Don't include <l4.h>. (now) [__gnu_hurd_viengoos__ && ! USE_L4]: Just return 0. (struct profile_block): Change tid to a vg_thread_id_t. (MYSELF) [__gnu_hurd_viengoos__ && ! USE_L4]: Just return 0. * s_printf.c (io_buffer_flush) [! USE_L4]: Abort. libhurd-mm/ 2009-01-16 Neal H. Walfield <neal@gnu.org> * anonymous.h: Don't include <l4/thread.h>. Include <viengoos/thread.h>. (struct anonymous_pager): Change fill_thread's type to vg_thread_id_t. * anonymous.c (fault): Use hurd_myself and vg_niltid, not l4_myself and l4_nilthread. * as-build.c: Don't include <l4.h>. * as.h: Include <hurd/thread.h>. Don't include <l4/types.h>. (as_lock): Change as_rwlock_owner's type to vg_thread_id_t. Use hurd_myself, not l4_myself. (as_lock_readonly): Likewise. (as_unlock): Likewise. * as.c [! USE_L4]: Don't include <l4/types.h> or <l4/kip.h>. Include <bits/wordsize.h>. (DATA_ADDR_MAX): Define for 64-bit virtual address spaces. (as_rwlock_owner): Change type to vg_thread_id_t. (as_alloc_slow) [USE_L4]: Only check for conflicts with the kip and utcb in this case. (as_init) [USE_L4]: Only reserve the kip and utcb in this case. * exceptions.c [USE_L4]: Only include <l4/thread.h> in this case. (l4_utcb_state_save) [! USE_L4]: Make a no-op. (l4_utcb_state_restore) [! USE_L4]: Likewise. (hurd_activation_handler_normal): Use hurd_myself, not l4_myself. * map.c: Don't include <l4.h>. (map_fault): Use VG_WRITE, not L4_FPAGE_WRITABLE. * storage.c (storage_check_reserve_internal): Change as_rwlock_owner's type to vg_thread_id_t. libpthread/ 2009-01-16 Neal H. Walfield <neal@gnu.org> * sysdeps/viengoos/pt-spin.c [USE_L4]: Only include <l4.h> in this case. (_pthread_spin_lock): Only implement exponential back off if a sleep function is available. * sysdeps/viengoos/pt-stack-alloc.c: Don't include <l4.h>. * sysdeps/viengoos/pt-sysdep.c (sched_yield) [! USE_L4]: Just return. (init_routine) [USE_L4]: Abort. * sysdeps/viengoos/pt-sysdep.h [USE_L4]: Only include <l4.h> in this case. (_pthread_self) [! USE_L4]: Abort. * sysdeps/viengoos/pt-thread-alloc.c (__pthread_thread_alloc): Use hurd_myself, not l4_myself. [! USE_L4]: Abort. * sysdeps/viengoos/pt-thread-start.c (__pthread_thread_start): Use hurd_myself, not l4_myself. use uintptr_t, not l4_word_t. * sysdeps/viengoos/sig-sysdep.h (SIGNAL_DISPATCH_ENTRY) [! USE_L4]: Abort. (SIGNAL_DISPATCH_EXIT) [! USE_L4]: Likewise. libviengoos/ 2009-01-16 Neal H. Walfield <neal@gnu.org> * viengoos/thread.h (VG_READ): Define. (VG_WRITE): Define. (VG_EXECUTE): Likewise. (VG_ACTIVATION_FAULT_INFO_PRINTF): Use them. ruth/ 2009-01-16 Neal H. Walfield <neal@gnu.org> * ruth.c [USE_L4]: Only include <l4.h> in this case. (main) [! USE_L4]: Don't print resource manager's thread id. (main): Use uintptr_t, not l4_word_t. Use hurd_myself, not l4_myself. Use sched_yield, not l4_yield. Improve synchronization for object_reply_on_destruction test in case sched_yield is a no-op. viengoos/ 2009-01-16 Neal H. Walfield <neal@gnu.org> * cap.h: Don't include <l4.h>. * mutex.h [USE_L4]: Only include <l4/thread.h> in this case. (ss_mutex_t) [! USE_L4]: Define to be an int. (ss_mutex_lock) [! USE_L4]: Make a no-op. (ss_mutex_unlock) [! USE_L4]: Likewise. (ss_mutex_trylock) [! USE_L4]: Likewise. * object.h [USE_L4]: Only include <l4.h> in this case. (object_desc_unmap) [! USE_L4]: Make a no-op. (object_desc_flush) [! USE_L4]: Likewise. * thread.h: Don't include <l4.h>. (struct thread): Make tid a vg_thread_id_t, not an l4_thread_id_t. (thread_lookup): Make threadid a vg_thread_id_t, not an l4_thread_id_t.
Diffstat (limited to 'libpthread/sysdeps/viengoos')
-rw-r--r--libpthread/sysdeps/viengoos/pt-spin.c17
-rw-r--r--libpthread/sysdeps/viengoos/pt-stack-alloc.c3
-rw-r--r--libpthread/sysdeps/viengoos/pt-sysdep.c9
-rw-r--r--libpthread/sysdeps/viengoos/pt-sysdep.h9
-rw-r--r--libpthread/sysdeps/viengoos/pt-thread-alloc.c6
-rw-r--r--libpthread/sysdeps/viengoos/pt-thread-start.c8
-rw-r--r--libpthread/sysdeps/viengoos/sig-sysdep.h10
7 files changed, 50 insertions, 12 deletions
diff --git a/libpthread/sysdeps/viengoos/pt-spin.c b/libpthread/sysdeps/viengoos/pt-spin.c
index b6978b0..6d6df7e 100644
--- a/libpthread/sysdeps/viengoos/pt-spin.c
+++ b/libpthread/sysdeps/viengoos/pt-spin.c
@@ -1,5 +1,5 @@
-/* Spin locks. L4 version.
- Copyright (C) 2000, 2004 Free Software Foundation, Inc.
+/* Spin locks. Viengoos version.
+ Copyright (C) 2000, 2004, 2009 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -17,7 +17,9 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <l4.h>
+#ifdef USE_L4
+# include <l4.h>
+#endif
#include <pthread.h>
#include <sched.h>
@@ -38,12 +40,16 @@ int __pthread_spin_count = __PTHREAD_SPIN_COUNT;
int
_pthread_spin_lock (__pthread_spinlock_t *lock)
{
- l4_time_t timeout;
int i;
+#ifdef USE_L4
/* Start with a small timeout of 2 microseconds, then back off
exponentially. */
+ l4_time_t timeout;
timeout = l4_time_period (2);
+#else
+# warning Don't know how to sleep on this platform.
+#endif
while (1)
{
@@ -52,11 +58,14 @@ _pthread_spin_lock (__pthread_spinlock_t *lock)
if (__pthread_spin_trylock (lock) == 0)
return 0;
}
+
+#ifdef USE_L4
l4_sleep (timeout);
timeout = l4_time_mul2 (timeout);
if (timeout == L4_NEVER)
timeout = L4_TIME_PERIOD_MAX;
+#endif
}
}
diff --git a/libpthread/sysdeps/viengoos/pt-stack-alloc.c b/libpthread/sysdeps/viengoos/pt-stack-alloc.c
index b7ec12b..7dfea2a 100644
--- a/libpthread/sysdeps/viengoos/pt-stack-alloc.c
+++ b/libpthread/sysdeps/viengoos/pt-stack-alloc.c
@@ -1,4 +1,4 @@
-/* Allocate a new stack. L4 Hurd version.
+/* Allocate a new stack. Viengoos version.
Copyright (C) 2000, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -17,7 +17,6 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <l4.h>
#include <errno.h>
#include <pt-internal.h>
diff --git a/libpthread/sysdeps/viengoos/pt-sysdep.c b/libpthread/sysdeps/viengoos/pt-sysdep.c
index c23364c..d4d6fed 100644
--- a/libpthread/sysdeps/viengoos/pt-sysdep.c
+++ b/libpthread/sysdeps/viengoos/pt-sysdep.c
@@ -26,7 +26,11 @@
int
sched_yield (void)
{
+#ifdef USE_L4
l4_yield ();
+#else
+# warning Not ported to this platform.
+#endif
return 0;
}
@@ -56,6 +60,11 @@ init_routine (void (*entry) (void *), void *arg)
assert_perror (err);
/* Switch stacks. */
+#ifdef USE_L4
l4_start_sp_ip (l4_myself (), thread->mcontext.sp,
thread->mcontext.pc);
+#else
+# warning Not ported to this platform.
+ assert (0);
+#endif
}
diff --git a/libpthread/sysdeps/viengoos/pt-sysdep.h b/libpthread/sysdeps/viengoos/pt-sysdep.h
index f7ababa..db89112 100644
--- a/libpthread/sysdeps/viengoos/pt-sysdep.h
+++ b/libpthread/sysdeps/viengoos/pt-sysdep.h
@@ -20,7 +20,10 @@
#ifndef _PT_SYSDEP_H
#define _PT_SYSDEP_H 1
-#include <l4.h>
+#ifdef USE_L4
+# include <l4.h>
+#endif
+
#include <hurd/storage.h>
#include <sys/mman.h>
@@ -46,7 +49,11 @@ extern inline struct __pthread *
__attribute__((__always_inline__))
_pthread_self (void)
{
+#if USE_L4
return (struct __pthread *) l4_user_defined_handle ();
+#else
+ assert (0);
+#endif
}
extern inline void
diff --git a/libpthread/sysdeps/viengoos/pt-thread-alloc.c b/libpthread/sysdeps/viengoos/pt-thread-alloc.c
index e47377c..266444f 100644
--- a/libpthread/sysdeps/viengoos/pt-thread-alloc.c
+++ b/libpthread/sysdeps/viengoos/pt-thread-alloc.c
@@ -45,9 +45,13 @@ __pthread_thread_alloc (struct __pthread *thread)
if (__pthread_num_threads == 1)
{
thread->object = __hurd_startup_data->thread;
- thread->threadid = l4_myself ();
+ thread->threadid = hurd_myself ();
+#ifdef USE_L4
l4_set_user_defined_handle ((l4_word_t) thread);
+#else
+ assert (0);
+#endif
/* Get the thread's UTCB and stash it. */
thread->utcb = hurd_utcb ();
diff --git a/libpthread/sysdeps/viengoos/pt-thread-start.c b/libpthread/sysdeps/viengoos/pt-thread-start.c
index 41d0fbf..5a3867d 100644
--- a/libpthread/sysdeps/viengoos/pt-thread-start.c
+++ b/libpthread/sysdeps/viengoos/pt-thread-start.c
@@ -33,7 +33,7 @@ __pthread_thread_start (struct __pthread *thread)
/* The main thread is already running of course. */
{
assert (__pthread_total == 1);
- assert (l4_is_thread_equal (l4_myself (), thread->threadid));
+ assert (hurd_myself () == thread->threadid);
}
else
{
@@ -46,10 +46,10 @@ __pthread_thread_start (struct __pthread *thread)
vg_addr_t activity = VG_ADDR_VOID;
- in.sp = (l4_word_t) thread->mcontext.sp;
- in.ip = (l4_word_t) thread->mcontext.pc;
+ in.sp = (uintptr_t) thread->mcontext.sp;
+ in.ip = (uintptr_t) thread->mcontext.pc;
- in.user_handle = (l4_word_t) thread;
+ in.user_handle = (uintptr_t) thread;
err = vg_thread_exregs (VG_ADDR_VOID, thread->object,
VG_EXREGS_SET_ASPACE
| VG_EXREGS_SET_ACTIVITY
diff --git a/libpthread/sysdeps/viengoos/sig-sysdep.h b/libpthread/sysdeps/viengoos/sig-sysdep.h
index 33e1385..c1cbe92 100644
--- a/libpthread/sysdeps/viengoos/sig-sysdep.h
+++ b/libpthread/sysdeps/viengoos/sig-sysdep.h
@@ -18,6 +18,8 @@
License along with this program. If not, see
<http://www.gnu.org/licenses/>. */
+
+#ifdef USE_L4
#include <l4.h>
#include <string.h>
@@ -67,3 +69,11 @@ utcb_state_restore (struct utcb *buffer)
#define SIGNAL_DISPATCH_EXIT \
utcb_state_restore (&buffer);
+
+#else
+
+#warning Signal dispatch entry and exit unimplemented for this platform.
+#define SIGNAL_DISPATCH_ENTRY assert (0)
+#define SIGNAL_DISPATCH_EXIT assert (0)
+
+#endif