Re: [PATCH 2/3] kprobes/trace: Fix kprobe selftest for gcc 4.6

From: David Daney
Date: Tue Jun 07 2011 - 14:08:33 EST


On 06/07/2011 10:07 AM, Steven Rostedt wrote:
From: Steven Rostedt<srostedt@xxxxxxxxxx>

With gcc 4.6, the self test kprobe function:

kprobe_trace_selftest_target()

is optimized such that kallsyms does not list it. The kprobes
test uses this function to insert a probe and test it. But
it will fail the test if the function is not listed in kallsyms.

Because the name is rather unique, converting it from static to
global should not be a problem. This prevents gcc from removing
it from kallsyms.

Cc: Masami Hiramatsu<masami.hiramatsu.pt@xxxxxxxxxxx>
Signed-off-by: Steven Rostedt<rostedt@xxxxxxxxxxx>
---
kernel/trace/trace_kprobe.c | 8 ++++++--
1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
index f925c45..2c14378 100644
--- a/kernel/trace/trace_kprobe.c
+++ b/kernel/trace/trace_kprobe.c
@@ -1870,8 +1870,12 @@ fs_initcall(init_kprobe_trace);

#ifdef CONFIG_FTRACE_STARTUP_TEST

-static int kprobe_trace_selftest_target(int a1, int a2, int a3,
- int a4, int a5, int a6)
+/*
+ * Can't be static, otherwise gcc might optimize this to
+ * not be in the kallsyms table.
+ */

Could you make it '__used' instead?

David Daney


+int kprobe_trace_selftest_target(int a1, int a2, int a3,
+ int a4, int a5, int a6)
{
return a1 + a2 + a3 + a4 + a5 + a6;
}

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/