* sysdeps/unix/sysv/linux/alpha/adjtime.c: Fix typo in
	compat_symbol call for old adjtime.

	* sysdeps/alpha/dl-machine.h (RTLD_START): Rewrite for new init
This commit is contained in:
Ulrich Drepper 2000-04-15 17:39:36 +00:00
parent ef187474bc
commit 150f740ace
4 changed files with 54 additions and 10 deletions

View File

@ -1,6 +1,9 @@
2000-04-15 Ulrich Drepper <drepper@redhat.com> 2000-04-15 Ulrich Drepper <drepper@redhat.com>
* sysdeps/alpha/dl-machine.h (RTLD_START):Rewrite for new init * sysdeps/unix/sysv/linux/alpha/adjtime.c: Fix typo in
compat_symbol call for old adjtime.
* sysdeps/alpha/dl-machine.h (RTLD_START): Rewrite for new init
function interface. Patch by Richard Henderson <rth@cygnus.com>. function interface. Patch by Richard Henderson <rth@cygnus.com>.
* posix/Makefile (headers): Add spawn.h. * posix/Makefile (headers): Add spawn.h.

View File

@ -1,3 +1,15 @@
2000-04-15 Ulrich Drepper <drepper@redhat.com>
* pthread.c: Is __ASSUME_REALTIME_SIGNALS then avoid generating code
to dynamically detect RT signals and avoid generating compatibility
functions with old kernel.
* restart.h (restart) [__ASSUME_REALTIME_SIGNALS]: Use
__pthread_restart_new directly.
(suspend) [__ASSUME_REALTIME_SIGNALS]: Use
__pthread_wait_for_restart_signal directly.
(timedsuspend) [__ASSUME_REALTIME_SIGNALS]: Use
__pthread_timedsuspend_new directly.
2000-04-15 Ulrich Drepper <drepper@redhat.com> 2000-04-15 Ulrich Drepper <drepper@redhat.com>
* condvar.c: Remove all the special code to handle cond_timedwait. * condvar.c: Remove all the special code to handle cond_timedwait.

View File

@ -32,6 +32,11 @@
#include "spinlock.h" #include "spinlock.h"
#include "restart.h" #include "restart.h"
/* Sanity check. */
#if __ASSUME_REALTIME_SIGNALS && !defined __SIGRTMIN
# error "This must not happen; new kernel assumed but old headers"
#endif
/* Descriptor of the initial thread */ /* Descriptor of the initial thread */
struct _pthread_descr_struct __pthread_initial_thread = { struct _pthread_descr_struct __pthread_initial_thread = {
@ -161,12 +166,14 @@ char *__pthread_manager_thread_tos = NULL;
int __pthread_exit_requested = 0; int __pthread_exit_requested = 0;
int __pthread_exit_code = 0; int __pthread_exit_code = 0;
#if !__ASSUME_REALTIME_SIGNALS
/* Pointers that select new or old suspend/resume functions /* Pointers that select new or old suspend/resume functions
based on availability of rt signals. */ based on availability of rt signals. */
void (*__pthread_restart)(pthread_descr) = __pthread_restart_old; void (*__pthread_restart)(pthread_descr) = __pthread_restart_old;
void (*__pthread_suspend)(pthread_descr) = __pthread_suspend_old; void (*__pthread_suspend)(pthread_descr) = __pthread_suspend_old;
int (*__pthread_timedsuspend)(pthread_descr, const struct timespec *) = __pthread_timedsuspend_old; int (*__pthread_timedsuspend)(pthread_descr, const struct timespec *) = __pthread_timedsuspend_old;
#endif /* __ASSUME_REALTIME_SIGNALS */
/* Communicate relevant LinuxThreads constants to gdb */ /* Communicate relevant LinuxThreads constants to gdb */
@ -230,23 +237,27 @@ static int rtsigs_initialized;
static void static void
init_rtsigs (void) init_rtsigs (void)
{ {
#if !__ASSUME_REALTIME_SIGNALS
if (!kernel_has_rtsig ()) if (!kernel_has_rtsig ())
{ {
current_rtmin = -1; current_rtmin = -1;
current_rtmax = -1; current_rtmax = -1;
#if __SIGRTMAX - __SIGRTMIN >= 3 # if __SIGRTMAX - __SIGRTMIN >= 3
__pthread_sig_restart = SIGUSR1; __pthread_sig_restart = SIGUSR1;
__pthread_sig_cancel = SIGUSR2; __pthread_sig_cancel = SIGUSR2;
__pthread_sig_debug = 0; __pthread_sig_debug = 0;
#endif # endif
} }
else else
#endif /* __ASSUME_REALTIME_SIGNALS */
{ {
#if __SIGRTMAX - __SIGRTMIN >= 3 #if __SIGRTMAX - __SIGRTMIN >= 3
current_rtmin = __SIGRTMIN + 3; current_rtmin = __SIGRTMIN + 3;
# if !__ASSUME_REALTIME_SIGNALS
__pthread_restart = __pthread_restart_new; __pthread_restart = __pthread_restart_new;
__pthread_suspend = __pthread_wait_for_restart_signal; __pthread_suspend = __pthread_wait_for_restart_signal;
__pthread_timedsuspend = __pthread_timedsuspend_new; __pthread_timedsuspend = __pthread_timedsuspend_new;
# endif /* __ASSUME_REALTIME_SIGNALS */
#else #else
current_rtmin = __SIGRTMIN; current_rtmin = __SIGRTMIN;
#endif #endif
@ -825,6 +836,7 @@ void __pthread_wait_for_restart_signal(pthread_descr self)
} while (self->p_signal !=__pthread_sig_restart ); } while (self->p_signal !=__pthread_sig_restart );
} }
#if !__ASSUME_REALTIME_SIGNALS
/* The _old variants are for 2.0 and early 2.1 kernels which don't have RT /* The _old variants are for 2.0 and early 2.1 kernels which don't have RT
signals. signals.
On these kernels, we use SIGUSR1 and SIGUSR2 for restart and cancellation. On these kernels, we use SIGUSR1 and SIGUSR2 for restart and cancellation.
@ -920,6 +932,7 @@ __pthread_timedsuspend_old(pthread_descr self, const struct timespec *abstime)
/* woken due to restart signal */ /* woken due to restart signal */
return 1; return 1;
} }
#endif /* __ASSUME_REALTIME_SIGNALS */
void __pthread_restart_new(pthread_descr th) void __pthread_restart_new(pthread_descr th)
{ {

View File

@ -13,21 +13,37 @@
/* GNU Library General Public License for more details. */ /* GNU Library General Public License for more details. */
#include <signal.h> #include <signal.h>
#include <kernel-features.h>
/* Primitives for controlling thread execution */ /* Primitives for controlling thread execution */
static inline void restart(pthread_descr th) static inline void restart(pthread_descr th)
{ {
__pthread_restart(th); /* see pthread.c */ /* See pthread.c */
#if __ASSUME_REALTIME_SIGNALS
__pthread_restart_new(th);
#else
__pthread_restart(th);
#endif
} }
static inline void suspend(pthread_descr self) static inline void suspend(pthread_descr self)
{ {
__pthread_suspend(self); /* see pthread.c */ /* See pthread.c */
#if __ASSUME_REALTIME_SIGNALS
__pthread_wait_for_restart_signal(self);
#else
__pthread_suspend(self);
#endif
} }
static inline int timedsuspend(pthread_descr self, static inline int timedsuspend(pthread_descr self,
const struct timespec *abstime) const struct timespec *abstime)
{ {
return __pthread_timedsuspend(self, abstime); /* see pthread.c */ /* See pthread.c */
#if __ASSUME_REALTIME_SIGNALS
return __pthread_timedsuspend_new(self, abstime);
#else
return __pthread_timedsuspend(self, abstime);
#endif
} }