:: [maemo-leste] [PATCH 1/3] arm32: Fi…
Top Page
Delete this message
Reply to this message
Author: Pali Rohár
To: Tom Rini
CC: u-boot, maemo-leste
Old-Topics: [maemo-leste] [PATCH 0/3] Nokia RX-51: Fixes for U-Boot v2023.01-rc1
Subject: [maemo-leste] [PATCH 1/3] arm32: Fix relocation of env_addr if POSITION_INDEPENDENT=y
Apply commit 534f0fbd6520 ("arm64: Fix relocation of env_addr if
POSITION_INDEPENDENT=y") also for 32-bit ARM.

This change fixes crashing of U-Boot on ARMv7 (Omap3 / Cortex-A8) Nokia N900
phone (real HW). Note that qemu emulator of this board with same u-boot.bin
binary has not triggered this crash.

Crash happened after U-Boot printed following debug lines to serial console:

    initcall: 0001ea8c (relocated to 8fe0aa8c)
    Loading Environment from <NULL>... Using default environment
    Destroy Hash Table: 8fe25a98 table = 00000000
    Create Hash Table: N=387

Signed-off-by: Pali Rohár <pali@???>
arch/arm/lib/crt0.S | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/arch/arm/lib/crt0.S b/arch/arm/lib/crt0.S
index 6d566dca5c81..a0311438b458 100644
--- a/arch/arm/lib/crt0.S
+++ b/arch/arm/lib/crt0.S
@@ -147,6 +147,11 @@ ENTRY(_main)
     ldr    r1, =CONFIG_TEXT_BASE
     sub    r1, r0
     add    lr, r1
+    ldr    r0, [r9, #GD_ENV_ADDR]        /* r0 = gd->env_addr */
+    add    r0, r0, r1
+    str    r0, [r9, #GD_ENV_ADDR]
     ldr    r0, [r9, #GD_RELOC_OFF]        /* r0 = gd->reloc_off */
     add    lr, lr, r0