| From 0282a2b989deb4a6f680d47143c6dadaea36e6a8 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 30 Jul 2020 08:37:01 -0700 |
| Subject: arm64/alternatives: move length validation inside the subsection |
| |
| From: Sami Tolvanen <samitolvanen@google.com> |
| |
| [ Upstream commit 966a0acce2fca776391823381dba95c40e03c339 ] |
| |
| Commit f7b93d42945c ("arm64/alternatives: use subsections for replacement |
| sequences") breaks LLVM's integrated assembler, because due to its |
| one-pass design, it cannot compute instruction sequence lengths before the |
| layout for the subsection has been finalized. This change fixes the build |
| by moving the .org directives inside the subsection, so they are processed |
| after the subsection layout is known. |
| |
| Fixes: f7b93d42945c ("arm64/alternatives: use subsections for replacement sequences") |
| Signed-off-by: Sami Tolvanen <samitolvanen@google.com> |
| Link: https://github.com/ClangBuiltLinux/linux/issues/1078 |
| Link: https://lore.kernel.org/r/20200730153701.3892953-1-samitolvanen@google.com |
| Signed-off-by: Will Deacon <will@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/arm64/include/asm/alternative.h | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/arch/arm64/include/asm/alternative.h b/arch/arm64/include/asm/alternative.h |
| index 849d891c60a81..844f05b23115a 100644 |
| --- a/arch/arm64/include/asm/alternative.h |
| +++ b/arch/arm64/include/asm/alternative.h |
| @@ -77,9 +77,9 @@ static inline void apply_alternatives_module(void *start, size_t length) { } |
| "663:\n\t" \ |
| newinstr "\n" \ |
| "664:\n\t" \ |
| - ".previous\n\t" \ |
| ".org . - (664b-663b) + (662b-661b)\n\t" \ |
| - ".org . - (662b-661b) + (664b-663b)\n" \ |
| + ".org . - (662b-661b) + (664b-663b)\n\t" \ |
| + ".previous\n" \ |
| ".endif\n" |
| |
| #define __ALTERNATIVE_CFG_CB(oldinstr, feature, cfg_enabled, cb) \ |
| -- |
| 2.25.1 |
| |