diff options
| author | Zong Li <zong.li@sifive.com> | 2024-02-02 01:51:02 +0000 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2024-03-06 14:48:41 +0000 |
| commit | 9537603a54361938cbd3253ef8304de2e67eae7f (patch) | |
| tree | 9e3ee0d7757e213a5844d74eab520099378680ca /scripts | |
| parent | 0c8a3d3354cd704f587182bd56a001cd4cec23a7 (diff) | |
| download | linux-9537603a54361938cbd3253ef8304de2e67eae7f.tar.gz linux-9537603a54361938cbd3253ef8304de2e67eae7f.tar.bz2 linux-9537603a54361938cbd3253ef8304de2e67eae7f.zip | |
riscv: add CALLER_ADDRx support
commit 680341382da56bd192ebfa4e58eaf4fec2e5bca7 upstream.
CALLER_ADDRx returns caller's address at specified level, they are used
for several tracers. These macros eventually use
__builtin_return_address(n) to get the caller's address if arch doesn't
define their own implementation.
In RISC-V, __builtin_return_address(n) only works when n == 0, we need
to walk the stack frame to get the caller's address at specified level.
data.level started from 'level + 3' due to the call flow of getting
caller's address in RISC-V implementation. If we don't have additional
three iteration, the level is corresponding to follows:
callsite -> return_address -> arch_stack_walk -> walk_stackframe
| | | |
level 3 level 2 level 1 level 0
Fixes: 10626c32e382 ("riscv/ftrace: Add basic support")
Cc: stable@vger.kernel.org
Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com>
Signed-off-by: Zong Li <zong.li@sifive.com>
Link: https://lore.kernel.org/r/20240202015102.26251-1-zong.li@sifive.com
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'scripts')
0 files changed, 0 insertions, 0 deletions
