[parisc-linux] tracing through sig handlers
Richard Hirst
rhirst@linuxcare.com
Fri, 16 Mar 2001 10:50:56 +0000
Hi Alan,
If I do this:
Index: arch/parisc/kernel/signal.c
===================================================================
RCS file: /home/cvs/parisc/linux/arch/parisc/kernel/signal.c,v
retrieving revision 1.37
diff -u -r1.37 signal.c
--- signal.c 2001/02/09 14:39:08 1.37
+++ signal.c 2001/03/16 10:29:48
@@ -260,6 +260,8 @@
/* regs->iaoq is undefined in the syscall return path */
err |= __put_user(regs->gr[31], &sc->sc_iaoq[0]);
err |= __put_user(regs->gr[31]+4, &sc->sc_iaoq[1]);
+ err |= __put_user(regs->sr[3], &sc->sc_iasq[0]);
+ err |= __put_user(regs->sr[3], &sc->sc_iasq[1]);
#if DEBUG_SIG
printk("setup_sigcontext: iaoq %#lx/%#lx\n", regs->gr[31], regs->gr[31]);
#endif
Then I can strace my little test prog. that sends itself a signal
while the signal is blocked, and then unblocks the signal.
I havn't worked out why this is only apparently necessary when a process
is being traced.
It makes things better with gdb also, but not perfect. The problem
now is that when you try to step out of the signal handler the program
under test just runs on without stopping. Previously it would have
crashed with an invalid iasq[].
Richard