fix:solve the problem of stack backtrace failure for llvm.
Change-Id: I0b0426e0e529cb6517d6a2712c6862ebbcea2239
This commit is contained in:
parent
4f1e1619a5
commit
3b9ccc839e
|
@ -669,12 +669,21 @@ VOID BackTraceSub(UINTPTR regFP)
|
||||||
|
|
||||||
while (IsValidFP(backFP, stackStart, stackEnd, &kvaddr) == TRUE) {
|
while (IsValidFP(backFP, stackStart, stackEnd, &kvaddr) == TRUE) {
|
||||||
tmpFP = backFP;
|
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;
|
backLR = *(UINTPTR *)(UINTPTR)kvaddr;
|
||||||
if (IsValidFP(tmpFP - POINTER_SIZE, stackStart, stackEnd, &kvaddr) == FALSE) {
|
if (IsValidFP(tmpFP - POINTER_SIZE, stackStart, stackEnd, &kvaddr) == FALSE) {
|
||||||
PrintExcInfo("traceback backFP check failed, backFP: 0x%x\n", tmpFP - POINTER_SIZE);
|
PrintExcInfo("traceback backFP check failed, backFP: 0x%x\n", tmpFP - POINTER_SIZE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
backFP = *(UINTPTR *)(UINTPTR)kvaddr;
|
backFP = *(UINTPTR *)(UINTPTR)kvaddr;
|
||||||
|
#endif
|
||||||
if (LOS_IsUserAddress((VADDR_T)backLR) == TRUE) {
|
if (LOS_IsUserAddress((VADDR_T)backLR) == TRUE) {
|
||||||
region = LOS_RegionFind(OsCurrProcessGet()->vmSpace, (VADDR_T)backLR);
|
region = LOS_RegionFind(OsCurrProcessGet()->vmSpace, (VADDR_T)backLR);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue