If entry_handler returns a non-zero value we will not install
probe on the return address.
Change-Id: Iee2ef0ffadb85d7661b4d46ae30d88cef2d7bc0f
Signed-off-by: Vyacheslav Cherkashin <v.cherkashin@samsung.com>
/* TODO: test - remove retprobe after func entry but before its exit */
ri = get_free_rp_inst(rp);
if (ri != NULL) {
+ int skip = 0;
+
ri->rp = rp;
ri->task = current;
if (rp->entry_handler)
- rp->entry_handler(ri, regs);
-
- swap_arch_prepare_kretprobe(ri, regs);
+ skip = rp->entry_handler(ri, regs);
- add_rp_inst(ri);
+ if (skip) {
+ add_rp_inst(ri);
+ recycle_rp_inst(ri);
+ } else {
+ swap_arch_prepare_kretprobe(ri, regs);
+ add_rp_inst(ri);
+ }
} else {
++rp->nmissed;
}