mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
alpha: fill in pc for software event samples
Context switch and tracepoint events have no trap frame, so perf builds one with perf_fetch_caller_regs(). Alpha does not define perf_arch_fetch_caller_regs(), which leaves that pt_regs zeroed, and these samples report pc as 0. Record the caller's address as pc. The zero ps already marks the frame as kernel mode, and pt_regs has nowhere to keep sp, so pc is all that can be filled in. perf_fetch_caller_regs() gets that address from CALLER_ADDR0, which alpha defines as 0 when CONFIG_FRAME_POINTER is disabled. Finding the level zero return address does not need a frame pointer, so make alpha_ftrace_return_address0() available in both configurations. Only ftrace_return_address(n) still depends on frame pointers. Reported-by: Magnus Lindholm <linmag7@gmail.com> Closes: https://lore.kernel.org/all/CA%2B%3DFv5S8-Zk8-LUpZnWiBfTGSQXthepmRc_-a9O%2BpEPmVW0mRA@mail.gmail.com/ Suggested-by: Magnus Lindholm <linmag7@gmail.com> Assisted-by: Claude:claude-opus-5-5 Reviewed-by: Magnus Lindholm <linmag7@gmail.com> Acked-by: Ian Rogers <irogers@google.com> Signed-off-by: Matt Turner <mattst88@gmail.com> Tested-by: Magnus Lindholm <linmag7@gmail.com> Link: https://lore.kernel.org/r/20261018-alpha-perf-regs-v3-v3-5-52be85332c57@gmail.com Signed-off-by: Magnus Lindholm <linmag7@gmail.com>
This commit is contained in:
parent
9280e99d87
commit
1a85a03fc2
|
|
@ -2,8 +2,6 @@
|
|||
#ifndef _ASM_ALPHA_FTRACE_H
|
||||
#define _ASM_ALPHA_FTRACE_H
|
||||
|
||||
#ifdef CONFIG_FRAME_POINTER
|
||||
|
||||
static void *alpha_ftrace_return_address0(void)
|
||||
noinline notrace;
|
||||
static void *alpha_ftrace_return_address0(void)
|
||||
|
|
@ -13,6 +11,8 @@ static void *alpha_ftrace_return_address0(void)
|
|||
|
||||
#define ftrace_return_address0 alpha_ftrace_return_address0()
|
||||
|
||||
#ifdef CONFIG_FRAME_POINTER
|
||||
|
||||
/*
|
||||
* __builtin_return_address() requires a constant integer argument.
|
||||
* Keep this as a macro so the value is seen at the callsite.
|
||||
|
|
@ -21,7 +21,6 @@ static void *alpha_ftrace_return_address0(void)
|
|||
|
||||
#else /* !CONFIG_FRAME_POINTER */
|
||||
|
||||
#define ftrace_return_address0 0UL
|
||||
#define ftrace_return_address(n) ((void)(n), 0UL)
|
||||
|
||||
#endif /* CONFIG_FRAME_POINTER */
|
||||
|
|
|
|||
|
|
@ -1,4 +1,11 @@
|
|||
#ifndef __ASM_ALPHA_PERF_EVENT_H
|
||||
#define __ASM_ALPHA_PERF_EVENT_H
|
||||
|
||||
/*
|
||||
* Software events have no trap frame, so perf_fetch_caller_regs() fills
|
||||
* in a zeroed pt_regs. A zero ps already means kernel mode; only pc is
|
||||
* missing.
|
||||
*/
|
||||
#define perf_arch_fetch_caller_regs(regs, __ip) ((regs)->pc = (__ip))
|
||||
|
||||
#endif /* __ASM_ALPHA_PERF_EVENT_H */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user