[PATCH v3 4/4] arm64: Trap non-PIE builds early if starting from wrong address

Michal Simek michal.simek at xilinx.com
Thu Sep 10 14:38:21 CEST 2020



On 09. 09. 20 19:07, Edgar E. Iglesias wrote:
> From: "Edgar E. Iglesias" <edgar.iglesias at xilinx.com>
> 
> Trap non-PIE builds early if the start address doesn't match
> between run-time and link-time. This will trap the startup
> sequence rather than letting it run into obscure errors.
> 
> Signed-off-by: Edgar E. Iglesias <edgar.iglesias at xilinx.com>
> ---
>  arch/arm/cpu/armv8/start.S | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/arch/arm/cpu/armv8/start.S b/arch/arm/cpu/armv8/start.S
> index e5c2856cf5..39e1b842c4 100644
> --- a/arch/arm/cpu/armv8/start.S
> +++ b/arch/arm/cpu/armv8/start.S
> @@ -101,6 +101,19 @@ pie_skip_reloc:
>  	cmp	x2, x3
>  	b.lo	pie_fix_loop
>  pie_fixup_done:
> +#else
> +	adr	x0, _start
> +	ldr	x1, _TEXT_BASE
> +	cmp	x0, x1
> +	beq	1f
> +0:
> +	/*
> +	 * FATAL, can't continue.
> +	 * U-Boot needs to start executing at CONFIG_SYS_TEXT_BASE.
> +	 */
> +	wfi
> +	b	0b
> +1:
>  #endif
>  
>  #ifdef CONFIG_SYS_RESET_SCTRL
> 

NACK for this.

1. It breaks SPL flow because CONFIG_SYS_TEXT_BASE is text base for
U-Boot proper
2. It likely also breaks TPL flow for the same reason

3. And last thing is that this code is used only for U-Boot proper.
.globl	_TEXT_BASE
_TEXT_BASE:
	.quad	CONFIG_SYS_TEXT_BASE

The fixes are below. Point 3 should be likely be in separate patch
because it is unrelated.

Thanks,
Michal


diff --git a/arch/arm/cpu/armv8/start.S b/arch/arm/cpu/armv8/start.S
index b37dbabf4d42..cdc609e873fc 100644
--- a/arch/arm/cpu/armv8/start.S
+++ b/arch/arm/cpu/armv8/start.S
@@ -33,10 +33,11 @@ _start:

        .align 3

+#if !(defined(CONFIG_SPL_BUILD) || defined(CONFIG_TPL_BUILD))
 .globl _TEXT_BASE
 _TEXT_BASE:
        .quad   CONFIG_SYS_TEXT_BASE
-
+#endif
 /*
  * These are defined in the linker script.
  */
@@ -102,6 +103,7 @@ pie_skip_reloc:
        b.lo    pie_fix_loop
 pie_fixup_done:
 #else
+#if !(defined(CONFIG_SPL_BUILD) || defined(CONFIG_TPL_BUILD))
        adr     x0, _start
        ldr     x1, _TEXT_BASE
        cmp     x0, x1
@@ -115,6 +117,7 @@ pie_fixup_done:
        b       0b
 1:
 #endif
+#endif

 #ifdef CONFIG_SYS_RESET_SCTRL
        bl reset_sctrl


More information about the U-Boot mailing list