fix:mutex trace中ArchLRGet接口改变实现方式

方案描述:
将ArchLRGet接口的实现方式由内联函数修改为宏,
防止产品添加--no_inline等编译选项导致函数无法在调用点展开,
造成由于函数调用过程中函数栈帧的变化带来的LR寄存器中存储的值的变化。

Close #I69D9N

Signed-off-by: zhangdengyu <zhangdengyu2@huawei.com>
Change-Id: If417bc2ec9febf064c63da198faf4ac000d70c52
This commit is contained in:
zhangdengyu 2023-01-07 18:20:48 +08:00
parent ddf3dc8237
commit 25278a02eb
1 changed files with 15 additions and 13 deletions

View File

@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved. * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. * Copyright (c) 2020-2023 Huawei Device Co., Ltd. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, * Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met: * are permitted provided that the following conditions are met:
@ -63,12 +63,13 @@ STATIC INLINE UINTPTR ArchMspGet(VOID)
return msp; return msp;
} }
STATIC INLINE UINTPTR ArchLRGet(VOID) #define ARCH_LR_GET() \
{ ({ \
UINTPTR lr; UINTPTR lr; \
__asm("mov %0, lr" : "=r" (lr)); __asm("mov %0, lr" : "=r" (lr)); \
return lr; (lr); \
} })
#define ArchLRGet ARCH_LR_GET
#elif defined(__CLANG_ARM) || defined(__GNUC__) #elif defined(__CLANG_ARM) || defined(__GNUC__)
STATIC INLINE UINTPTR ArchSpGet(VOID) STATIC INLINE UINTPTR ArchSpGet(VOID)
{ {
@ -91,12 +92,13 @@ STATIC INLINE UINTPTR ArchMspGet(VOID)
return msp; return msp;
} }
STATIC INLINE UINTPTR ArchLRGet(VOID) #define ARCH_LR_GET() \
{ ({ \
UINTPTR lr; UINTPTR lr; \
__asm volatile("mov %0, lr" : "=r" (lr)); __asm volatile("mov %0, lr" : "=r" (lr)); \
return lr; (lr); \
} })
#define ArchLRGet ARCH_LR_GET
#else #else
/* Other platforms to be improved */ /* Other platforms to be improved */
#endif #endif