提交 35b6f55a 编写于 作者: N Naveen N. Rao 提交者: Arnaldo Carvalho de Melo

trace/kprobes: Allow return probes with offsets and absolute addresses

Since the kernel includes many non-global functions with same names, we
will need to use offsets from other symbols (typically _text/_stext) or
absolute addresses to place return probes on specific functions. Also,
the core register_kretprobe() API never forbid use of offsets or
absolute addresses with kretprobes.

Allow its use with the trace infrastructure. To distinguish kernels that
support this, update ftrace README to explicitly call this out.
Signed-off-by: NNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Acked-by: NMasami Hiramatsu <mhiramat@kernel.org>
Cc: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: linuxppc-dev@lists.ozlabs.org
Link: http://lkml.kernel.org/r/183e7ce2921a08c9c755ee9a5da3134febc6695b.1487770934.git.naveen.n.rao@linux.vnet.ibm.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
上级 90ec5e89
...@@ -4355,6 +4355,7 @@ static const char readme_msg[] = ...@@ -4355,6 +4355,7 @@ static const char readme_msg[] =
"\t -:[<group>/]<event>\n" "\t -:[<group>/]<event>\n"
#ifdef CONFIG_KPROBE_EVENTS #ifdef CONFIG_KPROBE_EVENTS
"\t place: [<module>:]<symbol>[+<offset>]|<memaddr>\n" "\t place: [<module>:]<symbol>[+<offset>]|<memaddr>\n"
"place (kretprobe): [<module>:]<symbol>[+<offset>]|<memaddr>\n"
#endif #endif
#ifdef CONFIG_UPROBE_EVENTS #ifdef CONFIG_UPROBE_EVENTS
"\t place: <path>:<offset>\n" "\t place: <path>:<offset>\n"
......
...@@ -680,10 +680,6 @@ static int create_trace_kprobe(int argc, char **argv) ...@@ -680,10 +680,6 @@ static int create_trace_kprobe(int argc, char **argv)
return -EINVAL; return -EINVAL;
} }
if (isdigit(argv[1][0])) { if (isdigit(argv[1][0])) {
if (is_return) {
pr_info("Return probe point must be a symbol.\n");
return -EINVAL;
}
/* an address specified */ /* an address specified */
ret = kstrtoul(&argv[1][0], 0, (unsigned long *)&addr); ret = kstrtoul(&argv[1][0], 0, (unsigned long *)&addr);
if (ret) { if (ret) {
...@@ -699,10 +695,6 @@ static int create_trace_kprobe(int argc, char **argv) ...@@ -699,10 +695,6 @@ static int create_trace_kprobe(int argc, char **argv)
pr_info("Failed to parse symbol.\n"); pr_info("Failed to parse symbol.\n");
return ret; return ret;
} }
if (offset && is_return) {
pr_info("Return probe must be used without offset.\n");
return -EINVAL;
}
} }
argc -= 2; argv += 2; argc -= 2; argv += 2;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册