• Zong Li's avatar
    riscv: add CALLER_ADDRx support · 68034138
    Zong Li authored
    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: 10626c32 ("riscv/ftrace: Add basic support")
    Cc: stable@vger.kernel.org
    Reviewed-by: default avatarAlexandre Ghiti <alexghiti@rivosinc.com>
    Signed-off-by: default avatarZong Li <zong.li@sifive.com>
    Link: https://lore.kernel.org/r/20240202015102.26251-1-zong.li@sifive.comSigned-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
    68034138
ftrace.h 4.65 KB