tracing/kprobe: Update kprobe tracing self test for new syntax
Update kprobe tracing self test for new syntax (it supports deleting individual probes, and drops $argN support) and behavior change (new probes are disabled in default). This selftest includes the following checks: - Adding function-entry probe and return probe with arguments. - Enabling these probes. - Deleting it individually. Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com> Cc: systemtap <systemtap@sources.redhat.com> Cc: DLE <dle-develop@lists.sourceforge.net> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Frederic Weisbecker <fweisbec@gmail.com> LKML-Reference: <20100114051211.7814.29436.stgit@localhost6.localdomain6> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
0eda7385db
commit
231e36f4d2
@ -1507,28 +1507,67 @@ static int kprobe_trace_selftest_target(int a1, int a2, int a3,
|
|||||||
|
|
||||||
static __init int kprobe_trace_self_tests_init(void)
|
static __init int kprobe_trace_self_tests_init(void)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret, warn = 0;
|
||||||
int (*target)(int, int, int, int, int, int);
|
int (*target)(int, int, int, int, int, int);
|
||||||
|
struct trace_probe *tp;
|
||||||
|
|
||||||
target = kprobe_trace_selftest_target;
|
target = kprobe_trace_selftest_target;
|
||||||
|
|
||||||
pr_info("Testing kprobe tracing: ");
|
pr_info("Testing kprobe tracing: ");
|
||||||
|
|
||||||
ret = command_trace_probe("p:testprobe kprobe_trace_selftest_target "
|
ret = command_trace_probe("p:testprobe kprobe_trace_selftest_target "
|
||||||
"$arg1 $arg2 $arg3 $arg4 $stack $stack0");
|
"$stack $stack0 +0($stack)");
|
||||||
if (WARN_ON_ONCE(ret))
|
if (WARN_ON_ONCE(ret)) {
|
||||||
pr_warning("error enabling function entry\n");
|
pr_warning("error on probing function entry.\n");
|
||||||
|
warn++;
|
||||||
|
} else {
|
||||||
|
/* Enable trace point */
|
||||||
|
tp = find_probe_event("testprobe", KPROBE_EVENT_SYSTEM);
|
||||||
|
if (WARN_ON_ONCE(tp == NULL)) {
|
||||||
|
pr_warning("error on getting new probe.\n");
|
||||||
|
warn++;
|
||||||
|
} else
|
||||||
|
probe_event_enable(&tp->call);
|
||||||
|
}
|
||||||
|
|
||||||
ret = command_trace_probe("r:testprobe2 kprobe_trace_selftest_target "
|
ret = command_trace_probe("r:testprobe2 kprobe_trace_selftest_target "
|
||||||
"$retval");
|
"$retval");
|
||||||
if (WARN_ON_ONCE(ret))
|
if (WARN_ON_ONCE(ret)) {
|
||||||
pr_warning("error enabling function return\n");
|
pr_warning("error on probing function return.\n");
|
||||||
|
warn++;
|
||||||
|
} else {
|
||||||
|
/* Enable trace point */
|
||||||
|
tp = find_probe_event("testprobe2", KPROBE_EVENT_SYSTEM);
|
||||||
|
if (WARN_ON_ONCE(tp == NULL)) {
|
||||||
|
pr_warning("error on getting new probe.\n");
|
||||||
|
warn++;
|
||||||
|
} else
|
||||||
|
probe_event_enable(&tp->call);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (warn)
|
||||||
|
goto end;
|
||||||
|
|
||||||
ret = target(1, 2, 3, 4, 5, 6);
|
ret = target(1, 2, 3, 4, 5, 6);
|
||||||
|
|
||||||
cleanup_all_probes();
|
ret = command_trace_probe("-:testprobe");
|
||||||
|
if (WARN_ON_ONCE(ret)) {
|
||||||
|
pr_warning("error on deleting a probe.\n");
|
||||||
|
warn++;
|
||||||
|
}
|
||||||
|
|
||||||
pr_cont("OK\n");
|
ret = command_trace_probe("-:testprobe2");
|
||||||
|
if (WARN_ON_ONCE(ret)) {
|
||||||
|
pr_warning("error on deleting a probe.\n");
|
||||||
|
warn++;
|
||||||
|
}
|
||||||
|
|
||||||
|
end:
|
||||||
|
cleanup_all_probes();
|
||||||
|
if (warn)
|
||||||
|
pr_cont("NG: Some tests are failed. Please check them.\n");
|
||||||
|
else
|
||||||
|
pr_cont("OK\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user