From fbdbaf3c9e555b4773ed29faa57af12c99c32ede Mon Sep 17 00:00:00 2001 From: Adrian <4030444+adrian-stepien@users.noreply.github.com> Date: Tue, 27 Oct 2026 17:05:54 +0000 Subject: [PATCH] Include COMMON globals in bootrom BSS initialization The bootrom linker script defines __bss_end__ before COMMON symbols are placed. Startup clears only up to that boundary. On PM5 with ARM GCC 8.5, this leaves the entire 92-byte USB CDC structure outside the zeroed area, even though bootrom sources themselves are built with -fno-common. Place COMMON inside .bss before setting __bss_end__, and assert that the boundary covers the whole section. The shared script applies to PM5 and RDV4. On the tested PM5 build, stack addresses, the shared communication area and the entry point remain unchanged. Built both targets with ARM GCC 8.5 and ran bootrom/check. Checked ELF boundaries and the 16 KiB boot partition; removing COMMON placement triggers the new assertion. No compiler warnings; the existing PM5 RWX LOAD-segment linker warning remains. CMake and BWM builds were not tested. Flashed the bootrom alone on PM5 and verified readback against the image. All internal flash bytes from the OS start onward matched the pre-flash backup. Cold startup and five software reset cycles passed. Five complete bootloader/read/reset cycles also passed after fixing the client's dump cleanup separately. FPGA was not written. This corrects initialization; it does not establish a fix for the USB-controller failures in #3642. --- bootrom/ldscript-flash-common | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bootrom/ldscript-flash-common b/bootrom/ldscript-flash-common index 50578a204..23ad383a9 100644 --- a/bootrom/ldscript-flash-common +++ b/bootrom/ldscript-flash-common @@ -63,11 +63,14 @@ SECTIONS __bss_start__ = .; *(.bss) *(.bss.*) + *(COMMON) . = ALIGN(4); __bss_end__ = .; } >ram AT>ram :bss + ASSERT(__bss_end__ == ADDR(.bss) + SIZEOF(.bss), "BSS boundary excludes globals") + .commonarea (NOLOAD) : { *(.commonarea) } >commonarea -} \ No newline at end of file +}