diff options
author | Qing Zhang <zhangqing@loongson.cn> | 2022-08-06 10:10:03 +0200 |
---|---|---|
committer | Huacai Chen <chenhuacai@loongson.cn> | 2022-08-12 07:10:11 +0200 |
commit | 49aef111e2dae176a7708b532118f33f24289248 (patch) | |
tree | 394ff32e5dba1e22ebac5015fe3164e7ed2e8a77 /arch/loongarch/kernel/traps.c | |
parent | LoongArch: Add guess unwinder support (diff) | |
download | linux-49aef111e2dae176a7708b532118f33f24289248.tar.xz linux-49aef111e2dae176a7708b532118f33f24289248.zip |
LoongArch: Add prologue unwinder support
It unwind the stack frame based on prologue code analyze.
CONFIG_KALLSYMS is needed, at least the address and length
of each function.
Three stages when we do unwind,
1) unwind_start(), the prapare of unwinding, fill unwind_state.
2) unwind_done(), judge whether the unwind process is finished or not.
3) unwind_next_frame(), unwind the next frame.
Dividing unwinder helps to add new unwinders in the future, e.g.:
unwinder_frame, unwinder_orc, .etc.
Signed-off-by: Qing Zhang <zhangqing@loongson.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Diffstat (limited to 'arch/loongarch/kernel/traps.c')
-rw-r--r-- | arch/loongarch/kernel/traps.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/loongarch/kernel/traps.c b/arch/loongarch/kernel/traps.c index f65fdf90d29e..aa1c95aaf595 100644 --- a/arch/loongarch/kernel/traps.c +++ b/arch/loongarch/kernel/traps.c @@ -71,6 +71,9 @@ static void show_backtrace(struct task_struct *task, const struct pt_regs *regs, if (!task) task = current; + if (user_mode(regs)) + state.type = UNWINDER_GUESS; + printk("%sCall Trace:", loglvl); for (unwind_start(&state, task, pregs); !unwind_done(&state); unwind_next_frame(&state)) { |