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