From 38ccd1479b44520949e6623c211a169f5893b70d Mon Sep 17 00:00:00 2001 From: Jukka Laitinen Date: Thu, 30 Jan 2025 08:59:39 +0200 Subject: [PATCH] arch/risc-v/src/common/riscv_backtrace.c: Fix "error: pointer of type 'void *' used in arithmetic" Signed-off-by: Jukka Laitinen --- arch/risc-v/src/common/riscv_backtrace.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/arch/risc-v/src/common/riscv_backtrace.c b/arch/risc-v/src/common/riscv_backtrace.c index 3787e2a641633..143dacd4c27b3 100644 --- a/arch/risc-v/src/common/riscv_backtrace.c +++ b/arch/risc-v/src/common/riscv_backtrace.c @@ -157,13 +157,15 @@ int up_backtrace(struct tcb_s *tcb, void **buffer, int size, int skip) (void *)getfp(), NULL, buffer, size, &skip); #else ret = backtrace(rtcb->stack_base_ptr, - rtcb->stack_base_ptr + rtcb->adj_stack_size, + (uintptr_t *)((uintptr_t)rtcb->stack_base_ptr + + rtcb->adj_stack_size), (void *)getfp(), NULL, buffer, size, &skip); #endif if (ret < size) { - ret += backtrace(rtcb->stack_base_ptr, - rtcb->stack_base_ptr + rtcb->adj_stack_size, + ret += backtrace(rtcb->stack_base_ptr, (uintptr_t *) + ((uintptr_t)rtcb->stack_base_ptr + + rtcb->adj_stack_size), running_regs()[REG_FP], running_regs()[REG_EPC], &buffer[ret], size - ret, &skip); @@ -174,16 +176,18 @@ int up_backtrace(struct tcb_s *tcb, void **buffer, int size, int skip) #ifdef CONFIG_ARCH_KERNEL_STACK if (rtcb->xcp.ustkptr != NULL) { - ret = backtrace(rtcb->stack_base_ptr, - rtcb->stack_base_ptr + rtcb->adj_stack_size, + ret = backtrace(rtcb->stack_base_ptr, (uintptr_t *) + ((uintptr_t)rtcb->stack_base_ptr + + rtcb->adj_stack_size), (void *)*(rtcb->xcp.ustkptr + 1), NULL, buffer, size, &skip); } else #endif { - ret = backtrace(rtcb->stack_base_ptr, - rtcb->stack_base_ptr + rtcb->adj_stack_size, + ret = backtrace(rtcb->stack_base_ptr, (uintptr_t *) + ((uintptr_t)rtcb->stack_base_ptr + + rtcb->adj_stack_size), (void *)getfp(), NULL, buffer, size, &skip); } } @@ -194,7 +198,8 @@ int up_backtrace(struct tcb_s *tcb, void **buffer, int size, int skip) if (tcb->xcp.ustkptr != NULL) { ret = backtrace(tcb->stack_base_ptr, - tcb->stack_base_ptr + tcb->adj_stack_size, + (uintptr_t *)((uintptr_t)tcb->stack_base_ptr + + tcb->adj_stack_size), (void *)*(tcb->xcp.ustkptr + 1), NULL, buffer, size, &skip); } @@ -202,7 +207,8 @@ int up_backtrace(struct tcb_s *tcb, void **buffer, int size, int skip) #endif { ret = backtrace(tcb->stack_base_ptr, - tcb->stack_base_ptr + tcb->adj_stack_size, + (uintptr_t *)((uintptr_t)tcb->stack_base_ptr + + tcb->adj_stack_size), (void *)tcb->xcp.regs[REG_FP], (void *)tcb->xcp.regs[REG_EPC], buffer, size, &skip);