Hello Andreas, I had a experience that pthread_sighander() of current glibc-2.2 breaks stack. I tracked down the problem, and finally found the mismatch between kenrel and glibc-2.2. Current kernel pass following args to the signal handler for the case of not SA_SIGINFO specified. a0 signal number a1 0 (cause code?) a2 pointer to sigcontext struct But, the pthread_sighander() of glibc-2.2 expects; 1st arg. signal number 2nd arg. sigcontext struct itself (not pointer) Patches attached below. Please apply. Thanks. --- Hiroyuki Machida Creative Station SCE Inc. === ChangeLog entry. * sysdeps/unix/sysv/linux/mips/register-dump.h (REGISTER_DUMP): Change type of CTX to (struct sigcontext *). * sysdeps/unix/sysv/linux/mips/sigcontextinfo.h (GET_PC): Likewise. (GET_FRAME): Likewise (GET_STACK): Likewise. (SIGCONTEXT): Likewise. Add 2nd arg _CODE. (SIGCONTEXT_EXTRA_ARGS): Add 2nd arg _CODE. =================================================================== --- sysdeps/unix/sysv/linux/mips/register-dump.h.ORG 2000/10/25 05:00:53 1.1 +++ sysdeps/unix/sysv/linux/mips/register-dump.h 2001/01/12 13:03:30 1.2 @@ -105,4 +105,4 @@ register_dump (int fd, struct sigcontext } -#define REGISTER_DUMP register_dump (fd, &ctx) +#define REGISTER_DUMP register_dump (fd, ctx) =================================================================== --- sysdeps/unix/sysv/linux/mips/sigcontextinfo.h.ORG 2000/10/25 05:00:53 1.1 +++ sysdeps/unix/sysv/linux/mips/sigcontextinfo.h 2001/01/12 13:03:31 1.2 @@ -18,8 +18,8 @@ Boston, MA 02111-1307, USA. */ -#define SIGCONTEXT struct sigcontext -#define SIGCONTEXT_EXTRA_ARGS -#define GET_PC(ctx) ((void *) ctx.sc_pc) -#define GET_FRAME(ctx) ((void *) ctx.sc_regs[30]) -#define GET_STACK(ctx) ((void *) ctx.sc_regs[29]) +#define SIGCONTEXT unsigned long _code, struct sigcontext * +#define SIGCONTEXT_EXTRA_ARGS _code, +#define GET_PC(ctx) ((void *) ctx->sc_pc) +#define GET_FRAME(ctx) ((void *) ctx->sc_regs[30]) +#define GET_STACK(ctx) ((void *) ctx->sc_regs[29])