]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
mips: Update linker scripts to ensure appended device tree is aligned
authorTom Rini <trini@konsulko.com>
Thu, 15 Jan 2026 22:19:35 +0000 (16:19 -0600)
committerTom Rini <trini@konsulko.com>
Tue, 20 Jan 2026 18:07:16 +0000 (12:07 -0600)
With commit 0535e46d55d7 ("scripts/dtc: Update to upstream version
v1.7.2-35-g52f07dcca47c") it is now a fatal error to U-Boot if our
device tree is not 8-byte aligned. In commit 85f586035d75 ("ARM: OMAP2+:
Pad SPL binary to 8-byte alignment before DTB") Beleswar Padhi explains
that we must have ALIGN(x) statements inside of a section to ensure that
padding is included and not simply that the linker address counter is
incremented. To that end, this patch:
- Aligns the final section before _end (for U-Boot) or _image_binary_end
  (for xPL phases) by 8-bytes by adding '. = ALIGN(8);' to the final
  section before the symbol. For SPL we need this in two places to cover
  all build configurations.
- Remove now-spurious  '. = ALIGN(x);' statements that were intended to
  provide the above alignments.
- Ensure that we do have alignment by adding an ASSERT so that when not
  aligned we fail to link (and explain why).

Reviewed-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
Signed-off-by: Tom Rini <trini@konsulko.com>
arch/mips/cpu/u-boot-spl.lds
arch/mips/cpu/u-boot.lds

index 310a5c5053b1f00da5d11a822d450cead94f9c8c..ea2deed34f15ecb3923c55171fe6d478d140789b 100644 (file)
@@ -27,16 +27,17 @@ SECTIONS
        .data : {
                *(SORT_BY_ALIGNMENT(.data*))
                *(SORT_BY_ALIGNMENT(.sdata*))
+               . = ALIGN(8);
        } > .spl_mem
 
 #if defined(CONFIG_SPL_DM) || defined(CONFIG_SPL_LOADER_SUPPORT)
        . = ALIGN(4);
        __u_boot_list : {
                KEEP(*(SORT(__u_boot_list*)));
+               . = ALIGN(8);
        } > .spl_mem
 #endif
 
-       . = ALIGN(4);
        __image_copy_end = .;
        __image_copy_len = __image_copy_end - __text_start;
 
@@ -123,3 +124,6 @@ SECTIONS
                *(.eh_frame)
        }
 }
+
+ASSERT(_image_binary_end % 8 == 0, \
+       "_image_binary_end must be 8-byte aligned for device tree");
index 133ea05df3dab59a0f838f29cb4fbbacedd37881..d59a48b7ef8576e69298084a2285d974e398c357 100644 (file)
@@ -54,9 +54,9 @@ SECTIONS
                LONG(0xFFFFFFFF);
                FILL(0);
                . += CONFIG_MIPS_RELOCATION_TABLE_SIZE - 4;
+               . = ALIGN(8);
        }
 
-       . = ALIGN(8);
        _end = .;
 
        .bss __rel_start (OVERLAY) : {
@@ -140,3 +140,5 @@ SECTIONS
                *(.eh_frame)
        }
 }
+
+ASSERT(_end % 8 == 0, "_end must be 8-byte aligned for device tree");