arm64: PIE: Allow fixed stack pointer
authorAndre Przywara <andre.przywara@arm.com>
Wed, 30 Sep 2020 16:39:15 +0000 (17:39 +0100)
committerTom Rini <trini@konsulko.com>
Thu, 8 Oct 2020 15:42:36 +0000 (11:42 -0400)
Currently selecting CONFIG_POSITION_INDEPENDENT also forces us to use an
initial stack pointer relative to the beginning of the BSS section.
This makes some sense, because this should be writable memory anyway.

However the BSS section is not cleared or used until later in the
setup process (after relocation), so memory nearby might not be
available early enough to host the initial stack. This is an issue if
U-Boot is loaded from (Flash-)ROM, for instance.

Allow CONFIG_INIT_SP_RELATIVE to be turned off by a board's config, to
be able to select a fixed stack pointer, for instance in known good
DRAM.

This will help QEMU utilising PIE, when it's loaded to (Flash-)ROM.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
arch/arm/Kconfig

index a98dba3900f559be92b4875ee62cccef6a86e90a..b81d80cd0de419b469740545f32356a96cd2b516 100644 (file)
@@ -12,7 +12,6 @@ config ARM64
 if ARM64
 config POSITION_INDEPENDENT
        bool "Generate position-independent pre-relocation code"
-       select INIT_SP_RELATIVE
        help
          U-Boot expects to be linked to a specific hard-coded address, and to
          be loaded to and run from that address. This option lifts that
@@ -23,6 +22,7 @@ config POSITION_INDEPENDENT
 
 config INIT_SP_RELATIVE
        bool "Specify the early stack pointer relative to the .bss section"
+       default y if POSITION_INDEPENDENT
        help
          U-Boot typically uses a hard-coded value for the stack pointer
          before relocation. Enable this option to instead calculate the