mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 20:07:46 +09:00
ANDROID: arm64: lse: fix LSE atomics with LTO
LLVM's integrated assembler is always used for inline assembly with CONFIG_LTO_CLANG. Unlike gcc, LLVM considers each inline assembly block to be independent and therefore, any preambles that enable features must be included in each block. This change adds the necessary preamble to ARM64_LSE_ATOMIC_INSN to allow CONFIG_ARM64_LSE_ATOMICS to be enabled with LTO. Bug: 117299373 Bug: 133186739 Change-Id: Icc06361dc2a2dba0f5f967d7f540cac2753b3e9c Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
This commit is contained in:
committed by
Alistair Strachan
parent
864f2bc0e4
commit
3bd6dd6a79
@@ -20,7 +20,12 @@
|
||||
|
||||
#else /* __ASSEMBLER__ */
|
||||
|
||||
#ifdef CONFIG_LTO_CLANG
|
||||
#define __LSE_PREAMBLE ".arch armv8-a+lse\n"
|
||||
#else
|
||||
__asm__(".arch_extension lse");
|
||||
#define __LSE_PREAMBLE
|
||||
#endif
|
||||
|
||||
/* Move the ll/sc atomics out-of-line */
|
||||
#define __LL_SC_INLINE notrace
|
||||
@@ -33,7 +38,7 @@ __asm__(".arch_extension lse");
|
||||
|
||||
/* In-line patching at runtime */
|
||||
#define ARM64_LSE_ATOMIC_INSN(llsc, lse) \
|
||||
ALTERNATIVE(llsc, lse, ARM64_HAS_LSE_ATOMICS)
|
||||
ALTERNATIVE(llsc, __LSE_PREAMBLE lse, ARM64_HAS_LSE_ATOMICS)
|
||||
|
||||
#endif /* __ASSEMBLER__ */
|
||||
#else /* CONFIG_AS_LSE && CONFIG_ARM64_LSE_ATOMICS */
|
||||
|
||||
Reference in New Issue
Block a user