mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-16 18:26:42 +00:00
ftrace: Add perf text poke events for ftrace trampolines
Add perf text poke events for ftrace trampolines when created and when freed. There can be 3 text_poke events for ftrace trampolines: 1. NULL -> trampoline By ftrace_update_trampoline() when !ops->trampoline Trampoline created 2. [e.g. on x86] CALL rel32 -> CALL rel32 By arch_ftrace_update_trampoline() when ops->trampoline and ops->flags & FTRACE_OPS_FL_ALLOC_TRAMP [e.g. on x86] via text_poke_bp() which generates text poke events Trampoline-called function target updated 3. trampoline -> NULL By ftrace_trampoline_free() when ops->trampoline and ops->flags & FTRACE_OPS_FL_ALLOC_TRAMP Trampoline freed Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lkml.kernel.org/r/20200512121922.8997-9-adrian.hunter@intel.com
This commit is contained in:
parent
dd9ddf466a
commit
548e1f6c76
@ -2791,6 +2791,13 @@ static void ftrace_trampoline_free(struct ftrace_ops *ops)
|
||||
{
|
||||
if (ops && (ops->flags & FTRACE_OPS_FL_ALLOC_TRAMP) &&
|
||||
ops->trampoline) {
|
||||
/*
|
||||
* Record the text poke event before the ksymbol unregister
|
||||
* event.
|
||||
*/
|
||||
perf_event_text_poke((void *)ops->trampoline,
|
||||
(void *)ops->trampoline,
|
||||
ops->trampoline_size, NULL, 0);
|
||||
perf_event_ksymbol(PERF_RECORD_KSYMBOL_TYPE_OOL,
|
||||
ops->trampoline, ops->trampoline_size,
|
||||
true, FTRACE_TRAMPOLINE_SYM);
|
||||
@ -6816,6 +6823,13 @@ static void ftrace_update_trampoline(struct ftrace_ops *ops)
|
||||
perf_event_ksymbol(PERF_RECORD_KSYMBOL_TYPE_OOL,
|
||||
ops->trampoline, ops->trampoline_size, false,
|
||||
FTRACE_TRAMPOLINE_SYM);
|
||||
/*
|
||||
* Record the perf text poke event after the ksymbol register
|
||||
* event.
|
||||
*/
|
||||
perf_event_text_poke((void *)ops->trampoline, NULL, 0,
|
||||
(void *)ops->trampoline,
|
||||
ops->trampoline_size);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user