stm32_linker.cmake 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. # TODO: Add support for external RAM
  2. IF(STM32_FAMILY STREQUAL "F4")
  3. SET(STM32_CCRAM_DEF " CCMRAM (rw) : ORIGIN = ${STM32_CCRAM_ORIGIN}, LENGTH = ${STM32_CCRAM_SIZE}\n")
  4. SET(STM32_CCRAM_SECTION
  5. " _siccmram = LOADADDR(.ccmram)\;\n"
  6. " .ccmram :\n"
  7. " {"
  8. " . = ALIGN(4)\;\n"
  9. " _sccmram = .\;\n"
  10. " *(.ccmram)\n"
  11. " *(.ccmram*)\n"
  12. " . = ALIGN(4)\;\n"
  13. " _eccmram = .\;\n"
  14. " } >CCMRAM AT> FLASH\n"
  15. )
  16. ELSE()
  17. SET(STM32_CCRAM_DEF "")
  18. SET(STM32_CCRAM_SECTION "")
  19. ENDIF()
  20. SET(STM32_LINKER_SCRIPT_TEXT
  21. "ENTRY(Reset_Handler)\n"
  22. "_estack = ${STM32_RAM_ORIGIN} + ${STM32_RAM_SIZE} - 1\;\n"
  23. "_Min_Heap_Size = ${STM32_MIN_HEAP_SIZE}\;\n"
  24. "_Min_Stack_Size = ${STM32_MIN_STACK_SIZE}\;\n"
  25. "MEMORY\n"
  26. "{\n"
  27. " FLASH (rx) : ORIGIN = ${STM32_FLASH_ORIGIN}, LENGTH = ${STM32_FLASH_SIZE}\n"
  28. " RAM (xrw) : ORIGIN = ${STM32_RAM_ORIGIN}, LENGTH = ${STM32_RAM_SIZE}\n"
  29. "${STM32_CCRAM_DEF}"
  30. "}\n"
  31. "SECTIONS\n"
  32. "{\n"
  33. " .isr_vector :\n"
  34. " {\n"
  35. " . = ALIGN(4)\;\n"
  36. " KEEP(*(.isr_vector))\n"
  37. " . = ALIGN(4)\;\n"
  38. " } >FLASH\n"
  39. " .text :\n"
  40. " {\n"
  41. " . = ALIGN(4)\;\n"
  42. " *(.text)\n"
  43. " *(.text*)\n"
  44. " *(.glue_7)\n"
  45. " *(.glue_7t)\n"
  46. " *(.eh_frame)\n"
  47. " KEEP (*(.init))\n"
  48. " KEEP (*(.fini))\n"
  49. " . = ALIGN(4)\;\n"
  50. " _etext = .\;\n"
  51. " } >FLASH\n"
  52. " .rodata :\n"
  53. " {\n"
  54. " . = ALIGN(4)\;\n"
  55. " *(.rodata)\n"
  56. " *(.rodata*)\n"
  57. " . = ALIGN(4)\;\n"
  58. " } >FLASH\n"
  59. " .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH\n"
  60. " .ARM : {\n"
  61. " __exidx_start = .\;\n"
  62. " *(.ARM.exidx*)\n"
  63. " __exidx_end = .\;\n"
  64. " } >FLASH\n"
  65. " .preinit_array :\n"
  66. " {\n"
  67. " PROVIDE_HIDDEN (__preinit_array_start = .)\;\n"
  68. " KEEP (*(.preinit_array*))\n"
  69. " PROVIDE_HIDDEN (__preinit_array_end = .)\;\n"
  70. " } >FLASH\n"
  71. " .init_array :\n"
  72. " {\n"
  73. " PROVIDE_HIDDEN (__init_array_start = .)\;\n"
  74. " KEEP (*(SORT(.init_array.*)))\n"
  75. " KEEP (*(.init_array*))\n"
  76. " PROVIDE_HIDDEN (__init_array_end = .)\;\n"
  77. " } >FLASH\n"
  78. " .fini_array :\n"
  79. " {\n"
  80. " PROVIDE_HIDDEN (__fini_array_start = .)\;\n"
  81. " KEEP (*(SORT(.fini_array.*)))\n"
  82. " KEEP (*(.fini_array*))\n"
  83. " PROVIDE_HIDDEN (__fini_array_end = .)\;\n"
  84. " } >FLASH\n"
  85. " _sidata = LOADADDR(.data)\;\n"
  86. " .data : \n"
  87. " {\n"
  88. " . = ALIGN(4)\;\n"
  89. " _sdata = .\;\n"
  90. " *(.data)\n"
  91. " *(.data*)\n"
  92. " . = ALIGN(4)\;\n"
  93. " _edata = .\;\n"
  94. " } >RAM AT> FLASH\n"
  95. "${STM32_CCRAM_SECTION}"
  96. " . = ALIGN(4)\;\n"
  97. " .bss :\n"
  98. " {\n"
  99. " _sbss = .\;\n"
  100. " __bss_start__ = _sbss\;\n"
  101. " *(.bss)\n"
  102. " *(.bss*)\n"
  103. " *(COMMON)\n"
  104. " . = ALIGN(4)\;\n"
  105. " _ebss = .\;\n"
  106. " __bss_end__ = _ebss\;\n"
  107. " } >RAM\n"
  108. " ._user_heap_stack :\n"
  109. " {\n"
  110. " . = ALIGN(4)\;\n"
  111. " PROVIDE ( end = . )\;\n"
  112. " PROVIDE ( _end = . )\;\n"
  113. " . = . + _Min_Heap_Size\;\n"
  114. " . = . + _Min_Stack_Size\;\n"
  115. " . = ALIGN(4)\;\n"
  116. " } >RAM\n"
  117. " /DISCARD/ :\n"
  118. " {\n"
  119. " libc.a ( * )\n"
  120. " libm.a ( * )\n"
  121. " libgcc.a ( * )\n"
  122. " }\n"
  123. " .ARM.attributes 0 : { *(.ARM.attributes) }\n"
  124. "}\n"
  125. )