[PATCH] powerpc/uprobes: teach uprobes to ignore gdb breakpoints
Oleg Nesterov
oleg at redhat.com
Wed Mar 20 23:26:39 EST 2013
Hi Ananth,
First of all, let me remind that I know nothing about powerpc ;)
But iirc we already discussed this a bit, I forgot the details but
still I have some concerns...
On 03/20, Ananth N Mavinakayanahalli wrote:
>
> GDB uses a variant of the trap instruction that is different from the
> one used by uprobes. Currently, running gdb on a program being traced
> by uprobes causes an endless loop since uprobes doesn't understand
> that the trap is inserted by some other entity and hence a SIGTRAP needs
> to be delivered.
Yes, and thus is_swbp_at_addr()->is_swbp_insn() called by handle_swbp()
should be updated,
> +bool is_swbp_insn(uprobe_opcode_t *insn)
> +{
> + return (is_trap(*insn));
> +}
And this patch should fix the problem. (and probably this is fine
for prepare_uprobe()).
But, at the same time, is the new definition fine for verify_opcode()?
IOW, powerpc has another is_trap() insn(s) used by gdb, lets denote it X.
X != UPROBE_SWBP_INSN.
Suppose that gdb installs the trap X at some addr, and then uprobe_register()
tries to install uprobe at the same address. Then set_swbp() will do nothing,
assuming the uprobe was already installed.
But we did not install UPROBE_SWBP_INSN. Is it fine? I hope yes, just to
verify. If not, we need 2 definitions. is_uprobe_insn() should still check
insns == UPROBE_SWBP_INSN, and is_swbp_insn() should check is_trap().
And I am just curious, could you explain how X and UPROBE_SWBP_INSN
differ?
Oleg.
More information about the Linuxppc-dev
mailing list