This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit e4ae2b48b8d8d2d54a74f949cc1adbbc8758fe7e Author: zhangyuan21 <zhangyua...@xiaomi.com> AuthorDate: Fri Mar 31 09:50:58 2023 +0800 arch/arm64: Obtaining the correct fp pointer Signed-off-by: zhangyuan21 <zhangyua...@xiaomi.com> --- arch/arm64/src/common/Make.defs | 6 +++++- arch/arm64/src/common/arm64_backtrace.c | 7 +++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/arch/arm64/src/common/Make.defs b/arch/arm64/src/common/Make.defs index ac6e7205a3..44ab574f5a 100644 --- a/arch/arm64/src/common/Make.defs +++ b/arch/arm64/src/common/Make.defs @@ -47,7 +47,7 @@ CMN_CSRCS += arm64_nputs.c arm64_idle.c arm64_copystate.c arm64_createstack.c CMN_CSRCS += arm64_releasestack.c arm64_stackframe.c arm64_usestack.c CMN_CSRCS += arm64_task_sched.c arm64_exit.c arm64_vfork.c arm64_switchcontext.c CMN_CSRCS += arm64_schedulesigaction.c arm64_sigdeliver.c -CMN_CSRCS += arm64_backtrace.c arm64_getintstack.c arm64_registerdump.c +CMN_CSRCS += arm64_getintstack.c arm64_registerdump.c CMN_CSRCS += arm64_perf.c # Common C source files ( hardware BSP ) @@ -115,3 +115,7 @@ endif ifeq ($(CONFIG_STACK_COLORATION),y) CMN_CSRCS += arm64_checkstack.c endif + +ifeq ($(CONFIG_SCHED_BACKTRACE),y) +CMN_CSRCS += arm64_backtrace.c +endif diff --git a/arch/arm64/src/common/arm64_backtrace.c b/arch/arm64/src/common/arm64_backtrace.c index 24d1ac956d..60406f7f4d 100644 --- a/arch/arm64/src/common/arm64_backtrace.c +++ b/arch/arm64/src/common/arm64_backtrace.c @@ -53,14 +53,13 @@ static int backtrace(uintptr_t *base, uintptr_t *limit, if (pc) { - i++; if (*skip-- <= 0) { - *buffer++ = pc; + buffer[i++] = pc; } } - for (; i < size; fp = (uintptr_t *)*(fp - 1), i++) + for (; i < size; fp = (uintptr_t *)*fp) { if (fp > limit || fp < base || *fp == 0) { @@ -69,7 +68,7 @@ static int backtrace(uintptr_t *base, uintptr_t *limit, if (*skip-- <= 0) { - *buffer++ = (void *)*fp; + buffer[i++] = (void *)*(fp + 1); } }