diff options
author | Neal H. Walfield <neal@gnu.org> | 2009-01-16 21:18:32 +0100 |
---|---|---|
committer | Neal H. Walfield <neal@gnu.org> | 2009-01-16 21:18:32 +0100 |
commit | 8e7249d8deae3a82c086f435b7e31ec16d1457da (patch) | |
tree | f1b309d53e2452b7bfe99cdfbfda0a1697f24e02 /libpthread | |
parent | 992370c0219936911f3bba6c62b00c886ecae392 (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')
-rw-r--r-- | libpthread/ChangeLog | 22 | ||||
-rw-r--r-- | libpthread/sysdeps/viengoos/pt-spin.c | 17 | ||||
-rw-r--r-- | libpthread/sysdeps/viengoos/pt-stack-alloc.c | 3 | ||||
-rw-r--r-- | libpthread/sysdeps/viengoos/pt-sysdep.c | 9 | ||||
-rw-r--r-- | libpthread/sysdeps/viengoos/pt-sysdep.h | 9 | ||||
-rw-r--r-- | libpthread/sysdeps/viengoos/pt-thread-alloc.c | 6 | ||||
-rw-r--r-- | libpthread/sysdeps/viengoos/pt-thread-start.c | 8 | ||||
-rw-r--r-- | libpthread/sysdeps/viengoos/sig-sysdep.h | 10 |
8 files changed, 72 insertions, 12 deletions
diff --git a/libpthread/ChangeLog b/libpthread/ChangeLog index 6a47452..ead918b 100644 --- a/libpthread/ChangeLog +++ b/libpthread/ChangeLog @@ -1,3 +1,25 @@ +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. + 2008-11-19 Neal H. Walfield <neal@gnu.org> * sysdeps/generic/bits/memory.h: New file. 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 |