From: Tom Rini Date: Thu, 15 Jan 2026 22:19:37 +0000 (-0600) Subject: powerpc: 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=87d3780ebc242e28a180606f72335ce37d8bcca1;p=thirdparty%2Fu-boot.git powerpc: 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 by 8-bytes by adding '. = ALIGN(8);' or changing an existing ALIGN(4) statement. - Ensure that we do have alignment by adding an ASSERT so that when not aligned we fail to link (and explain why). Signed-off-by: Tom Rini --- diff --git a/arch/powerpc/cpu/mpc83xx/u-boot.lds b/arch/powerpc/cpu/mpc83xx/u-boot.lds index 1a1e537b2a7..5becc4d236e 100644 --- a/arch/powerpc/cpu/mpc83xx/u-boot.lds +++ b/arch/powerpc/cpu/mpc83xx/u-boot.lds @@ -56,6 +56,7 @@ SECTIONS * _end - This is end of u-boot.bin image. * dtb will be appended here to make u-boot-dtb.bin */ + . = ALIGN(8); _end = .; . = ALIGN(4096); @@ -77,3 +78,5 @@ SECTIONS PROVIDE (end = .); } ENTRY(_start) + +ASSERT(_end % 8 == 0, "_end must be 8-byte aligned for device tree"); diff --git a/arch/powerpc/cpu/mpc85xx/u-boot.lds b/arch/powerpc/cpu/mpc85xx/u-boot.lds index 3af0dfdf336..3c9959bef09 100644 --- a/arch/powerpc/cpu/mpc85xx/u-boot.lds +++ b/arch/powerpc/cpu/mpc85xx/u-boot.lds @@ -78,7 +78,7 @@ SECTIONS __init_begin = .; .text.init : { *(.text.init) } .data.init : { *(.data.init) } - . = ALIGN(4); + . = ALIGN(8); __init_end = .; _end = .; @@ -119,3 +119,5 @@ SECTIONS __bss_end = . ; PROVIDE (end = .); } + +ASSERT(_end % 8 == 0, "_end must be 8-byte aligned for device tree"); diff --git a/board/cssi/cmpc885/u-boot.lds b/board/cssi/cmpc885/u-boot.lds index 167606357e0..da9cff64d46 100644 --- a/board/cssi/cmpc885/u-boot.lds +++ b/board/cssi/cmpc885/u-boot.lds @@ -72,6 +72,7 @@ SECTIONS * _end - This is end of u-boot.bin image. * dtb will be appended here to make u-boot-dtb.bin */ + . = ALIGN(8); _end = .; . = ALIGN(4096); @@ -93,3 +94,5 @@ SECTIONS PROVIDE (end = .); } ENTRY(_start) + +ASSERT(_end % 8 == 0, "_end must be 8-byte aligned for device tree"); diff --git a/board/cssi/mcr3000/u-boot.lds b/board/cssi/mcr3000/u-boot.lds index 66afdebc0f7..1fd98726b2a 100644 --- a/board/cssi/mcr3000/u-boot.lds +++ b/board/cssi/mcr3000/u-boot.lds @@ -72,6 +72,7 @@ SECTIONS * _end - This is end of u-boot.bin image. * dtb will be appended here to make u-boot-dtb.bin */ + . = ALIGN(8); _end = .; . = ALIGN(4096); @@ -93,3 +94,5 @@ SECTIONS PROVIDE (end = .); } ENTRY(_start) + +ASSERT(_end % 8 == 0, "_end must be 8-byte aligned for device tree");