1 /* 2 ****************************************************************************** 3 ** 4 ** @file : LinkerScript.ld 5 ** 6 ** @author : Auto-generated by STM32CubeIDE 7 ** 8 ** Abstract : Linker script for NUCLEO-F103RB Board embedding STM32F103RBTx Device from stm32f1 series 9 ** 128KBytes FLASH 10 ** 20KBytes RAM 11 ** 12 ** Set heap size, stack size and stack location according 13 ** to application requirements. 14 ** 15 ** Set memory bank area and size if external memory is used 16 ** 17 ** Target : STMicroelectronics STM32 18 ** 19 ** Distribution: The file is distributed as is, without any warranty 20 ** of any kind. 21 ** 22 ****************************************************************************** 23 ** @attention 24 ** 25 ** Copyright (c) 2024 STMicroelectronics. 26 ** All rights reserved. 27 ** 28 ** This software is licensed under terms that can be found in the LICENSE file 29 ** in the root directory of this software component. 30 ** If no LICENSE file comes with this software, it is provided AS-IS. 31 ** 32 ****************************************************************************** 33 */ 34 35 /* Entry Point */ 36 ENTRY(Reset_Handler) 37 38 /* Highest address of the user mode stack */ 39 _estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */ 40 41 _Min_Heap_Size = 0x200; /* required amount of heap */ 42 _Min_Stack_Size = 0x400; /* required amount of stack */ 43 44 /* Memories definition */ 45 MEMORY 46 { 47 RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K 48 FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 128K 49 } 50 51 /* Sections */ 52 SECTIONS 53 { 54 /* The startup code into "FLASH" Rom type memory */ 55 .isr_vector : 56 { 57 . = ALIGN(4); 58 KEEP(*(.isr_vector)) /* Startup code */ 59 . = ALIGN(4); 60 } >FLASH 61 62 /* The program code and other data into "FLASH" Rom type memory */ 63 .text : 64 { 65 . = ALIGN(4); 66 *(.text) /* .text sections (code) */ 67 *(.text*) /* .text* sections (code) */ 68 *(.glue_7) /* glue arm to thumb code */ 69 *(.glue_7t) /* glue thumb to arm code */ 70 *(.eh_frame) 71 72 KEEP (*(.init)) 73 KEEP (*(.fini)) 74 75 . = ALIGN(4); 76 _etext = .; /* define a global symbols at end of code */ 77 } >FLASH 78 79 /* Constant data into "FLASH" Rom type memory */ 80 .rodata : 81 { 82 . = ALIGN(4); 83 *(.rodata) /* .rodata sections (constants, strings, etc.) */ 84 *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ 85 . = ALIGN(4); 86 } >FLASH 87 88 .ARM.extab (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ 89 { 90 . = ALIGN(4); 91 *(.ARM.extab* .gnu.linkonce.armextab.*) 92 . = ALIGN(4); 93 } >FLASH 94 95 .ARM (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ 96 { 97 . = ALIGN(4); 98 __exidx_start = .; 99 *(.ARM.exidx*) 100 __exidx_end = .; 101 . = ALIGN(4); 102 } >FLASH 103 104 .preinit_array (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ 105 { 106 . = ALIGN(4); 107 PROVIDE_HIDDEN (__preinit_array_start = .); 108 KEEP (*(.preinit_array*)) 109 PROVIDE_HIDDEN (__preinit_array_end = .); 110 . = ALIGN(4); 111 } >FLASH 112 113 .init_array (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ 114 { 115 . = ALIGN(4); 116 PROVIDE_HIDDEN (__init_array_start = .); 117 KEEP (*(SORT(.init_array.*))) 118 KEEP (*(.init_array*)) 119 PROVIDE_HIDDEN (__init_array_end = .); 120 . = ALIGN(4); 121 } >FLASH 122 123 .fini_array (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ 124 { 125 . = ALIGN(4); 126 PROVIDE_HIDDEN (__fini_array_start = .); 127 KEEP (*(SORT(.fini_array.*))) 128 KEEP (*(.fini_array*)) 129 PROVIDE_HIDDEN (__fini_array_end = .); 130 . = ALIGN(4); 131 } >FLASH 132 133 /* Used by the startup to initialize data */ 134 _sidata = LOADADDR(.data); 135 136 /* Initialized data sections into "RAM" Ram type memory */ 137 .data : 138 { 139 . = ALIGN(4); 140 _sdata = .; /* create a global symbol at data start */ 141 *(.data) /* .data sections */ 142 *(.data*) /* .data* sections */ 143 *(.RamFunc) /* .RamFunc sections */ 144 *(.RamFunc*) /* .RamFunc* sections */ 145 146 . = ALIGN(4); 147 _edata = .; /* define a global symbol at data end */ 148 149 } >RAM AT> FLASH 150 151 /* Uninitialized data section into "RAM" Ram type memory */ 152 . = ALIGN(4); 153 .bss : 154 { 155 /* This is used by the startup in order to initialize the .bss section */ 156 _sbss = .; /* define a global symbol at bss start */ 157 __bss_start__ = _sbss; 158 *(.bss) 159 *(.bss*) 160 *(COMMON) 161 162 . = ALIGN(4); 163 _ebss = .; /* define a global symbol at bss end */ 164 __bss_end__ = _ebss; 165 } >RAM 166 167 /* User_heap_stack section, used to check that there is enough "RAM" Ram type memory left */ 168 ._user_heap_stack : 169 { 170 . = ALIGN(8); 171 PROVIDE ( end = . ); 172 PROVIDE ( _end = . ); 173 . = . + _Min_Heap_Size; 174 . = . + _Min_Stack_Size; 175 . = ALIGN(8); 176 } >RAM 177 178 /* Remove information from the compiler libraries */ 179 /DISCARD/ : 180 { 181 libc.a ( * ) 182 libm.a ( * ) 183 libgcc.a ( * ) 184 } 185 186 .ARM.attributes 0 : { *(.ARM.attributes) } 187 }
