summaryrefslogtreecommitdiff
path: root/linuxthreads/pthread.c
diff options
context:
space:
mode:
Diffstat (limited to 'linuxthreads/pthread.c')
-rw-r--r--linuxthreads/pthread.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/linuxthreads/pthread.c b/linuxthreads/pthread.c
index 3ceb33562e..eca90635b0 100644
--- a/linuxthreads/pthread.c
+++ b/linuxthreads/pthread.c
@@ -369,10 +369,12 @@ static void pthread_initialize(void)
#ifndef __i386__
sa.sa_handler = pthread_handle_sigrestart;
#else
- if (__pthread_sig_restart >= SIGRTMIN)
- sa.sa_handler = (__sighandler_t) pthread_handle_sigrestart_rt;
- else
+# if !__ASSUME_REALTIME_SIGNALS
+ if (__pthread_sig_restart < SIGRTMIN)
sa.sa_handler = (__sighandler_t) pthread_handle_sigrestart_nonrt;
+ else
+# endif
+ sa.sa_handler = (__sighandler_t) pthread_handle_sigrestart_rt;
#endif
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
@@ -380,10 +382,12 @@ static void pthread_initialize(void)
#ifndef __i386__
sa.sa_handler = pthread_handle_sigcancel;
#else
- if (__pthread_sig_restart >= SIGRTMIN)
- sa.sa_handler = (__sighandler_t) pthread_handle_sigcancel_rt;
- else
+# if !__ASSUME_REALTIME_SIGNALS
+ if (__pthread_sig_restart < SIGRTMIN)
sa.sa_handler = (__sighandler_t) pthread_handle_sigcancel_nonrt;
+ else
+# endif
+ sa.sa_handler = (__sighandler_t) pthread_handle_sigcancel_rt;
#endif
sa.sa_flags = 0;
__sigaction(__pthread_sig_cancel, &sa, NULL);
@@ -664,11 +668,13 @@ static void pthread_handle_sigrestart(int sig)
}
#ifdef __i386__
+# if !__ASSUME_REALTIME_SIGNALS
static void pthread_handle_sigrestart_nonrt(int sig, struct sigcontext ctx)
{
asm volatile ("movw %w0,%%gs" : : "r" (ctx.gs));
pthread_handle_sigrestart(sig);
}
+# endif
static void pthread_handle_sigrestart_rt(int sig, struct siginfo *si,
struct ucontext *uc)
@@ -713,11 +719,13 @@ static void pthread_handle_sigcancel(int sig)
}
#ifdef __i386__
+# if !__ASSUME_REALTIME_SIGNALS
static void pthread_handle_sigcancel_nonrt(int sig, struct sigcontext ctx)
{
asm volatile ("movw %w0,%%gs" : : "r" (ctx.gs));
pthread_handle_sigcancel(sig);
}
+# endif
static void pthread_handle_sigcancel_rt(int sig, struct siginfo *si,
struct ucontext *uc)