[PATCH] ARM: proc-v7: fix out-of-range adr instruction

From: Arnd Bergmann
Date: Thu Feb 02 2023 - 05:25:46 EST


From: Arnd Bergmann <arnd@xxxxxxxx>

Before the change to CONFIG_ARCH_MULTIPLATFORM, some CONFIG_ARM_ERRATA_*
options were always hidden, but now they are user visible in expert
configurations, which caused a compile-time failure in randconfig
builds with all of the errata enabled.

arch/arm/mm/proc-v7.S:545: Error: invalid constant (fffffffffffffbf4) after fixup
/tmp/proc-v7-5b364b.s:1611:2: error: out of range pc-relative fixup value
adr r3, v7_crval

The problem is that the extra code size puts the v7_crval definition just
outside of the range of the 'adr' instruction. Use the adr_l macro instead
to allow longer offsets.

Fixes: 84fc86360623 ("ARM: make ARCH_MULTIPLATFORM user-visible")
Suggested-by: Ard Biesheuvel <ardb@xxxxxxxxxx>
Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx>
---
arch/arm/mm/proc-v7.S | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S
index 6b4ef9539b68..fe1469aa5be5 100644
--- a/arch/arm/mm/proc-v7.S
+++ b/arch/arm/mm/proc-v7.S
@@ -544,7 +544,7 @@ __errata_finish:
mcr p14, 6, r0, c0, c0, 0 @ stop userspace TEEHBR access
1:
#endif
- adr r3, v7_crval
+ adr_l r3, v7_crval
ldmia r3, {r3, r6}
ARM_BE8(orr r6, r6, #1 << 25) @ big-endian page tables
#ifdef CONFIG_SWP_EMULATE
--
2.39.0