From 18798eb2cc8ad0e2ebd139a8b72b37db537f0f16 Mon Sep 17 00:00:00 2001 From: Kirill Kotyagin Date: Sat, 31 Jan 2026 02:54:06 +0300 Subject: [PATCH 1/2] FIX: LOAD segment with RWX permissions warning --- cmake/stm32/linker_ld.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/stm32/linker_ld.cmake b/cmake/stm32/linker_ld.cmake index 6b15cbb3..0cd77c3d 100644 --- a/cmake/stm32/linker_ld.cmake +++ b/cmake/stm32/linker_ld.cmake @@ -84,20 +84,20 @@ SECTIONS\n\ __exidx_end = .;\n\ } >FLASH\n\ \n\ - .preinit_array :\n\ + .preinit_array (READONLY) :\n\ {\n\ PROVIDE_HIDDEN (__preinit_array_start = .);\n\ KEEP (*(.preinit_array*))\n\ PROVIDE_HIDDEN (__preinit_array_end = .);\n\ } >FLASH\n\ - .init_array :\n\ + .init_array (READONLY) :\n\ {\n\ PROVIDE_HIDDEN (__init_array_start = .);\n\ KEEP (*(SORT(.init_array.*)))\n\ KEEP (*(.init_array*))\n\ PROVIDE_HIDDEN (__init_array_end = .);\n\ } >FLASH\n\ - .fini_array :\n\ + .fini_array (READONLY):\n\ {\n\ PROVIDE_HIDDEN (__fini_array_start = .);\n\ KEEP (*(SORT(.fini_array.*)))\n\ From 38b9ba604d0832b241a0595271aafd898717043a Mon Sep 17 00:00:00 2001 From: Kirill Kotyagin Date: Sat, 31 Jan 2026 03:39:06 +0300 Subject: [PATCH 2/2] FIX: GCC10 and below does not support the (READONLY) attribute --- cmake/FindCMSIS.cmake | 5 +++++ cmake/stm32/linker_ld.cmake | 10 +++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/cmake/FindCMSIS.cmake b/cmake/FindCMSIS.cmake index d6a1a7c2..483f919b 100644 --- a/cmake/FindCMSIS.cmake +++ b/cmake/FindCMSIS.cmake @@ -88,6 +88,10 @@ function(cmsis_generate_default_linker_script FAMILY DEVICE CORE) stm32_get_memory_info(FAMILY ${FAMILY} DEVICE ${DEVICE} CORE ${CORE} HEAP SIZE HEAP_SIZE) stm32_get_memory_info(FAMILY ${FAMILY} DEVICE ${DEVICE} CORE ${CORE} STACK SIZE STACK_SIZE) + if (${CMAKE_C_COMPILER_ID} STREQUAL "GNU" AND ${CMAKE_C_COMPILER_VERSION} VERSION_GREATER_EQUAL "11.0.0") + set(LD_SCRIPT_FORCE_READONLY_SECTIONS TRUE) + endif() + add_custom_command(OUTPUT "${OUTPUT_LD_FILE}" COMMAND ${CMAKE_COMMAND} -DFLASH_ORIGIN="${FLASH_ORIGIN}" @@ -101,6 +105,7 @@ function(cmsis_generate_default_linker_script FAMILY DEVICE CORE) -DSTACK_SIZE="${STACK_SIZE}" -DHEAP_SIZE="${HEAP_SIZE}" -DLINKER_SCRIPT="${OUTPUT_LD_FILE}" + -DFORCE_READONLY_SECTIONS="${LD_SCRIPT_FORCE_READONLY_SECTIONS}" -P "${STM32_CMAKE_DIR}/stm32/linker_ld.cmake" ) endif() diff --git a/cmake/stm32/linker_ld.cmake b/cmake/stm32/linker_ld.cmake index 0cd77c3d..bb7cafdb 100644 --- a/cmake/stm32/linker_ld.cmake +++ b/cmake/stm32/linker_ld.cmake @@ -29,6 +29,10 @@ MB_MEM2 (NOLOAD) : { _sMB_MEM2 = . ; *(MB_MEM2) ; _eMB_MEM2 = . ; } >RAM_S ") endif() +if(FORCE_READONLY_SECTIONS) + set(READONLY "(READONLY)") +endif() + set(SCRIPT_TEXT "ENTRY(Reset_Handler)\n\ \n\ @@ -84,20 +88,20 @@ SECTIONS\n\ __exidx_end = .;\n\ } >FLASH\n\ \n\ - .preinit_array (READONLY) :\n\ + .preinit_array ${READONLY} :\n\ {\n\ PROVIDE_HIDDEN (__preinit_array_start = .);\n\ KEEP (*(.preinit_array*))\n\ PROVIDE_HIDDEN (__preinit_array_end = .);\n\ } >FLASH\n\ - .init_array (READONLY) :\n\ + .init_array ${READONLY} :\n\ {\n\ PROVIDE_HIDDEN (__init_array_start = .);\n\ KEEP (*(SORT(.init_array.*)))\n\ KEEP (*(.init_array*))\n\ PROVIDE_HIDDEN (__init_array_end = .);\n\ } >FLASH\n\ - .fini_array (READONLY):\n\ + .fini_array ${READONLY}:\n\ {\n\ PROVIDE_HIDDEN (__fini_array_start = .);\n\ KEEP (*(SORT(.fini_array.*)))\n\