| From d3780f8ae52ce4eaa3d998c939ec4273c1bda38f Mon Sep 17 00:00:00 2001 |
| From: Sami Tolvanen <samitolvanen@google.com> |
| Date: Thu, 30 Jul 2020 08:37:01 -0700 |
| Subject: [PATCH] arm64/alternatives: move length validation inside the |
| subsection |
| |
| commit 966a0acce2fca776391823381dba95c40e03c339 upstream. |
| |
| 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> |
| |
| diff --git a/arch/arm64/include/asm/alternative.h b/arch/arm64/include/asm/alternative.h |
| index f7facb4eda9a..aa9ad4097361 100644 |
| --- a/arch/arm64/include/asm/alternative.h |
| +++ b/arch/arm64/include/asm/alternative.h |
| @@ -75,9 +75,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" \ |
| ".else\n\t" \ |
| "663:\n\t" \ |
| "664:\n\t" \ |
| -- |
| 2.27.0 |
| |