fsp_xspi0_boot.ld 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435
  1. /*
  2. Linker File for Renesas RZ/T2 FSP
  3. */
  4. INCLUDE memory_regions.ld
  5. /* The memory information for each device is done in memory regions file.
  6. * The starting address and length of memory not defined in memory regions file are defined as 0. */
  7. ATCM_PRV_START = DEFINED(ATCM_START) ? ATCM_START : 0;
  8. ATCM_PRV_LENGTH = DEFINED(ATCM_LENGTH) ? ATCM_LENGTH : 0;
  9. BTCM_PRV_START = DEFINED(BTCM_START) ? BTCM_START : 0;
  10. BTCM_PRV_LENGTH = DEFINED(BTCM_LENGTH) ? BTCM_LENGTH : 0;
  11. SYSTEM_RAM_PRV_START = DEFINED(SYSTEM_RAM_START) ? SYSTEM_RAM_START : 0;
  12. SYSTEM_RAM_PRV_LENGTH = DEFINED(SYSTEM_RAM_LENGTH) ? SYSTEM_RAM_LENGTH : 0;
  13. SYSTEM_RAM_MIRROR_PRV_START = DEFINED(SYSTEM_RAM_MIRROR_START) ? SYSTEM_RAM_MIRROR_START : 0;
  14. SYSTEM_RAM_MIRROR_PRV_LENGTH = DEFINED(SYSTEM_RAM_MIRROR_LENGTH) ? SYSTEM_RAM_MIRROR_LENGTH : 0;
  15. xSPI0_CS0_SPACE_MIRROR_PRV_START = DEFINED(xSPI0_CS0_SPACE_MIRROR_START) ? xSPI0_CS0_SPACE_MIRROR_START : 0;
  16. xSPI0_CS0_SPACE_MIRROR_PRV_LENGTH = DEFINED(xSPI0_CS0_SPACE_MIRROR_LENGTH) ? xSPI0_CS0_SPACE_MIRROR_LENGTH : 0;
  17. xSPI0_CS1_SPACE_MIRROR_PRV_START = DEFINED(xSPI0_CS1_SPACE_MIRROR_START) ? xSPI0_CS1_SPACE_MIRROR_START : 0;
  18. xSPI0_CS1_SPACE_MIRROR_PRV_LENGTH = DEFINED(xSPI0_CS1_SPACE_MIRROR_LENGTH) ? xSPI0_CS1_SPACE_MIRROR_LENGTH : 0;
  19. xSPI1_CS0_SPACE_MIRROR_PRV_START = DEFINED(xSPI1_CS0_SPACE_MIRROR_START) ? xSPI1_CS0_SPACE_MIRROR_START : 0;
  20. xSPI1_CS0_SPACE_MIRROR_PRV_LENGTH = DEFINED(xSPI1_CS0_SPACE_MIRROR_LENGTH) ? xSPI1_CS0_SPACE_MIRROR_LENGTH : 0;
  21. xSPI1_CS1_SPACE_MIRROR_PRV_START = DEFINED(xSPI1_CS1_SPACE_MIRROR_START) ? xSPI1_CS1_SPACE_MIRROR_START : 0;
  22. xSPI1_CS1_SPACE_MIRROR_PRV_LENGTH = DEFINED(xSPI1_CS1_SPACE_MIRROR_LENGTH) ? xSPI1_CS1_SPACE_MIRROR_LENGTH : 0;
  23. CS0_SPACE_MIRROR_PRV_START = DEFINED(CS0_SPACE_MIRROR_START) ? CS0_SPACE_MIRROR_START : 0;
  24. CS0_SPACE_MIRROR_PRV_LENGTH = DEFINED(CS0_SPACE_MIRROR_LENGTH) ? CS0_SPACE_MIRROR_LENGTH : 0;
  25. CS2_SPACE_MIRROR_PRV_START = DEFINED(CS2_SPACE_MIRROR_START) ? CS2_SPACE_MIRROR_START : 0;
  26. CS2_SPACE_MIRROR_PRV_LENGTH = DEFINED(CS2_SPACE_MIRROR_LENGTH) ? CS2_SPACE_MIRROR_LENGTH : 0;
  27. CS3_SPACE_MIRROR_PRV_START = DEFINED(CS3_SPACE_MIRROR_START) ? CS3_SPACE_MIRROR_START : 0;
  28. CS3_SPACE_MIRROR_PRV_LENGTH = DEFINED(CS3_SPACE_MIRROR_LENGTH) ? CS3_SPACE_MIRROR_LENGTH : 0;
  29. CS5_SPACE_MIRROR_PRV_START = DEFINED(CS5_SPACE_MIRROR_START) ? CS5_SPACE_MIRROR_START : 0;
  30. CS5_SPACE_MIRROR_PRV_LENGTH = DEFINED(CS5_SPACE_MIRROR_LENGTH) ? CS5_SPACE_MIRROR_LENGTH : 0;
  31. xSPI0_CS0_SPACE_PRV_START = DEFINED(xSPI0_CS0_SPACE_START) ? xSPI0_CS0_SPACE_START : 0;
  32. xSPI0_CS0_SPACE_PRV_LENGTH = DEFINED(xSPI0_CS0_SPACE_LENGTH) ? xSPI0_CS0_SPACE_LENGTH : 0;
  33. xSPI0_CS1_SPACE_PRV_START = DEFINED(xSPI0_CS1_SPACE_START) ? xSPI0_CS1_SPACE_START : 0;
  34. xSPI0_CS1_SPACE_PRV_LENGTH = DEFINED(xSPI0_CS1_SPACE_LENGTH) ? xSPI0_CS1_SPACE_LENGTH : 0;
  35. xSPI1_CS0_SPACE_PRV_START = DEFINED(xSPI1_CS0_SPACE_START) ? xSPI1_CS0_SPACE_START : 0;
  36. xSPI1_CS0_SPACE_PRV_LENGTH = DEFINED(xSPI1_CS0_SPACE_LENGTH) ? xSPI1_CS0_SPACE_LENGTH : 0;
  37. xSPI1_CS1_SPACE_PRV_START = DEFINED(xSPI1_CS1_SPACE_START) ? xSPI1_CS1_SPACE_START : 0;
  38. xSPI1_CS1_SPACE_PRV_LENGTH = DEFINED(xSPI1_CS1_SPACE_LENGTH) ? xSPI1_CS1_SPACE_LENGTH : 0;
  39. CS0_SPACE_PRV_START = DEFINED(CS0_SPACE_START) ? CS0_SPACE_START : 0;
  40. CS0_SPACE_PRV_LENGTH = DEFINED(CS0_SPACE_LENGTH) ? CS0_SPACE_LENGTH : 0;
  41. CS2_SPACE_PRV_START = DEFINED(CS2_SPACE_START) ? CS2_SPACE_START : 0;
  42. CS2_SPACE_PRV_LENGTH = DEFINED(CS2_SPACE_LENGTH) ? CS2_SPACE_LENGTH : 0;
  43. CS3_SPACE_PRV_START = DEFINED(CS3_SPACE_START) ? CS3_SPACE_START : 0;
  44. CS3_SPACE_PRV_LENGTH = DEFINED(CS3_SPACE_LENGTH) ? CS3_SPACE_LENGTH : 0;
  45. CS5_SPACE_PRV_START = DEFINED(CS5_SPACE_START) ? CS5_SPACE_START : 0;
  46. CS5_SPACE_PRV_LENGTH = DEFINED(CS5_SPACE_LENGTH) ? CS5_SPACE_LENGTH : 0;
  47. LOADER_PARAM_ADDRESS = ALIGN(xSPI0_CS0_SPACE_PRV_START, 0x00020000);
  48. FLASH_CONTENTS_ADDRESS = LOADER_PARAM_ADDRESS + 0x0000004C;
  49. LOADER_TEXT_ADDRESS = DEFINED(CR52_0) ? 0x00102000 : 0x10010000;
  50. INTVEC_ADDRESS = DEFINED(CR52_0) ? 0x00000000 : 0x10000000;
  51. TEXT_ADDRESS = DEFINED(CR52_0) ? 0x00000100 : 0x10020000;
  52. NONCACHE_BUFFER_OFFSET = DEFINED(CR52_0) ? 0x00040000 : 0x00020000;
  53. DMAC_LINK_MODE_OFFSET = DEFINED(CR52_0) ? 0x00068000 : 0x00064000;
  54. DATA_NONCACHE_OFFSET = DEFINED(CR52_0) ? 0x00070000 : 0x0006C000;
  55. RAM_START = DEFINED(CR52_0) ? ATCM_PRV_START : SYSTEM_RAM_PRV_START;
  56. RAM_LENGTH = DEFINED(CR52_0) ? ATCM_PRV_LENGTH : SYSTEM_RAM_PRV_LENGTH;
  57. LOADER_START = DEFINED(CR52_0) ? BTCM_PRV_START : SYSTEM_RAM_PRV_START;
  58. LOADER_LENGTH = DEFINED(CR52_0) ? BTCM_PRV_LENGTH : SYSTEM_RAM_PRV_LENGTH;
  59. /* Define starting addresses and length for data_noncache, DMAC link mode data, CPU-shared non-cache, and CPU-specific non-cache areas. */
  60. DATA_NONCACHE_START = DEFINED(SYSTEM_RAM_MIRROR_START) ? SYSTEM_RAM_MIRROR_START + SYSTEM_RAM_MIRROR_LENGTH - DATA_NONCACHE_OFFSET : 0;
  61. DATA_NONCACHE_LENGTH = DEFINED(SYSTEM_RAM_MIRROR_LENGTH) ? 0x00004000 : 0;
  62. DMAC_LINK_MODE_START = DEFINED(SYSTEM_RAM_MIRROR_START) ? SYSTEM_RAM_MIRROR_START + SYSTEM_RAM_MIRROR_LENGTH - DMAC_LINK_MODE_OFFSET : 0;
  63. DMAC_LINK_MODE_LENGTH = DEFINED(SYSTEM_RAM_MIRROR_LENGTH) ? 0x00004000 : 0;
  64. SHARED_NONCACHE_BUFFER_START = DEFINED(SYSTEM_RAM_MIRROR_START) ? SYSTEM_RAM_MIRROR_START + SYSTEM_RAM_MIRROR_LENGTH - 0x00060000 : 0;
  65. SHARED_NONCACHE_BUFFER_LENGTH = DEFINED(SYSTEM_RAM_MIRROR_LENGTH) ? 0x00020000 : 0;
  66. NONCACHE_BUFFER_START = DEFINED(SYSTEM_RAM_MIRROR_START) ? SYSTEM_RAM_MIRROR_START + SYSTEM_RAM_MIRROR_LENGTH - NONCACHE_BUFFER_OFFSET : 0;
  67. NONCACHE_BUFFER_LENGTH = DEFINED(SYSTEM_RAM_MIRROR_LENGTH) ? 0x00020000 : 0;
  68. MEMORY
  69. {
  70. ATCM : ORIGIN = ATCM_PRV_START, LENGTH = ATCM_PRV_LENGTH
  71. BTCM : ORIGIN = BTCM_PRV_START, LENGTH = BTCM_PRV_LENGTH
  72. SYSTEM_RAM : ORIGIN = SYSTEM_RAM_PRV_START, LENGTH = SYSTEM_RAM_PRV_LENGTH
  73. SYSTEM_RAM_MIRROR : ORIGIN = SYSTEM_RAM_MIRROR_PRV_START, LENGTH = SYSTEM_RAM_MIRROR_PRV_LENGTH
  74. xSPI0_CS0_SPACE_MIRROR : ORIGIN = xSPI0_CS0_SPACE_MIRROR_PRV_START, LENGTH = xSPI0_CS0_SPACE_MIRROR_PRV_LENGTH
  75. xSPI0_CS1_SPACE_MIRROR : ORIGIN = xSPI0_CS1_SPACE_MIRROR_PRV_START, LENGTH = xSPI0_CS1_SPACE_MIRROR_PRV_LENGTH
  76. xSPI1_CS0_SPACE_MIRROR : ORIGIN = xSPI1_CS0_SPACE_MIRROR_PRV_START, LENGTH = xSPI1_CS0_SPACE_MIRROR_PRV_LENGTH
  77. xSPI1_CS1_SPACE_MIRROR : ORIGIN = xSPI1_CS1_SPACE_MIRROR_PRV_START, LENGTH = xSPI1_CS1_SPACE_MIRROR_PRV_LENGTH
  78. CS0_SPACE_MIRROR : ORIGIN = CS0_SPACE_MIRROR_PRV_START, LENGTH = CS0_SPACE_MIRROR_PRV_LENGTH
  79. CS2_SPACE_MIRROR : ORIGIN = CS2_SPACE_MIRROR_PRV_START, LENGTH = CS2_SPACE_MIRROR_PRV_LENGTH
  80. CS3_SPACE_MIRROR : ORIGIN = CS3_SPACE_MIRROR_PRV_START, LENGTH = CS3_SPACE_MIRROR_PRV_LENGTH
  81. CS5_SPACE_MIRROR : ORIGIN = CS5_SPACE_MIRROR_PRV_START, LENGTH = CS5_SPACE_MIRROR_PRV_LENGTH
  82. xSPI0_CS0_SPACE : ORIGIN = xSPI0_CS0_SPACE_PRV_START, LENGTH = xSPI0_CS0_SPACE_PRV_LENGTH
  83. xSPI0_CS1_SPACE : ORIGIN = xSPI0_CS1_SPACE_PRV_START, LENGTH = xSPI0_CS1_SPACE_PRV_LENGTH
  84. xSPI1_CS0_SPACE : ORIGIN = xSPI1_CS0_SPACE_PRV_START, LENGTH = xSPI1_CS0_SPACE_PRV_LENGTH
  85. xSPI1_CS1_SPACE : ORIGIN = xSPI1_CS1_SPACE_PRV_START, LENGTH = xSPI1_CS1_SPACE_PRV_LENGTH
  86. CS0_SPACE : ORIGIN = CS0_SPACE_PRV_START, LENGTH = CS0_SPACE_PRV_LENGTH
  87. CS2_SPACE : ORIGIN = CS2_SPACE_PRV_START, LENGTH = CS2_SPACE_PRV_LENGTH
  88. CS3_SPACE : ORIGIN = CS3_SPACE_PRV_START, LENGTH = CS3_SPACE_PRV_LENGTH
  89. CS5_SPACE : ORIGIN = CS5_SPACE_PRV_START, LENGTH = CS5_SPACE_PRV_LENGTH
  90. RAM : ORIGIN = RAM_START, LENGTH = RAM_LENGTH
  91. LOADER_STACK : ORIGIN = LOADER_START, LENGTH = LOADER_LENGTH
  92. DUMMY : ORIGIN = RAM_START, LENGTH = RAM_LENGTH
  93. DATA_NONCACHE : ORIGIN = DATA_NONCACHE_START, LENGTH = DATA_NONCACHE_LENGTH
  94. DMAC_LINK_MODE : ORIGIN = DMAC_LINK_MODE_START, LENGTH = DMAC_LINK_MODE_LENGTH
  95. SHARED_NONCACHE_BUFFER : ORIGIN = SHARED_NONCACHE_BUFFER_START, LENGTH = SHARED_NONCACHE_BUFFER_LENGTH
  96. NONCACHE_BUFFER : ORIGIN = NONCACHE_BUFFER_START, LENGTH = NONCACHE_BUFFER_LENGTH
  97. }
  98. SECTIONS
  99. {
  100. .loader_param LOADER_PARAM_ADDRESS : AT (LOADER_PARAM_ADDRESS)
  101. {
  102. KEEP(*(.loader_param))
  103. } > xSPI0_CS0_SPACE
  104. .flash_contents FLASH_CONTENTS_ADDRESS : AT (FLASH_CONTENTS_ADDRESS)
  105. {
  106. _mloader_text = .;
  107. . = . + (_loader_text_end - _loader_text_start);
  108. _mloader_data = .;
  109. . = . + (_loader_data_end - _loader_data_start);
  110. _mfvector = .;
  111. . = . + (_fvector_end - _fvector_start);
  112. _mtext = .;
  113. . = . + (_text_end - _text_start);
  114. _mdummy = .;
  115. . = . + (_dummy_end - _dummy_start);
  116. _mdata = .;
  117. . = . + (_data_end - _data_start);
  118. _mdata_noncache = .;
  119. . = . + (_data_noncache_end - _data_noncache_start);
  120. flash_contents_end = .;
  121. } > xSPI0_CS0_SPACE
  122. .image_info :
  123. {
  124. _image_info_start = .;
  125. KEEP(*(.image_info))
  126. _image_info_end = .;
  127. } > xSPI0_CS0_SPACE
  128. SECONDARY_START = ALIGN(_image_info_end, 0x20000);
  129. .secondary SECONDARY_START : AT (SECONDARY_START)
  130. {
  131. _secondary_start = .;
  132. KEEP(*(.secondary))
  133. _secondary_end = .;
  134. } > xSPI0_CS0_SPACE
  135. .loader_text LOADER_TEXT_ADDRESS : AT (_mloader_text)
  136. {
  137. _loader_text_start = .;
  138. *(.loader_text)
  139. */fsp/src/bsp/cmsis/Device/RENESAS/Source/*.o(.text*)
  140. */fsp/src/bsp/mcu/all/*/bsp_irq_core.o(.text*)
  141. */fsp/src/bsp/mcu/all/bsp_clocks.o(.text*)
  142. */fsp/src/bsp/mcu/all/bsp_irq.o(.text*)
  143. */fsp/src/bsp/mcu/all/bsp_semaphore.o(.text*)
  144. */fsp/src/bsp/mcu/all/bsp_register_protection.o(.text*)
  145. */fsp/src/bsp/mcu/all/bsp_cache.o(.text*)
  146. */fsp/src/r_ioport/r_ioport.o(.text*)
  147. KEEP(*(.warm_start))
  148. . = . + (512 - ((. - _loader_text_start) % 512));
  149. _loader_text_end = .;
  150. } > LOADER_STACK
  151. .loader_data : AT (_mloader_data)
  152. {
  153. _loader_data_start = .;
  154. __loader_data_start = .;
  155. */fsp/src/bsp/cmsis/Device/RENESAS/Source/*.o(.data*)
  156. */fsp/src/bsp/cmsis/Device/RENESAS/Source/*/system_core.o(.rodata*)
  157. */fsp/src/bsp/mcu/all/*/bsp_irq_core.o(.data*)
  158. */fsp/src/bsp/mcu/all/bsp_clocks.o(.data*)
  159. */fsp/src/bsp/mcu/all/bsp_irq.o(.data*)
  160. */fsp/src/bsp/mcu/all/bsp_semaphore.o(.data*)
  161. */fsp/src/bsp/mcu/all/bsp_register_protection.o(.data*)
  162. */fsp/src/bsp/mcu/all/bsp_cache.o(.data*)
  163. */fsp/src/r_ioport/r_ioport.o(.data*)
  164. . = ALIGN(4);
  165. __loader_data_end = .;
  166. __loader_bss_start = .;
  167. */fsp/src/bsp/cmsis/Device/RENESAS/Source/*.o(.bss*)
  168. */fsp/src/bsp/mcu/all/*/bsp_irq_core.o(.bss*)
  169. */fsp/src/bsp/mcu/all/bsp_clocks.o(.bss*)
  170. */fsp/src/bsp/mcu/all/bsp_irq.o(.bss*)
  171. */fsp/src/bsp/mcu/all/bsp_semaphore.o(.bss*)
  172. */fsp/src/bsp/mcu/all/bsp_register_protection.o(.bss*)
  173. */fsp/src/bsp/mcu/all/bsp_cache.o(.bss*)
  174. */fsp/src/r_ioport/r_ioport.o(.bss*)
  175. */fsp/src/bsp/cmsis/Device/RENESAS/Source/*.o(COMMON)
  176. */fsp/src/bsp/mcu/all/*/bsp_irq_core.o(COMMON)
  177. */fsp/src/bsp/mcu/all/bsp_clocks.o(COMMON)
  178. */fsp/src/bsp/mcu/all/bsp_irq.o(COMMON)
  179. */fsp/src/bsp/mcu/all/bsp_semaphore.o(COMMON)
  180. */fsp/src/bsp/mcu/all/bsp_register_protection.o(.COMMON)
  181. */fsp/src/bsp/mcu/all/bsp_cache.o(COMMON)
  182. */fsp/src/r_ioport/r_ioport.o(.COMMON)
  183. . = ALIGN(4);
  184. __loader_bss_end = . ;
  185. _loader_data_end = .;
  186. } > LOADER_STACK
  187. .intvec INTVEC_ADDRESS : AT (_mfvector)
  188. {
  189. _fvector_start = .;
  190. KEEP(*(.intvec))
  191. _fvector_end = .;
  192. } > RAM
  193. .text TEXT_ADDRESS : AT (_mtext)
  194. {
  195. _text_start = .;
  196. *(.text*)
  197. KEEP(*(.reset_handler))
  198. KEEP(*(.init))
  199. KEEP(*(.fini))
  200. /* .ctors */
  201. *crtbegin.o(.ctors)
  202. *crtbegin?.o(.ctors)
  203. *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
  204. *(SORT(.ctors.*))
  205. *(.ctors)
  206. _ctor_end = .;
  207. /* .dtors */
  208. *crtbegin.o(.dtors)
  209. *crtbegin?.o(.dtors)
  210. *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
  211. *(SORT(.dtors.*))
  212. *(.dtors)
  213. _dtor_end = .;
  214. /* section information for utest */
  215. . = ALIGN(4);
  216. __rt_utest_tc_tab_start = .;
  217. KEEP(*(UtestTcTab))
  218. __rt_utest_tc_tab_end = .;
  219. /* section information for finsh shell */
  220. . = ALIGN(4);
  221. __fsymtab_start = .;
  222. KEEP(*(FSymTab))
  223. __fsymtab_end = .;
  224. . = ALIGN(4);
  225. __vsymtab_start = .;
  226. KEEP(*(VSymTab))
  227. __vsymtab_end = .;
  228. /* section information for initial. */
  229. . = ALIGN(4);
  230. __rt_init_start = .;
  231. KEEP(*(SORT(.rti_fn*)))
  232. __rt_init_end = .;
  233. /* new GCC version uses .init_array */
  234. PROVIDE(__ctors_start__ = .);
  235. KEEP (*(SORT(.init_array.*)))
  236. KEEP (*(.init_array))
  237. PROVIDE(__ctors_end__ = .);
  238. . = ALIGN(4);
  239. KEEP(*(FalPartTable))
  240. KEEP(*(.eh_frame*))
  241. } > RAM
  242. .rvectors :
  243. {
  244. _rvectors_start = .;
  245. KEEP(*(.rvectors))
  246. _rvectors_end = .;
  247. } > RAM
  248. .ARM.extab :
  249. {
  250. *(.ARM.extab* .gnu.linkonce.armextab.*)
  251. } > RAM
  252. __exidx_start = .;
  253. .ARM.exidx :
  254. {
  255. *(.ARM.exidx* .gnu.linkonce.armexidx.*)
  256. } > RAM
  257. __exidx_end = .;
  258. .got :
  259. {
  260. *(.got)
  261. *(.got.plt)
  262. . = ALIGN(4);
  263. _text_end = .;
  264. } > RAM
  265. .dummy _fvector_end : AT (_mdummy)
  266. {
  267. _dummy_start = .;
  268. KEEP(*(.dummy));
  269. _dummy_end = .;
  270. } > DUMMY
  271. .data : AT (_mdata)
  272. {
  273. _data_start = .;
  274. *(vtable)
  275. *(.data.*)
  276. *(.data)
  277. *(.rodata*)
  278. _erodata = .;
  279. . = ALIGN(4);
  280. /* preinit data */
  281. PROVIDE_HIDDEN (__preinit_array_start = .);
  282. KEEP(*(.preinit_array))
  283. PROVIDE_HIDDEN (__preinit_array_end = .);
  284. . = ALIGN(4);
  285. /* init data */
  286. PROVIDE_HIDDEN (__init_array_start = .);
  287. KEEP(*(SORT(.init_array.*)))
  288. KEEP(*(.init_array))
  289. PROVIDE_HIDDEN (__init_array_end = .);
  290. . = ALIGN(4);
  291. /* finit data */
  292. PROVIDE_HIDDEN (__fini_array_start = .);
  293. KEEP(*(SORT(.fini_array.*)))
  294. KEEP(*(.fini_array))
  295. PROVIDE_HIDDEN (__fini_array_end = .);
  296. KEEP(*(.jcr*))
  297. . = ALIGN(4);
  298. /* All data end */
  299. _data_end = .;
  300. } > RAM
  301. .bss :
  302. {
  303. . = ALIGN(4);
  304. __bss_start__ = .;
  305. _bss = .;
  306. *(.bss*)
  307. *(COMMON)
  308. . = ALIGN(4);
  309. __bss_end__ = .;
  310. _ebss = .;
  311. _end = .;
  312. } > RAM
  313. .heap (NOLOAD) :
  314. {
  315. . = ALIGN(8);
  316. __HeapBase = .;
  317. /* Place the STD heap here. */
  318. KEEP(*(.heap))
  319. __HeapLimit = .;
  320. } > RAM
  321. .thread_stack (NOLOAD):
  322. {
  323. . = ALIGN(8);
  324. __ThreadStackBase = .;
  325. /* Place the Thread stacks here. */
  326. KEEP(*(.stack*))
  327. __ThreadStackLimit = .;
  328. } > RAM
  329. .sys_stack (NOLOAD) :
  330. {
  331. . = ALIGN(8);
  332. __SysStackBase = .;
  333. /* Place the sys_stack here. */
  334. KEEP(*(.sys_stack))
  335. __SysStackLimit = .;
  336. } > LOADER_STACK
  337. .svc_stack (NOLOAD) :
  338. {
  339. . = ALIGN(8);
  340. __SvcStackBase = .;
  341. /* Place the svc_stack here. */
  342. KEEP(*(.svc_stack))
  343. __SvcStackLimit = .;
  344. } > LOADER_STACK
  345. .irq_stack (NOLOAD) :
  346. {
  347. . = ALIGN(8);
  348. __IrqStackBase = .;
  349. /* Place the irq_stack here. */
  350. KEEP(*(.irq_stack))
  351. __IrqStackLimit = .;
  352. } > LOADER_STACK
  353. .fiq_stack (NOLOAD) :
  354. {
  355. . = ALIGN(8);
  356. __FiqStackBase = .;
  357. /* Place the fiq_stack here. */
  358. KEEP(*(.fiq_stack))
  359. __FiqStackLimit = .;
  360. } > LOADER_STACK
  361. .und_stack (NOLOAD) :
  362. {
  363. . = ALIGN(8);
  364. __UndStackBase = .;
  365. /* Place the und_stack here. */
  366. KEEP(*(.und_stack))
  367. __UndStackLimit = .;
  368. } > LOADER_STACK
  369. .abt_stack (NOLOAD) :
  370. {
  371. . = ALIGN(8);
  372. __AbtStackBase = .;
  373. /* Place the abt_stack here. */
  374. KEEP(*(.abt_stack))
  375. __AbtStackLimit = .;
  376. } > LOADER_STACK
  377. .data_noncache DATA_NONCACHE_START : AT (_mdata_noncache)
  378. {
  379. . = ALIGN(4);
  380. _data_noncache_start = .;
  381. KEEP(*(.data_noncache*))
  382. _data_noncache_end = .;
  383. } > DATA_NONCACHE
  384. .dmac_link_mode DMAC_LINK_MODE_START : AT (DMAC_LINK_MODE_START)
  385. {
  386. . = ALIGN(4);
  387. _DmacLinkMode_start = .;
  388. KEEP(*(.dmac_link_mode*))
  389. _DmacLinkMode_end = .;
  390. } > DMAC_LINK_MODE
  391. .shared_noncache_buffer SHARED_NONCACHE_BUFFER_START (NOLOAD) : AT (SHARED_NONCACHE_BUFFER_START)
  392. {
  393. . = ALIGN(32);
  394. _sncbuffer_start = .;
  395. KEEP(*(.shared_noncache_buffer*))
  396. _sncbuffer_end = .;
  397. } > SHARED_NONCACHE_BUFFER
  398. .noncache_buffer NONCACHE_BUFFER_START (NOLOAD) : AT (NONCACHE_BUFFER_START)
  399. {
  400. . = ALIGN(32);
  401. _ncbuffer_start = .;
  402. KEEP(*(.noncache_buffer*))
  403. _ncbuffer_end = .;
  404. } > NONCACHE_BUFFER
  405. }
  406. __ddsc_xSPI0_CS0_SPACE_START = LOADER_PARAM_ADDRESS;
  407. __ddsc_xSPI0_CS0_SPACE_END = _image_info_end;
  408. __ddsc_xSPI0_CS0_SPACE_ALIGNMENT = ALIGN(_image_info_end, 0x20000);