hc
2024-02-19 1c055e55a242a33e574e48be530e06770a210dcd
kernel/arch/riscv/kernel/stacktrace.c
....@@ -57,9 +57,15 @@
5757 /* Unwind stack frame */
5858 frame = (struct stackframe *)fp - 1;
5959 sp = fp;
60
- fp = frame->fp;
61
- pc = ftrace_graph_ret_addr(current, NULL, frame->ra,
62
- (unsigned long *)(fp - 8));
60
+ if (regs && (regs->epc == pc) && (frame->fp & 0x7)) {
61
+ fp = frame->ra;
62
+ pc = regs->ra;
63
+ } else {
64
+ fp = frame->fp;
65
+ pc = ftrace_graph_ret_addr(current, NULL, frame->ra,
66
+ &frame->ra);
67
+ }
68
+
6369 }
6470 }
6571
....@@ -90,7 +96,7 @@
9096 while (!kstack_end(ksp)) {
9197 if (__kernel_text_address(pc) && unlikely(fn(pc, arg)))
9298 break;
93
- pc = (*ksp++) - 0x4;
99
+ pc = READ_ONCE_NOCHECK(*ksp++) - 0x4;
94100 }
95101 }
96102