summaryrefslogtreecommitdiffstats
path: root/arch/loongarch/kernel/traps.c
diff options
context:
space:
mode:
authorQing Zhang <zhangqing@loongson.cn>2022-08-06 10:10:03 +0200
committerHuacai Chen <chenhuacai@loongson.cn>2022-08-12 07:10:11 +0200
commit49aef111e2dae176a7708b532118f33f24289248 (patch)
tree394ff32e5dba1e22ebac5015fe3164e7ed2e8a77 /arch/loongarch/kernel/traps.c
parentLoongArch: Add guess unwinder support (diff)
downloadlinux-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.c3
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)) {