summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArtur Rojek <contact@artur-rojek.eu>2025-02-16 18:55:44 +0100
committerJohn Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>2025-04-05 19:46:34 +0200
commit427011db477dfb8cca001e492c2b312fdf7c7173 (patch)
treea2eb8eb8650894380a1ce1c9f052c25614a93836
parent2014c95afecee3e76ca4a56956a936e23283f05b (diff)
downloadlinux-427011db477dfb8cca001e492c2b312fdf7c7173.tar.gz
linux-427011db477dfb8cca001e492c2b312fdf7c7173.tar.bz2
linux-427011db477dfb8cca001e492c2b312fdf7c7173.zip
sh: Align .bss section padding to 8-byte boundary
J2-based devices expect to find a device tree blob at the end of the .bss section. As of a77725a9a3c5 ("scripts/dtc: Update to upstream version v1.6.1-19-g0a3a9d3449c8"), libfdt enforces 8-byte alignment for the DTB, causing J2 devices to fail early in sh_fdt_init(). As the J2 loader firmware calculates the DTB location based on the kernel image .bss section size rather than the __bss_stop symbol offset, the required alignment can't be enforced with BSS_SECTION(0, PAGE_SIZE, 8). To fix this, inline a modified version of the above macro which grows .bss by the required size. While this change affects all existing SH boards, it should be benign on platforms which don't need this alignment. Signed-off-by: Artur Rojek <contact@artur-rojek.eu> Reviewed-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> Tested-by: Rob Landley <rob@landley.net> Signed-off-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
-rw-r--r--arch/sh/kernel/vmlinux.lds.S15
1 files changed, 14 insertions, 1 deletions
diff --git a/arch/sh/kernel/vmlinux.lds.S b/arch/sh/kernel/vmlinux.lds.S
index 9644fe187a3f..008c30289eaa 100644
--- a/arch/sh/kernel/vmlinux.lds.S
+++ b/arch/sh/kernel/vmlinux.lds.S
@@ -71,7 +71,20 @@ SECTIONS
. = ALIGN(PAGE_SIZE);
__init_end = .;
- BSS_SECTION(0, PAGE_SIZE, 4)
+ __bss_start = .;
+ SBSS(0)
+ . = ALIGN(PAGE_SIZE);
+ .bss : AT(ADDR(.bss) - LOAD_OFFSET) {
+ BSS_FIRST_SECTIONS
+ . = ALIGN(PAGE_SIZE);
+ *(.bss..page_aligned)
+ . = ALIGN(PAGE_SIZE);
+ *(.dynbss)
+ *(BSS_MAIN)
+ *(COMMON)
+ . = ALIGN(8);
+ }
+ __bss_stop = .;
_end = . ;
STABS_DEBUG