Messages in this thread |  | | | Date | Mon, 24 Oct 2011 16:41:27 +0200 | | From | Oleg Nesterov <> | | Subject | Re: [PATCH 13/X] uprobes: introduce UTASK_SSTEP_TRAPPED logic |
| |
On 10/22, Ananth N Mavinakayanahalli wrote: > > On Wed, Oct 19, 2011 at 11:53:44PM +0200, Oleg Nesterov wrote: > > Finally, add UTASK_SSTEP_TRAPPED state/code to handle the case when > > xol insn itself triggers the signal. > > > > In this case we should restart the original insn even if the task is > > already SIGKILL'ed (say, the coredump should report the correct ip). > > This is even more important if the task has a handler for SIGSEGV/etc, > > The _same_ instruction should be repeated again after return from the > > signal handler, and SSTEP can never finish in this case. > > Oleg, > > Not sure I understand this completely...
I hope you do not think I do ;)
> When you say 'correct ip' you mean the original vaddr where we now have > a uprobe breakpoint and not the xol copy, right?
Yes,
> Coredump needs to report the correct ip, but should it also not report > correctly the instruction that caused the signal? Ergo, shouldn't we > put the original instruction back at the uprobed vaddr?
OK, now I see what you mean. I was confused by the "restore the original instruction before _restart_" suggestion.
Agreed! it would be nice to "hide" these int3's if we dump the core, but I think this is a bit off-topic. It makes sense to do this in any case, even if the core-dumping was triggered by another thread/insn. It makes sense to remove all int3's, not only at regs->ip location. But how can we do this? This is nontrivial.
And. Even worse. Suppose that you do "gdb probed_application". Now you see int3's in the disassemble output. What can we do?
I think we can do nothing, at least currently. This just reflects the fact that uprobe connects to inode, not to process/mm/etc.
What do you think?
Oleg.
|  |