+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
+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
/* 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 */
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;
}
}
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,
__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));
clone.S
-pipe.S
-fork.S
kernel_stat.h
init-first.h
setresuid.c
/* 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
#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);
}
-/* 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.
#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)
-/* 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
SYSCALL_ERROR_HANDLER
1: retl
+ nop
PSEUDO_END (syscall)