microblaze: ftrace: Pass the first calling instruction for dynamic ftrace
authorMichal Simek <monstr@monstr.eu>
Mon, 7 May 2012 12:21:02 +0000 (14:21 +0200)
committerMichal Simek <monstr@monstr.eu>
Fri, 25 May 2012 04:34:35 +0000 (06:34 +0200)
Selftest for dynamic ftrace requres to pass address of the first
calling instruction because hash function is calculated from it.

ftrace_update_ftrace_func setups pointer to function which is called
in _mcount function. trace_selftest is not aware about instruction
size (for microblaze 8 - imm and addik) and that's why we have
to pass in r5 address of imm not addik which is in r15.12

For more info look at ftrace_ops_list_func/ftrace.c.

Signed-off-by: Michal Simek <monstr@monstr.eu>
arch/microblaze/kernel/mcount.S

index e7eaa7a8cbd34d2404fae12769b8b3b4365ff752..fc1e1322ce4c9b58d1ad7527367569748d7c95d1 100644 (file)
@@ -138,7 +138,7 @@ NOALIGN_ENTRY(ftrace_call)
 #endif /* CONFIG_DYNAMIC_FTRACE */
 /* static normal trace */
        lwi     r6, r1, 120; /* MS: load parent addr */
-       addik   r5, r15, 0; /* MS: load current function addr */
+       addik   r5, r15, -4; /* MS: load current function addr */
        /* MS: here is dependency on previous code */
        brald   r15, r20; /* MS: jump to ftrace handler */
        nop;