_start = ORIGIN(FLASH); ENTRY(_start) MEMORY { FLASH (xrx) :ORIGIN = 0x10000000, LENGTH = 256K RAM (xrw) :ORIGIN = 0x20000000, LENGTH = 256K STACK (rw) :ORIGIN = 0x20040000, LENGTH = 8K - 256 AUTO(xrx) :ORIGIN = 0x20041F00, LENGTH = 256 } _stack_top = ORIGIN(STACK) + LENGTH(STACK); PHDRS { boot2_pre PT_LOAD FLAGS(5); /* R + X */ text PT_LOAD FLAGS(5); /* R + X */ rodata PT_LOAD FLAGS(5); /* R + W */ data PT_LOAD FLAGS(6); /* R + W */ bss PT_LOAD FLAGS(6); /* R + W */ } SECTIONS { .boot2_pre : { KEEP(*(.text.boot2_pre)) _boot2_pre_size = . - ADDR(.boot2_pre); ASSERT(_boot2_pre_size <= 252, "Error: .boot2_pre size exceeds 252 bytes!"); . += 256 - _boot2_pre_size; } >AUTO AT > FLASH :boot2_pre .text : { . = ALIGN(4); *(.text*) . = ALIGN(4); } >RAM AT > FLASH :text .rodata : { . = ALIGN(4); *(.rodata*) . = ALIGN(4); } >RAM AT > FLASH :rodata .data : { . = ALIGN(4); *(.data*) . = ALIGN(4); } >RAM AT > FLASH :data .bss (NOLOAD) : { . = ALIGN(4); _bss_start = .; *(.bss*) . = ALIGN(4); _bss_end = .; } >RAM :bss }