diff --git a/boards/arm/qemu/qemu-armv7a/scripts/dramboot.ld b/boards/arm/qemu/qemu-armv7a/scripts/dramboot.ld index 19e481ecd6d..b0e9b276042 100644 --- a/boards/arm/qemu/qemu-armv7a/scripts/dramboot.ld +++ b/boards/arm/qemu/qemu-armv7a/scripts/dramboot.ld @@ -34,21 +34,6 @@ MEMORY SECTIONS { - /* where the global variable out-of-bounds detection information located */ - -#ifdef CONFIG_MM_KASAN_GLOBAL - .kasan.unused : { - *(.data..LASANLOC*) - } - .kasan.global : { - KEEP (*(.data..LASAN0)) - KEEP (*(.data.rel.local..LASAN0)) - } - .kasan.shadows : { - *(.kasan.shadows) - } -#endif - .text : { _stext = .; /* Text section */ __text_start = .; @@ -93,6 +78,19 @@ SECTIONS _erodata = .; } > ROM +#ifdef CONFIG_MM_KASAN_GLOBAL + .kasan.shadows : { + KEEP(*(.kasan.shadows)) + } > ROM + .kasan.unused : { + *(.data..LASANLOC*) + } > RAM + .kasan.global : { + KEEP (*(.data..LASAN0)) + KEEP (*(.data.rel.local..LASAN0)) + } > RAM +#endif + _eronly = LOADADDR(.data); .data : { /* Data */ _sdata = .; diff --git a/cmake/nuttx_multiple_link.cmake b/cmake/nuttx_multiple_link.cmake index fef695f52dc..141da198a72 100644 --- a/cmake/nuttx_multiple_link.cmake +++ b/cmake/nuttx_multiple_link.cmake @@ -134,6 +134,19 @@ define_multiple_link_target(final_nuttx second_link final) # fixing timing dependencies add_dependencies(nuttx_post final_nuttx) + +# Strip .kasan.unused and .kasan.global sections from the final binary. These +# sections are only needed during the intermediate link passes for +# kasan_global.py to extract global variable descriptors. At runtime they sit at +# the start of RAM (0x40000000) and conflict with QEMU's DTB placement. +if(CONFIG_MM_KASAN_GLOBAL) + add_custom_command( + TARGET final_nuttx + POST_BUILD + COMMAND ${CMAKE_OBJCOPY} -R .kasan.unused -R .kasan.global final_nuttx + COMMENT "Stripping .kasan.unused and .kasan.global sections") +endif() + # finally use final_nuttx to overwrite the already generated nuttx add_custom_command( TARGET final_nuttx