From: Tom Rini Date: Thu, 15 Jan 2026 22:19:35 +0000 (-0600) Subject: mips: Update linker scripts to ensure appended device tree is aligned X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b220a43f5ae69f1b258976691fe70414c4fc2259;p=thirdparty%2Fu-boot.git mips: Update linker scripts to ensure appended device tree is aligned 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 Signed-off-by: Tom Rini --- diff --git a/arch/mips/cpu/u-boot-spl.lds b/arch/mips/cpu/u-boot-spl.lds index 310a5c5053b..ea2deed34f1 100644 --- a/arch/mips/cpu/u-boot-spl.lds +++ b/arch/mips/cpu/u-boot-spl.lds @@ -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"); diff --git a/arch/mips/cpu/u-boot.lds b/arch/mips/cpu/u-boot.lds index 133ea05df3d..d59a48b7ef8 100644 --- a/arch/mips/cpu/u-boot.lds +++ b/arch/mips/cpu/u-boot.lds @@ -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");