avoid copy by using iovecs
[protos/xbee-avr.git] / avr6.x
1 /* Default linker script, for normal executables */
2 OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr")
3 OUTPUT_ARCH(avr:6)
4 MEMORY
5 {
6   text      (rx)   : ORIGIN = 0, LENGTH = 1024K
7   data      (rw!x) : ORIGIN = 0x800200, LENGTH = 0xfe00
8   eeprom    (rw!x) : ORIGIN = 0x810000, LENGTH = 64K
9   fuse      (rw!x) : ORIGIN = 0x820000, LENGTH = 1K
10   lock      (rw!x) : ORIGIN = 0x830000, LENGTH = 1K
11   signature (rw!x) : ORIGIN = 0x840000, LENGTH = 1K
12 }
13 SECTIONS
14 {
15   /* Read-only sections, merged into text segment: */
16   .hash          : { *(.hash)           }
17   .dynsym        : { *(.dynsym)         }
18   .dynstr        : { *(.dynstr)         }
19   .gnu.version   : { *(.gnu.version)    }
20   .gnu.version_d   : { *(.gnu.version_d)        }
21   .gnu.version_r   : { *(.gnu.version_r)        }
22   .rel.init      : { *(.rel.init)               }
23   .rela.init     : { *(.rela.init)      }
24   .rel.text      :
25     {
26       *(.rel.text)
27       *(.rel.text.*)
28       *(.rel.gnu.linkonce.t*)
29     }
30   .rela.text     :
31     {
32       *(.rela.text)
33       *(.rela.text.*)
34       *(.rela.gnu.linkonce.t*)
35     }
36   .rel.fini      : { *(.rel.fini)               }
37   .rela.fini     : { *(.rela.fini)      }
38   .rel.rodata    :
39     {
40       *(.rel.rodata)
41       *(.rel.rodata.*)
42       *(.rel.gnu.linkonce.r*)
43     }
44   .rela.rodata   :
45     {
46       *(.rela.rodata)
47       *(.rela.rodata.*)
48       *(.rela.gnu.linkonce.r*)
49     }
50   .rel.data      :
51     {
52       *(.rel.data)
53       *(.rel.data.*)
54       *(.rel.gnu.linkonce.d*)
55     }
56   .rela.data     :
57     {
58       *(.rela.data)
59       *(.rela.data.*)
60       *(.rela.gnu.linkonce.d*)
61     }
62   .rel.ctors     : { *(.rel.ctors)      }
63   .rela.ctors    : { *(.rela.ctors)     }
64   .rel.dtors     : { *(.rel.dtors)      }
65   .rela.dtors    : { *(.rela.dtors)     }
66   .rel.got       : { *(.rel.got)                }
67   .rela.got      : { *(.rela.got)               }
68   .rel.bss       : { *(.rel.bss)                }
69   .rela.bss      : { *(.rela.bss)               }
70   .rel.plt       : { *(.rel.plt)                }
71   .rela.plt      : { *(.rela.plt)               }
72   /* Internal text space or external memory.  */
73   .text :
74   {
75     *(.vectors)
76     KEEP(*(.vectors))
77     . = 256 + ALIGN(256); /* placeholder for misc microb infos */
78     /* For data that needs to reside in the lower 64k of progmem.  */
79     *(.progmem.gcc*)
80     *(.progmem*)
81     . = ALIGN(2048);
82      __trampolines_start = . ;
83     /* The jump trampolines for the 16-bit limited relocs will reside here.  */
84     *(.trampolines)
85     *(.trampolines*)
86      __trampolines_end = . ;
87     /* For future tablejump instruction arrays for 3 byte pc devices.
88        We don't relax jump/call instructions within these sections.  */
89     *(.jumptables)
90     *(.jumptables*)
91     /* For code that needs to reside in the lower 128k progmem.  */
92     *(.lowtext)
93     *(.lowtext*)
94      __ctors_start = . ;
95      *(.ctors)
96      __ctors_end = . ;
97      __dtors_start = . ;
98      *(.dtors)
99      __dtors_end = . ;
100     KEEP(SORT(*)(.ctors))
101     KEEP(SORT(*)(.dtors))
102     /* From this point on, we don't bother about wether the insns are
103        below or above the 16 bits boundary.  */
104     *(.init0)  /* Start here after reset.  */
105     KEEP (*(.init0))
106     *(.init1)
107     KEEP (*(.init1))
108     *(.init2)  /* Clear __zero_reg__, set up stack pointer.  */
109     KEEP (*(.init2))
110     *(.init3)
111     KEEP (*(.init3))
112     *(.init4)  /* Initialize data and BSS.  */
113     KEEP (*(.init4))
114     *(.init5)
115     KEEP (*(.init5))
116     *(.init6)  /* C++ constructors.  */
117     KEEP (*(.init6))
118     *(.init7)
119     KEEP (*(.init7))
120     *(.init8)
121     KEEP (*(.init8))
122     *(.init9)  /* Call main().  */
123     KEEP (*(.init9))
124     *(.text.*) /* trucs de gcc ? */
125     . = ALIGN(2048);
126     /* some libc stuff */
127     strc*(.text)
128     mem*(.text)
129     printf*(.text)
130     vfprintf*(.text)
131     sprintf*(.text)
132     snprintf*(.text)
133     malloc*(.text)
134     free*(.text)
135     fdevopen*(.text)
136     fputc*(.text)
137     . = ALIGN(2048);
138     uart*(.text)
139     parse*(.text)
140     rdline*(.text)
141     vt100*(.text)
142     scheduler*(.text)
143     i2c*(.text)
144     spi*(.text)
145     xbee*(.text)
146     commands*(.text)
147     . = ALIGN(2048);
148     *(.text)
149     . = ALIGN(2);
150     *(.fini9)  /* _exit() starts here.  */
151     KEEP (*(.fini9))
152     *(.fini8)
153     KEEP (*(.fini8))
154     *(.fini7)
155     KEEP (*(.fini7))
156     *(.fini6)  /* C++ destructors.  */
157     KEEP (*(.fini6))
158     *(.fini5)
159     KEEP (*(.fini5))
160     *(.fini4)
161     KEEP (*(.fini4))
162     *(.fini3)
163     KEEP (*(.fini3))
164     *(.fini2)
165     KEEP (*(.fini2))
166     *(.fini1)
167     KEEP (*(.fini1))
168     *(.fini0)  /* Infinite loop after program termination.  */
169     KEEP (*(.fini0))
170      _etext = . ;
171   }  > text
172   .data   : AT (ADDR (.text) + SIZEOF (.text))
173   {
174      PROVIDE (__data_start = .) ;
175     *(.data)
176     *(.data*)
177     *(.rodata)  /* We need to include .rodata here if gcc is used */
178     *(.rodata*) /* with -fdata-sections.  */
179     *(.gnu.linkonce.d*)
180     . = ALIGN(2);
181      _edata = . ;
182      PROVIDE (__data_end = .) ;
183   }  > data
184   .bss  SIZEOF(.data) + ADDR(.data) :
185   {
186      PROVIDE (__bss_start = .) ;
187     *(.bss)
188     *(.bss*)
189     *(COMMON)
190      PROVIDE (__bss_end = .) ;
191   }  > data
192    __data_load_start = LOADADDR(.data);
193    __data_load_end = __data_load_start + SIZEOF(.data);
194   /* Global data not cleared after reset.  */
195   .noinit  SIZEOF(.bss) + ADDR(.bss) :
196   {
197      PROVIDE (__noinit_start = .) ;
198     *(.noinit*)
199      PROVIDE (__noinit_end = .) ;
200      _end = . ;
201      PROVIDE (__heap_start = .) ;
202   }  > data
203   .eeprom  :
204   {
205     *(.eeprom*)
206      __eeprom_end = . ;
207   }  > eeprom
208   .fuse  :
209   {
210     KEEP(*(.fuse))
211     KEEP(*(.lfuse))
212     KEEP(*(.hfuse))
213     KEEP(*(.efuse))
214   }  > fuse
215   .lock  :
216   {
217     KEEP(*(.lock*))
218   }  > lock
219   .signature  :
220   {
221     KEEP(*(.signature*))
222   }  > signature
223   /* Stabs debugging sections.  */
224   .stab 0 : { *(.stab) }
225   .stabstr 0 : { *(.stabstr) }
226   .stab.excl 0 : { *(.stab.excl) }
227   .stab.exclstr 0 : { *(.stab.exclstr) }
228   .stab.index 0 : { *(.stab.index) }
229   .stab.indexstr 0 : { *(.stab.indexstr) }
230   .comment 0 : { *(.comment) }
231   /* DWARF debug sections.
232      Symbols in the DWARF debugging sections are relative to the beginning
233      of the section so we begin them at 0.  */
234   /* DWARF 1 */
235   .debug          0 : { *(.debug) }
236   .line           0 : { *(.line) }
237   /* GNU DWARF 1 extensions */
238   .debug_srcinfo  0 : { *(.debug_srcinfo) }
239   .debug_sfnames  0 : { *(.debug_sfnames) }
240   /* DWARF 1.1 and DWARF 2 */
241   .debug_aranges  0 : { *(.debug_aranges) }
242   .debug_pubnames 0 : { *(.debug_pubnames) }
243   /* DWARF 2 */
244   .debug_info     0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
245   .debug_abbrev   0 : { *(.debug_abbrev) }
246   .debug_line     0 : { *(.debug_line) }
247   .debug_frame    0 : { *(.debug_frame) }
248   .debug_str      0 : { *(.debug_str) }
249   .debug_loc      0 : { *(.debug_loc) }
250   .debug_macinfo  0 : { *(.debug_macinfo) }
251 }