From 8b88bf9a3114dcb107622f3cf04e8b7737822b8d Mon Sep 17 00:00:00 2001 From: "qiankun.wang" Date: Fri, 12 May 2023 14:33:37 +0800 Subject: [PATCH] unwind: fix too mush unwind warning on arm32 [1/1] PD#SWPL-114632 Problem: too much unwind warning when pt_regs pc register is invalid Solution: use pt_regs lr register to unwind, replace pc register Verify: C3 Change-Id: I53bc7739e2909818c04d6e50b2172a06984bd883 Signed-off-by: qiankun.wang --- arch/arm/kernel/unwind.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/arch/arm/kernel/unwind.c b/arch/arm/kernel/unwind.c index d91ed8e4310c..4daffd38b0ee 100644 --- a/arch/arm/kernel/unwind.c +++ b/arch/arm/kernel/unwind.c @@ -413,10 +413,20 @@ int unwind_frame(struct stackframe *frame) return -URC_FAILURE; idx = unwind_find_idx(frame->pc); +#if IS_ENABLED(CONFIG_AMLOGIC_ARM_UNWIND) + if (!idx) + idx = unwind_find_idx(frame->lr); + if (!idx) { + pr_warn("unwind: Index not found, pc=%pS, lr=%pS\n", + (void *)frame->pc, (void *)frame->lr); + return -URC_FAILURE; + } +#else if (!idx) { pr_warn("unwind: Index not found %08lx\n", frame->pc); return -URC_FAILURE; } +#endif ctrl.vrs[FP] = frame->fp; ctrl.vrs[SP] = frame->sp;