mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 23:52:08 +02:00
powerpc/kprobes: Use ftrace to determine if a probe is at function entry
Rather than hard-coding the offset into a function to be used to determine if a kprobe is at function entry, use ftrace_location() to determine the ftrace location within the function and categorize all instructions till that offset to be function entry. For functions that cannot be traced, we fall back to using a fixed offset of 8 (two instructions) to categorize a probe as being at function entry for 64-bit elfv2, unless we are using pcrel. Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> Signed-off-by: Naveen N Rao <naveen@kernel.org> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://patch.msgid.link/20241030070850.1361304-3-hbathini@linux.ibm.com
This commit is contained in:
parent
0b9846529e
commit
be87d713ea
|
|
@ -105,24 +105,22 @@ kprobe_opcode_t *kprobe_lookup_name(const char *name, unsigned int offset)
|
|||
return addr;
|
||||
}
|
||||
|
||||
static bool arch_kprobe_on_func_entry(unsigned long offset)
|
||||
static bool arch_kprobe_on_func_entry(unsigned long addr, unsigned long offset)
|
||||
{
|
||||
#ifdef CONFIG_PPC64_ELF_ABI_V2
|
||||
#ifdef CONFIG_KPROBES_ON_FTRACE
|
||||
return offset <= 16;
|
||||
#else
|
||||
return offset <= 8;
|
||||
#endif
|
||||
#else
|
||||
unsigned long ip = ftrace_location(addr);
|
||||
|
||||
if (ip)
|
||||
return offset <= (ip - addr);
|
||||
if (IS_ENABLED(CONFIG_PPC64_ELF_ABI_V2) && !IS_ENABLED(CONFIG_PPC_KERNEL_PCREL))
|
||||
return offset <= 8;
|
||||
return !offset;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* XXX try and fold the magic of kprobe_lookup_name() in this */
|
||||
kprobe_opcode_t *arch_adjust_kprobe_addr(unsigned long addr, unsigned long offset,
|
||||
bool *on_func_entry)
|
||||
{
|
||||
*on_func_entry = arch_kprobe_on_func_entry(offset);
|
||||
*on_func_entry = arch_kprobe_on_func_entry(addr, offset);
|
||||
return (kprobe_opcode_t *)(addr + offset);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user