avr5.x 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. /* Default linker script, for normal executables */
  2. OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr")
  3. OUTPUT_ARCH(avr:5)
  4. MEMORY
  5. {
  6. text (rx) : ORIGIN = 0, LENGTH = 128K
  7. data (rw!x) : ORIGIN = 0x800060, LENGTH = 0xffa0
  8. eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 64K
  9. }
  10. SECTIONS
  11. {
  12. /* Read-only sections, merged into text segment: */
  13. .hash : { *(.hash) }
  14. .dynsym : { *(.dynsym) }
  15. .dynstr : { *(.dynstr) }
  16. .gnu.version : { *(.gnu.version) }
  17. .gnu.version_d : { *(.gnu.version_d) }
  18. .gnu.version_r : { *(.gnu.version_r) }
  19. .rel.init : { *(.rel.init) }
  20. .rela.init : { *(.rela.init) }
  21. .rel.text :
  22. {
  23. *(.rel.text)
  24. *(.rel.text.*)
  25. *(.rel.gnu.linkonce.t*)
  26. }
  27. .rela.text :
  28. {
  29. *(.rela.text)
  30. *(.rela.text.*)
  31. *(.rela.gnu.linkonce.t*)
  32. }
  33. .rel.fini : { *(.rel.fini) }
  34. .rela.fini : { *(.rela.fini) }
  35. .rel.rodata :
  36. {
  37. *(.rel.rodata)
  38. *(.rel.rodata.*)
  39. *(.rel.gnu.linkonce.r*)
  40. }
  41. .rela.rodata :
  42. {
  43. *(.rela.rodata)
  44. *(.rela.rodata.*)
  45. *(.rela.gnu.linkonce.r*)
  46. }
  47. .rel.data :
  48. {
  49. *(.rel.data)
  50. *(.rel.data.*)
  51. *(.rel.gnu.linkonce.d*)
  52. }
  53. .rela.data :
  54. {
  55. *(.rela.data)
  56. *(.rela.data.*)
  57. *(.rela.gnu.linkonce.d*)
  58. }
  59. .rel.ctors : { *(.rel.ctors) }
  60. .rela.ctors : { *(.rela.ctors) }
  61. .rel.dtors : { *(.rel.dtors) }
  62. .rela.dtors : { *(.rela.dtors) }
  63. .rel.got : { *(.rel.got) }
  64. .rela.got : { *(.rela.got) }
  65. .rel.bss : { *(.rel.bss) }
  66. .rela.bss : { *(.rela.bss) }
  67. .rel.plt : { *(.rel.plt) }
  68. .rela.plt : { *(.rela.plt) }
  69. /DISCARD/ : { *(.vectors) }
  70. /DISCARD/ : { *(.fini9)
  71. *(.fini6)
  72. *(.fini0)
  73. }
  74. /* Internal text space or external memory */
  75. .text :
  76. {
  77. *(.vectors.bootloader)
  78. __ctors_start = . ;
  79. *(.ctors)
  80. __ctors_end = . ;
  81. __dtors_start = . ;
  82. *(.dtors)
  83. __dtors_end = . ;
  84. *(.progmem.gcc*)
  85. *(.progmem*)
  86. . = ALIGN(2);
  87. *(.init0) /* Start here after reset. */
  88. *(.init1)
  89. *(.init2) /* Clear __zero_reg__, set up stack pointer. */
  90. *(.init3)
  91. *(.init4) /* Initialize data and BSS. */
  92. *(.init5)
  93. *(.init6) /* C++ constructors. */
  94. *(.init7)
  95. *(.init8)
  96. *(.init9) /* Call main(). */
  97. *(.text)
  98. . = ALIGN(2);
  99. *(.text.*)
  100. . = ALIGN(2);
  101. *(.fini9) /* _exit() starts here. */
  102. *(.fini8)
  103. *(.fini7)
  104. *(.fini6) /* C++ destructors. */
  105. *(.fini5)
  106. *(.fini4)
  107. *(.fini3)
  108. *(.fini2)
  109. *(.fini1)
  110. *(.fini0) /* Infinite loop after program termination. */
  111. _etext = . ;
  112. } > text
  113. .data : AT (ADDR (.text) + SIZEOF (.text))
  114. {
  115. PROVIDE (__data_start = .) ;
  116. *(.data)
  117. *(.gnu.linkonce.d*)
  118. . = ALIGN(2);
  119. _edata = . ;
  120. PROVIDE (__data_end = .) ;
  121. } > data
  122. .bss SIZEOF(.data) + ADDR(.data) :
  123. {
  124. PROVIDE (__bss_start = .) ;
  125. *(.bss)
  126. *(COMMON)
  127. PROVIDE (__bss_end = .) ;
  128. } > data
  129. __data_load_start = LOADADDR(.data);
  130. __data_load_end = __data_load_start + SIZEOF(.data);
  131. /* Global data not cleared after reset. */
  132. .noinit SIZEOF(.bss) + ADDR(.bss) :
  133. {
  134. PROVIDE (__noinit_start = .) ;
  135. *(.noinit*)
  136. PROVIDE (__noinit_end = .) ;
  137. _end = . ;
  138. PROVIDE (__heap_start = .) ;
  139. } > data
  140. .eeprom :
  141. {
  142. *(.eeprom*)
  143. __eeprom_end = . ;
  144. } > eeprom
  145. /* Stabs debugging sections. */
  146. .stab 0 : { *(.stab) }
  147. .stabstr 0 : { *(.stabstr) }
  148. .stab.excl 0 : { *(.stab.excl) }
  149. .stab.exclstr 0 : { *(.stab.exclstr) }
  150. .stab.index 0 : { *(.stab.index) }
  151. .stab.indexstr 0 : { *(.stab.indexstr) }
  152. .comment 0 : { *(.comment) }
  153. /* DWARF debug sections.
  154. Symbols in the DWARF debugging sections are relative to the beginning
  155. of the section so we begin them at 0. */
  156. /* DWARF 1 */
  157. .debug 0 : { *(.debug) }
  158. .line 0 : { *(.line) }
  159. /* GNU DWARF 1 extensions */
  160. .debug_srcinfo 0 : { *(.debug_srcinfo) }
  161. .debug_sfnames 0 : { *(.debug_sfnames) }
  162. /* DWARF 1.1 and DWARF 2 */
  163. .debug_aranges 0 : { *(.debug_aranges) }
  164. .debug_pubnames 0 : { *(.debug_pubnames) }
  165. /* DWARF 2 */
  166. .debug_info 0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
  167. .debug_abbrev 0 : { *(.debug_abbrev) }
  168. .debug_line 0 : { *(.debug_line) }
  169. .debug_frame 0 : { *(.debug_frame) }
  170. .debug_str 0 : { *(.debug_str) }
  171. .debug_loc 0 : { *(.debug_loc) }
  172. .debug_macinfo 0 : { *(.debug_macinfo) }
  173. }