From 5d01a971804e3f7f7d320870acf5418bd8497535 Mon Sep 17 00:00:00 2001 From: Ilias Apalodimas Date: Tue, 2 Sep 2025 09:08:12 +0300 Subject: [PATCH] arm64: Properly clear BSS Brock reports a breakage on an RK3568 SoC. His patch is correct but he never followed up on the requested changes. We currently use ldr to calculate the address of __bss_start and __bss_end. However the absolute addresses of the literal pool are never relocated and we end up clearing the wrong memory section. Use PC-relative addressing instead. Link: https://lore.kernel.org/u-boot/zfknlzcemnnaka5w2er5wjwefwoidrpndc4gjhx6d5xr6nlcjr@pasfayjiutii/ Suggested-by: brock_zheng Reported-by: brock_zheng Signed-off-by: Ilias Apalodimas --- arch/arm/lib/crt0_64.S | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/arm/lib/crt0_64.S b/arch/arm/lib/crt0_64.S index f3f279f2c39..3e7627aa389 100644 --- a/arch/arm/lib/crt0_64.S +++ b/arch/arm/lib/crt0_64.S @@ -158,8 +158,10 @@ relocation_return: /* * Clear BSS section */ - ldr x0, =__bss_start /* this is auto-relocated! */ - ldr x1, =__bss_end /* this is auto-relocated! */ + adrp x0, __bss_start + add x0, x0, #:lo12:__bss_start + adrp x1, __bss_end + add x1, x1, #:lo12:__bss_end clear_loop: str xzr, [x0], #8 cmp x0, x1 -- 2.47.3