diff --git a/cpu/cortexm_common/Makefile.include b/cpu/cortexm_common/Makefile.include index 0cf0926b489d20c0f9692b9b3c8a4af4c043f913..b1be7aff71fbf04ed87ba44eb160a664b1c25e9a 100644 --- a/cpu/cortexm_common/Makefile.include +++ b/cpu/cortexm_common/Makefile.include @@ -21,3 +21,5 @@ endif # ROM_OFFSET: offset in rom to start linking, allows supporting a bootloader LINKFLAGS += $(if $(ROM_OFFSET),$(LINKFLAGPREFIX)--defsym=_rom_offset=$(ROM_OFFSET)) +# FW_ROM_LEN: rom length to use for firmware linking. Allows linking only in a section of the rom. +LINKFLAGS += $(if $(FW_ROM_LEN),$(LINKFLAGPREFIX)--defsym=_fw_rom_length=$(FW_ROM_LEN)) diff --git a/cpu/cortexm_common/ldscripts/cortexm.ld b/cpu/cortexm_common/ldscripts/cortexm.ld index eb849a9602443daaaab9da3d19a6d31e3a0060c1..1ce102459594efd13cc91edbac7b864329cbff01 100644 --- a/cpu/cortexm_common/ldscripts/cortexm.ld +++ b/cpu/cortexm_common/ldscripts/cortexm.ld @@ -21,7 +21,9 @@ */ _rom_offset = DEFINED( _rom_offset ) ? _rom_offset : 0x0; -_fw_rom_length = _rom_length - _rom_offset; +_fw_rom_length = DEFINED( _fw_rom_length ) ? _fw_rom_length : _rom_length - _rom_offset; + +ASSERT((_fw_rom_length <= _rom_length - _rom_offset), "Specified firmware size does not fit in ROM"); MEMORY {