u-boot-brain/arch/arm/lib
Kunihiko Hayashi 534f0fbd65 arm64: Fix relocation of env_addr if POSITION_INDEPENDENT=y
If both POSITION_INDEPENDENT and SYS_RELOC_GD_ENV_ADDR are enabled,
wherever original env is placed anywhere, it should be relocated to
the right address.

Relocation offset gd->reloc_off is calculated with SYS_TEXT_BASE in
setup_reloc() and env address gd->env_addr is relocated by the offset in
initr_reloc_global_data().

gd->env_addr
  = (orig env) + gd->reloc_off
  = (orig env) + (gd->relocaddr - SYS_TEXT_BASE)

However, SYS_TEXT_BASE isn't always runtime base address when
POSITION_INDEPENDENT is enabled. So the relocated env_addr might point to
wrong address. For example, if SYS_TEXT_BASE is zero, gd->env_addr is
out of memory location and memory exception will occur.

There is a difference between linked address such as SYS_TEXT_BASE and
runtime base address. In _main, the difference is calculated as
"run-vs-link" offset. The env_addr should also be added to the offset
to fix the address.

gd->env_addr
  = (orig env) + ("run-vs-link" offset)   + gd->reloc_off
  = (orig env) + (SYS_TEXT_BASE - _start) + (gd->relocaddr - SYS_TEXT_BASE)
  = (orig env) + (gd->relocaddr - _start)

Cc: Marek Vasut <marex@denx.de>
Signed-off-by: Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
Acked-by: Marek Vasut <marex@denx.de>
Tested-by: Marek Vasut <marex@denx.de>
2021-06-28 14:47:10 -04:00
..
Makefile ARM: make LTO available 2021-05-24 14:21:30 -04:00
ashldi3.S SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
ashrdi3.S SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
asm-offsets.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
bdinfo.c Merge branch '2021-02-02-drop-asm_global_data-when-unused' 2021-02-15 10:16:45 -05:00
bootm-fdt.c common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
bootm.c bootm: do not hang on failure 2021-04-12 17:17:11 -04:00
cache-cp15.c arm: cp15: remove weak function arm_init_domains 2021-03-02 15:53:37 -05:00
cache-pl310.c ARM: cache: Fix incorrect bitwise operation 2019-02-28 14:21:46 -05:00
cache.c common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
ccn504.S SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
cmd_boot.c command: Remove the cmd_tbl_t typedef 2020-05-18 18:36:55 -04:00
crt0.S arm: Add SPL build check to SPL early bss clear 2020-08-04 23:30:02 -04:00
crt0_64.S arm64: Fix relocation of env_addr if POSITION_INDEPENDENT=y 2021-06-28 14:47:10 -04:00
crt0_aarch64_efi.S efi_loader: add Linux magic to aarch64 crt0 2021-01-29 20:22:40 +01:00
crt0_arm_efi.S efi_loader: use predefined constants in crt0_*_efi.S 2019-07-16 22:17:14 +00:00
debug.S SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
div0.c common: Move hang() to the same header as panic() 2020-01-17 17:53:40 -05:00
div64.S SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
eabi_compat.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
elf_aarch64_efi.lds SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
elf_arm_efi.lds SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
gic-v3-its.c arm64: gic-v3-its: Clear the Pending table before enabling LPIs 2021-04-20 07:31:12 -04:00
gic_64.S arm64: gic: Do gicv3 secure initialization based on EL level 2018-10-16 14:58:46 +02:00
image.c common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
interrupts.c reset: Remove addr parameter from reset_cpu() 2021-03-02 14:03:02 -05:00
interrupts_64.c common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
interrupts_m.c reset: Remove addr parameter from reset_cpu() 2021-03-02 14:03:02 -05:00
lib1funcs.S SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
lshrdi3.S SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
memcpy.S arm: Make arch specific memcpy thumb-safe. 2018-11-16 16:51:57 -05:00
memset.S SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
muldi3.S SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
psci-dt.c treewide: use CONFIG_IS_ENABLED() for ARMV8_SEC_FIRMWARE_SUPPORT 2020-12-04 16:09:05 -05:00
reloc_aarch64_efi.c arm: Remove unused _relocate arguments 2018-07-19 16:31:36 -04:00
reloc_arm_efi.c arm: Remove unused _relocate arguments 2018-07-19 16:31:36 -04:00
relocate.S arm: armv7m: clean up armv7m unified code compilation 2018-09-10 21:19:33 -04:00
relocate_64.S common: Move relocate_code() to init.h 2020-01-17 13:26:49 -05:00
reset.c reset: Remove addr parameter from reset_cpu() 2021-03-02 14:03:02 -05:00
sections.c treewide: Convert macro and uses of __section(foo) to __section("foo") 2021-05-24 14:21:30 -04:00
semihosting.c common: Drop log.h from common header 2020-05-18 21:19:18 -04:00
setjmp.S SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
setjmp_aarch64.S SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
spl.c treewide: Convert macro and uses of __section(foo) to __section("foo") 2021-05-24 14:21:30 -04:00
stack.c common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
uldivmod.S SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
vectors.S arm: remove ARCH_ROCKCHIP macro in common code 2019-05-08 17:34:12 +08:00
vectors_m.S arm: armv7m: clean up armv7m unified code compilation 2018-09-10 21:19:33 -04:00
zimage.c arm: zimage: Use correct symbol to hide messages in SPL 2021-04-27 08:05:30 -04:00