lkml.org 
[lkml]   [2022]   [Sep]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[PATCH -next 0/7] riscv: Improvments for stacktrace
    Date
    Currently, the stacktrace with FRAME_POINTER on riscv has some problem:

    1. stacktrace will stop at irq so it can't get the stack frames before
    irq entry.
    2. stacktrace can't unwind all the real stack frames when there is
    k{ret}probes or ftrace.

    These are mainly becase when there is a pt_regs on stack, we can't unwind
    the stack frame as normal function.

    Some architectures (e.g. arm64) create a extra stackframe inside pt_regs.
    However this doesn't work for riscv because the ra is not ensured to be
    pushed to stack. As explained in:
    commit f766f77a74f5("riscv/stacktrace: Fix stack output without ra on the stack top")

    So, I choosed the method of x86 that, if there is a pt_regs on stack,
    we encoded the frame pointer and save it. When unwinding stack frame,
    we can get pt_regs and registers required for unwinding stacks.

    In addition, the patch set contains some refactoring of stacktrace.c to
    keep the stacktrace code on riscv consistent with other architectures.

    Chen Zhongjin (7):
    riscv: stacktrace: Replace walk_stackframe with arch_stack_walk
    riscv: stacktrace: Introduce unwind functions
    riscv: stacktrace: Save pt_regs in encoded fp on irq entry
    riscv: syscall: Don't clobber s0 when syscall
    riscv: stacktrace: Implement stacktrace for irq
    riscv: stacktrace: Fix unwinding on ftrace_regs_call
    riscv: stacktrace: Fix unwinding on __kretporbe_trampoline

    arch/riscv/include/asm/frame.h | 45 +++++
    arch/riscv/include/asm/stacktrace.h | 13 +-
    arch/riscv/kernel/entry.S | 23 +--
    arch/riscv/kernel/mcount-dyn.S | 8 +
    arch/riscv/kernel/perf_callchain.c | 2 +-
    arch/riscv/kernel/probes/kprobes_trampoline.S | 8 +
    arch/riscv/kernel/stacktrace.c | 155 ++++++++++++------
    7 files changed, 195 insertions(+), 59 deletions(-)
    create mode 100644 arch/riscv/include/asm/frame.h

    --
    2.17.1

    \
     
     \ /
      Last update: 2022-09-20 17:16    [W:3.392 / U:0.220 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site