From 03a64228ed7a0b6c73b7495f379d1f04e8eb3adf Mon Sep 17 00:00:00 2001 From: YOUR_NAME Date: Wed, 7 Apr 2021 15:43:57 +0800 Subject: [PATCH] [Desc] Solve the problem of exception stack traceback for clang. Change-Id: Ifdca9a23ba788fa66f3815203514c9034680df49 --- arch/arm/arm/src/los_exc.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/arch/arm/arm/src/los_exc.c b/arch/arm/arm/src/los_exc.c index 880a72ed..58f66577 100755 --- a/arch/arm/arm/src/los_exc.c +++ b/arch/arm/arm/src/los_exc.c @@ -688,12 +688,21 @@ VOID BackTraceSub(UINTPTR regFP) while (IsValidFP(backFP, stackStart, stackEnd, &kvaddr) == TRUE) { tmpFP = backFP; +#ifdef LOSCFG_COMPILER_CLANG_LLVM + backFP = *(UINTPTR *)(UINTPTR)kvaddr; + if (IsValidFP(tmpFP + POINTER_SIZE, stackStart, stackEnd, &kvaddr) == FALSE) { + PrintExcInfo("traceback backLR check failed, backLP: 0x%x\n", tmpFP + POINTER_SIZE); + return; + } backLR = *(UINTPTR *)(UINTPTR)kvaddr; +#else + backLR = *(UINTPTR *)(UINTPTR)kvaddr; if (IsValidFP(tmpFP - POINTER_SIZE, stackStart, stackEnd, &kvaddr) == FALSE) { PrintExcInfo("traceback backFP check failed, backFP: 0x%x\n", tmpFP - POINTER_SIZE); return; } backFP = *(UINTPTR *)(UINTPTR)kvaddr; +#endif #ifdef LOSCFG_KERNEL_VM LosVmMapRegion *region = NULL; if (LOS_IsUserAddress((VADDR_T)backLR) == TRUE) {