diff options
author | Michal Simek <monstr@monstr.eu> | 2012-05-07 08:21:02 -0400 |
---|---|---|
committer | Michal Simek <monstr@monstr.eu> | 2012-05-25 00:34:35 -0400 |
commit | d65987a88dc8b182ef933edf93c23cf4233dd8d5 (patch) | |
tree | bf89bd10520302bc2de01f4fce13068f8a80daae /arch/microblaze | |
parent | f397c077e114df07bd2b94a16681a04be8d59dff (diff) |
microblaze: ftrace: Pass the first calling instruction for dynamic ftrace
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>
Diffstat (limited to 'arch/microblaze')
-rw-r--r-- | arch/microblaze/kernel/mcount.S | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/microblaze/kernel/mcount.S b/arch/microblaze/kernel/mcount.S index e7eaa7a8cbd3..fc1e1322ce4c 100644 --- a/arch/microblaze/kernel/mcount.S +++ b/arch/microblaze/kernel/mcount.S | |||
@@ -138,7 +138,7 @@ NOALIGN_ENTRY(ftrace_call) | |||
138 | #endif /* CONFIG_DYNAMIC_FTRACE */ | 138 | #endif /* CONFIG_DYNAMIC_FTRACE */ |
139 | /* static normal trace */ | 139 | /* static normal trace */ |
140 | lwi r6, r1, 120; /* MS: load parent addr */ | 140 | lwi r6, r1, 120; /* MS: load parent addr */ |
141 | addik r5, r15, 0; /* MS: load current function addr */ | 141 | addik r5, r15, -4; /* MS: load current function addr */ |
142 | /* MS: here is dependency on previous code */ | 142 | /* MS: here is dependency on previous code */ |
143 | brald r15, r20; /* MS: jump to ftrace handler */ | 143 | brald r15, r20; /* MS: jump to ftrace handler */ |
144 | nop; | 144 | nop; |