circuitpython/ports/stm32/mboot/stm32_sections.ld

79 lines
1.7 KiB
Plaintext

/*
Linker script fragment for mboot on an STM32xxx MCU.
This needs the following MEMORY sections to be defined: FLASH_BL, RAM.
*/
/* produce a link error if there is not this amount of RAM for these sections */
_minimum_stack_size = 8K;
/* Define tho top end of the stack. The stack is full descending so begins just
above last byte of RAM. Note that EABI requires the stack to be 8-byte
aligned for a call. */
_estack = ORIGIN(RAM) + LENGTH(RAM);
ENTRY(Reset_Handler)
SECTIONS
{
/* The startup code goes first into FLASH */
.isr_vector :
{
. = ALIGN(4);
KEEP(*(.isr_vector)) /* Startup code */
. = ALIGN(4);
} >FLASH_BL
/* The program code and other data goes into FLASH */
.text :
{
. = ALIGN(4);
*(.text*)
*(.rodata*)
. = ALIGN(4);
_etext = .;
} >FLASH_BL
/* used by the startup to initialize data */
_sidata = LOADADDR(.data);
/* Initialized data section */
.data :
{
. = ALIGN(4);
_sdata = .;
*(.data*)
. = ALIGN(4);
_edata = .;
} >RAM AT> FLASH_BL
/* Zeroed-out data section */
.bss :
{
. = ALIGN(4);
_sbss = .;
*(.bss*)
*(COMMON)
. = ALIGN(4);
_ebss = .;
} >RAM
/* Uninitialized data section */
.nozero_bss (NOLOAD) :
{
. = ALIGN(4);
*(.nozero_bss*)
. = ALIGN(4);
} >RAM
/* this just checks there is enough RAM for the stack */
.stack :
{
. = ALIGN(4);
. = . + _minimum_stack_size;
. = ALIGN(4);
} >RAM
.ARM.attributes 0 : { *(.ARM.attributes) }
}