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:
parent
ddf3dc8237
commit
25278a02eb
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue