@@ -65,9 +65,6 @@ endif
ifeq ($(CONFIG_CMODEL_MEDANY),y)
KBUILD_CFLAGS += -mcmodel=medany
endif
-ifeq ($(CONFIG_PERF_EVENTS),y)
- KBUILD_CFLAGS += -fno-omit-frame-pointer
-endif
KBUILD_CFLAGS_MODULE += $(call cc-option,-mno-relax)
@@ -16,13 +16,13 @@
register unsigned long sp_in_global __asm__("sp");
-#ifdef CONFIG_FRAME_POINTER
-
void notrace walk_stackframe(struct task_struct *task, struct pt_regs *regs,
bool (*fn)(void *, unsigned long), void *arg)
{
unsigned long fp, sp, pc;
+ BUILD_BUG_ON(!IS_ENABLED(CONFIG_FRAME_POINTER));
+
if (regs) {
fp = frame_pointer(regs);
sp = user_stack_pointer(regs);
@@ -65,39 +65,6 @@ void notrace walk_stackframe(struct task_struct *task, struct pt_regs *regs,
}
}
-#else /* !CONFIG_FRAME_POINTER */
-
-void notrace walk_stackframe(struct task_struct *task,
- struct pt_regs *regs, bool (*fn)(void *, unsigned long), void *arg)
-{
- unsigned long sp, pc;
- unsigned long *ksp;
-
- if (regs) {
- sp = user_stack_pointer(regs);
- pc = instruction_pointer(regs);
- } else if (task == NULL || task == current) {
- sp = sp_in_global;
- pc = (unsigned long)walk_stackframe;
- } else {
- /* task blocked in __switch_to */
- sp = task->thread.sp;
- pc = task->thread.ra;
- }
-
- if (unlikely(sp & 0x7))
- return;
-
- ksp = (unsigned long *)sp;
- while (!kstack_end(ksp)) {
- if (__kernel_text_address(pc) && unlikely(!fn(arg, pc)))
- break;
- pc = (*ksp++) - 0x4;
- }
-}
-
-#endif /* CONFIG_FRAME_POINTER */
-
static bool print_trace_address(void *arg, unsigned long pc)
{
const char *loglvl = arg;
while frame pointer generates horrible code it is a necessary evil on RISC-V as the only way to unwind stack. In fact Kconfig unconditonally selects ARCH_WANT_FRAME_POINTERS, so any code for handling !FRAME_POINTER is essentially dead weight. And while here remove redundant setting of -fno-omit-frame-pointer as this is enabled by generic code for CONFIG_FRAME_POINTER Signed-off-by: Vineet Gupta <vineetg@rivosinc.com> --- arch/riscv/Makefile | 3 --- arch/riscv/kernel/stacktrace.c | 37 ++-------------------------------- 2 files changed, 2 insertions(+), 38 deletions(-)