lnk.ld 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. #include "mem_ARMCA32.h"
  2. MEMORY
  3. {
  4. ROM (rx) : ORIGIN = __ROM_BASE, LENGTH = __ROM_SIZE
  5. RAM (rwx) : ORIGIN = __RAM_BASE, LENGTH = __RAM_SIZE
  6. L_TTB (rw) : ORIGIN = __TTB_BASE, LENGTH = __TTB_SIZE
  7. }
  8. ENTRY(Reset_Handler)
  9. SECTIONS
  10. {
  11. .text :
  12. {
  13. Image$$VECTORS$$Base = .;
  14. * (RESET)
  15. KEEP(*(.isr_vector))
  16. Image$$VECTORS$$Limit = .;
  17. *(SVC_TABLE)
  18. *(.text*)
  19. KEEP(*(.init))
  20. KEEP(*(.fini))
  21. /* .ctors */
  22. *crtbegin.o(.ctors)
  23. *crtbegin?.o(.ctors)
  24. *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
  25. *(SORT(.ctors.*))
  26. *(.ctors)
  27. /* .dtors */
  28. *crtbegin.o(.dtors)
  29. *crtbegin?.o(.dtors)
  30. *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
  31. *(SORT(.dtors.*))
  32. *(.dtors)
  33. Image$$RO_DATA$$Base = .;
  34. *(.rodata*)
  35. Image$$RO_DATA$$Limit = .;
  36. KEEP(*(.eh_frame*))
  37. } > ROM
  38. .ARM.extab :
  39. {
  40. *(.ARM.extab* .gnu.linkonce.armextab.*)
  41. } > ROM
  42. __exidx_start = .;
  43. .ARM.exidx :
  44. {
  45. *(.ARM.exidx* .gnu.linkonce.armexidx.*)
  46. } > ROM
  47. __exidx_end = .;
  48. .copy.table :
  49. {
  50. . = ALIGN(4);
  51. __copy_table_start__ = .;
  52. LONG (__etext)
  53. LONG (__data_start__)
  54. LONG (__data_end__ - __data_start__)
  55. __copy_table_end__ = .;
  56. } > ROM
  57. .zero.table :
  58. {
  59. . = ALIGN(4);
  60. __zero_table_start__ = .;
  61. LONG (__bss_start__)
  62. LONG (__bss_end__ - __bss_start__)
  63. __zero_table_end__ = .;
  64. } > ROM
  65. .data :
  66. {
  67. Image$$RW_DATA$$Base = .;
  68. __data_start__ = .;
  69. *(vtable)
  70. *(.data*)
  71. Image$$RW_DATA$$Limit = .;
  72. . = ALIGN(4);
  73. /* preinit data */
  74. PROVIDE (__preinit_array_start = .);
  75. KEEP(*(.preinit_array))
  76. PROVIDE (__preinit_array_end = .);
  77. . = ALIGN(4);
  78. /* init data */
  79. PROVIDE (__init_array_start = .);
  80. KEEP(*(SORT(.init_array.*)))
  81. KEEP(*(.init_array))
  82. PROVIDE (__init_array_end = .);
  83. . = ALIGN(4);
  84. /* finit data */
  85. PROVIDE (__fini_array_start = .);
  86. KEEP(*(SORT(.fini_array.*)))
  87. KEEP(*(.fini_array))
  88. PROVIDE (__fini_array_end = .);
  89. . = ALIGN(4);
  90. /* All data end */
  91. __data_end__ = .;
  92. } > ROM AT > RAM
  93. __etext = ADDR(.data);
  94. .bss :
  95. {
  96. . = ALIGN(0x400);
  97. Image$$ZI_DATA$$Base = .;
  98. __bss_start__ = .;
  99. *(.bss)
  100. *(.bss.*)
  101. *(COMMON)
  102. __bss_end__ = .;
  103. Image$$ZI_DATA$$Limit = .;
  104. __end__ = .;
  105. end = __end__;
  106. } > RAM AT > RAM
  107. #if defined(__HEAP_SIZE) && (__HEAP_SIZE > 0)
  108. .heap (NOLOAD):
  109. {
  110. . = ALIGN(8);
  111. __heap_base = .;
  112. Image$$HEAP$$ZI$$Base = .;
  113. . += __HEAP_SIZE;
  114. Image$$HEAP$$ZI$$Limit = .;
  115. __HeapLimit = .;
  116. } > RAM
  117. #endif
  118. .stack (NOLOAD):
  119. {
  120. . = ORIGIN(RAM) + LENGTH(RAM) - __STACK_SIZE - __FIQ_STACK_SIZE - __IRQ_STACK_SIZE - __SVC_STACK_SIZE - __ABT_STACK_SIZE - __UND_STACK_SIZE;
  121. . = ALIGN(8);
  122. __StackTop = .;
  123. Image$$SYS_STACK$$ZI$$Base = .;
  124. . += __STACK_SIZE;
  125. Image$$SYS_STACK$$ZI$$Limit = .;
  126. __stack = .;
  127. Image$$FIQ_STACK$$ZI$$Base = .;
  128. . += __FIQ_STACK_SIZE;
  129. Image$$FIQ_STACK$$ZI$$Limit = .;
  130. Image$$IRQ_STACK$$ZI$$Base = .;
  131. . += __IRQ_STACK_SIZE;
  132. Image$$IRQ_STACK$$ZI$$Limit = .;
  133. Image$$SVC_STACK$$ZI$$Base = .;
  134. . += __SVC_STACK_SIZE;
  135. Image$$SVC_STACK$$ZI$$Limit = .;
  136. Image$$ABT_STACK$$ZI$$Base = .;
  137. . += __ABT_STACK_SIZE;
  138. Image$$ABT_STACK$$ZI$$Limit = .;
  139. Image$$UND_STACK$$ZI$$Base = .;
  140. . += __UND_STACK_SIZE;
  141. Image$$UND_STACK$$ZI$$Limit = .;
  142. } > RAM
  143. .ttb :
  144. {
  145. Image$$TTB$$ZI$$Base = .;
  146. . += __TTB_SIZE;
  147. Image$$TTB$$ZI$$Limit = .;
  148. } > L_TTB
  149. }