This is the mail archive of the
mailing list for the GDB project.
PTRACE_SINGLESTEP into signal handler
- From: Ulrich Weigand <Ulrich dot Weigand at de dot ibm dot com>
- To: gdb at sources dot redhat dot com
- Date: Fri, 26 Nov 2004 18:25:26 +0100
- Subject: PTRACE_SINGLESTEP into signal handler
I'm seeing failures in the sigstep.exp test case on s390:
FAIL: gdb.base/sigstep.exp: step on breakpoint, to handler entry; performing step
FAIL: gdb.base/sigstep.exp: next on breakpoint, to handler entry; performing next
FAIL: gdb.base/sigstep.exp: continue on breakpoint, to handler entry; performing continue
The reason for this appears to be that they set a breakpoint on the
very first instruction of a signal handler that is being stepped into
via PTRACE_SINGLESTEP. For some reason, while this is done, the
breakpoints are not actually inserted.
When the debugger next gets control, the first instruction of the
handler was already executed. Thus, while it now does insert the
breakpoint instructions, it is too late ...
Does gdb assume PTRACE_SINGLESTEP into a handle returns *before*
the first instruction of the handler was executed?
We could change the kernel to do that, and this fixes the test case
failures, but I'm not sure if this is the right thing to do --
the ptrace documentation says "arranges for the child to be stopped
after execution of a single instruction", which would appear to
indicate the current behaviour is correct.
How does this work on other platforms?
Mit freundlichen Gruessen / Best Regards
Dr. Ulrich Weigand
Linux for S/390 Design & Development
IBM Deutschland Entwicklung GmbH, Schoenaicher Str. 220, 71032 Boeblingen
Phone: +49-7031/16-3727 --- Email: Ulrich.Weigand@de.ibm.com