diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | linuxthreads/ChangeLog | 11 | ||||
-rw-r--r-- | linuxthreads/manager.c | 8 | ||||
-rw-r--r-- | linuxthreads/pthread.c | 7 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc32/Dist | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc32/profil-counter.h | 6 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S | 10 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S | 3 |
8 files changed, 40 insertions, 17 deletions
diff --git a/ChangeLog b/ChangeLog index 37874a6ac2..c732150085 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +1999-02-03 Jakub Jelinek <jj@ultra.linux.cz> + + * sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S: Set branch + prediction correctly. + + * sysdeps/unix/sysv/linux/sparc/sparc32/profil-counter.h: Signal + takes a pointer to __sigcontext_t. + * sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S: Do a nop after retl. + * sysdeps/unix/sysv/linux/sparc/sparc32/Dist: Remove fork.S. + 1999-02-02 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> * manual/time.texi (General Time String Parsing): Fix typos. Fix diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index e65ee76222..352b34356f 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -1,3 +1,14 @@ +1999-02-03 H.J. Lu <hjl@gnu.org> + + * manager.c (__pthread_manager): Do block __pthread_sig_debug. + Don't restart the thread which sent REQ_DEBUG. + (pthread_start_thread): Check if __pthread_sig_debug > 0 + before debugging. + + * pthread.c (__pthread_initialize_manager): Suspend ourself + after sending __pthread_sig_debug to gdb instead of + __pthread_sig_cancel. + 1999-01-24 H.J. Lu <hjl@gnu.org> * manager.c (__pthread_manager): Delete __pthread_sig_debug diff --git a/linuxthreads/manager.c b/linuxthreads/manager.c index 033e5adc5f..9657cc5731 100644 --- a/linuxthreads/manager.c +++ b/linuxthreads/manager.c @@ -104,8 +104,6 @@ int __pthread_manager(void *arg) /* Block all signals except __pthread_sig_cancel and SIGTRAP */ sigfillset(&mask); sigdelset(&mask, __pthread_sig_cancel); /* for thread termination */ - if (__pthread_sig_debug > 0) - sigdelset(&mask, __pthread_sig_debug); /* for debugging purposes */ sigdelset(&mask, SIGTRAP); /* for debugging purposes */ sigprocmask(SIG_SETMASK, &mask, NULL); /* Raise our priority to match that of main thread */ @@ -162,10 +160,10 @@ int __pthread_manager(void *arg) sem_post(request.req_args.post); break; case REQ_DEBUG: - /* Make gdb aware of new thread */ + /* Make gdb aware of new thread and gdb will restart the + new thread when it is ready to handle the new thread. */ if (__pthread_threads_debug && __pthread_sig_debug > 0) raise(__pthread_sig_debug); - restart(request.req_thread); break; } } @@ -195,7 +193,7 @@ static int pthread_start_thread(void *arg) THREAD_GETMEM(self, p_start_args.schedpolicy), &self->p_start_args.schedparam); /* Make gdb aware of new thread */ - if (__pthread_threads_debug) { + if (__pthread_threads_debug && __pthread_sig_debug > 0) { request.req_thread = self; request.req_kind = REQ_DEBUG; __libc_write(__pthread_manager_request, diff --git a/linuxthreads/pthread.c b/linuxthreads/pthread.c index 4d182a8695..42ed581bdb 100644 --- a/linuxthreads/pthread.c +++ b/linuxthreads/pthread.c @@ -309,7 +309,12 @@ int __pthread_initialize_manager(void) __pthread_manager_thread.p_pid = pid; /* Make gdb aware of new thread manager */ if (__pthread_threads_debug && __pthread_sig_debug > 0) - raise(__pthread_sig_cancel); + { + raise(__pthread_sig_debug); + /* We suspend ourself and gdb will wake us up when it is + ready to handle us. */ + suspend(thread_self()); + } /* Synchronize debugging of the thread manager */ request.req_kind = REQ_DEBUG; __libc_write(__pthread_manager_request, (char *) &request, sizeof(request)); diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/Dist b/sysdeps/unix/sysv/linux/sparc/sparc32/Dist index db60e2c49c..28968fd133 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/Dist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/Dist @@ -1,6 +1,4 @@ clone.S -pipe.S -fork.S kernel_stat.h init-first.h setresuid.c diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/profil-counter.h b/sysdeps/unix/sysv/linux/sparc/sparc32/profil-counter.h index 1bd06482c9..4937725ddf 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/profil-counter.h +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/profil-counter.h @@ -1,5 +1,5 @@ /* Low-level statistical profiling support function. Linux/SPARC version. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 1999 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 @@ -20,7 +20,7 @@ #include <signal.h> void -profil_counter (int signo, __siginfo_t si) +profil_counter (int signo, __siginfo_t *si) { - profil_count ((void *) si.si_regs.pc); + profil_count ((void *) si->si_regs.pc); } diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S b/sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S index 38a6f8f8b8..49b1d28ac8 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Miguel de Icaza <miguel@gnu.ai.mit.edu>, 1997. @@ -20,15 +20,15 @@ #include <sysdep.h> ENTRY (__libc_pipe) - mov %o0, %o2 /* Save PIPEDES. */ + mov %o0, %o2 /* Save PIPEDES. */ LOADSYSCALL(pipe) ta 0x6d - bcc,pn %xcc, 2f + bcc,pt %xcc, 2f nop SYSCALL_ERROR_HANDLER -2: st %o0, [%o2] /* PIPEDES[0] = %o0; */ - st %o1, [%o2 + 4] /* PIPEDES[1] = %o1; */ +2: st %o0, [%o2] /* PIPEDES[0] = %o0; */ + st %o1, [%o2 + 4] /* PIPEDES[1] = %o1; */ retl clr %o0 PSEUDO_END (__libc_pipe) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S b/sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S index 5864bfcbc3..945d2e4df1 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1999 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 @@ -35,5 +35,6 @@ ENTRY (syscall) SYSCALL_ERROR_HANDLER 1: retl + nop PSEUDO_END (syscall) |