I am reading the program counter value from the hardware context passed as the third argument to the signal handler. It doesn't seem to the same value being set in setup_sigcontext() function in arch/mips/kernel/signal.c. I am using kernel version 2.6.6-rc3 and, I printed out the PC twice, once in the kernel (signal.c) #include <asm/ucontext.h> setup_rt_frame(struct k_sigaction * ka, struct pt_regs *regs, ...) { ... regs->regs[ 5] = (unsigned long) &frame->rs_info; regs->regs[ 6] = (unsigned long) &frame->rs_uc; printk("SIG deliver pc=0x%llx\n", ((((struct ucontext *)regs->regs[6])->uc_mcontext).sc_pc)); regs->regs[29] = (unsigned long) frame; ... force_sig(SIGSEGV, current) } Then I get the value 0x414830 repeatedly. I print the same in my signal handler as #include <asm/ucontext.h> void dispatch_timer(int signal, siginfo_t * si, void *context) { ... printf ("pc value: 0x%llx\n", ((struct ucontext *)context)->uc_mcontext).sc_pc); ... } and I see a different value '0x7ff8000000000000'. The values (addresses) of the third argument 'context' in my signal handler is the same (as it must be) as 'regs->regs[6]' assigned just above the print statement in setup_rt_frame(). I saw a few comments in the file sys/ucontext.h that read /* Don't rely on this, the interface is currently messed up and may need to be broken to be fixed. */ So, I am not sure if those comments still hold good. I am anyway including the header asm/ucontext.h and 'struct ucontext' seems to be different in the two header files. Does this problem sound familiar or am I screwing up something ? regards, Prasad.