beos.em qsort predicate tidy
[external/binutils.git] / ld / scripttempl / elf32msp430.sc
1 # Copyright (C) 2014-2019 Free Software Foundation, Inc.
2 #
3 # Copying and distribution of this file, with or without modification,
4 # are permitted in any medium without royalty provided the copyright
5 # notice and this notice are preserved.
6
7 HEAP_SECTION_MSP430=" "
8 HEAP_MEMORY_MSP430=" "
9
10 if test ${GOT_HEAP_MSP-0} -ne 0
11 then
12 HEAP_SECTION_MSP430=".heap ${RELOCATING-0} :
13   {
14     ${RELOCATING+ PROVIDE (__heap_data_start = .) ; }
15     *(.heap*)
16     ${RELOCATING+ PROVIDE (_heap_data_end = .) ; }
17     ${RELOCATING+. = ALIGN(2);}
18     ${RELOCATING+ PROVIDE (__heap_bottom = .) ; }
19     ${RELOCATING+ PROVIDE (__heap_top = ${HEAP_START} + ${HEAP_LENGTH}) ; }
20   } ${RELOCATING+ > heap}"
21 HEAP_MEMORY_MSP430="heap(rwx)           : ORIGIN = $HEAP_START, LENGTH = $HEAP_LENGTH"
22 fi
23
24
25 cat <<EOF
26 /* Copyright (C) 2014-2019 Free Software Foundation, Inc.
27
28    Copying and distribution of this script, with or without modification,
29    are permitted in any medium without royalty provided the copyright
30    notice and this notice are preserved.  */
31
32 OUTPUT_FORMAT("${OUTPUT_FORMAT}","${OUTPUT_FORMAT}","${OUTPUT_FORMAT}")
33 OUTPUT_ARCH(${ARCH})
34
35 EOF
36
37 test -n "${RELOCATING}" && cat <<EOF
38 MEMORY
39 {
40   text   (rx)           : ORIGIN = $ROM_START,  LENGTH = $ROM_SIZE
41   data   (rwx)          : ORIGIN = $RAM_START,  LENGTH = $RAM_SIZE
42   vectors (rw)          : ORIGIN = 0xffe0,      LENGTH = 0x20
43   bootloader(rx)        : ORIGIN = 0x0c00,      LENGTH = 1K
44   infomem(rx)           : ORIGIN = 0x1000,      LENGTH = 256
45   infomemnobits(rx)     : ORIGIN = 0x1000,      LENGTH = 256
46   ${HEAP_MEMORY_MSP430}
47 }
48
49 EOF
50
51 cat <<EOF
52 SECTIONS
53 {
54   /* Bootloader.  */
55   .bootloader ${RELOCATING-0} :
56   {
57     ${RELOCATING+ PROVIDE (__boot_start = .) ; }
58     *(.bootloader)
59     ${RELOCATING+. = ALIGN(2);}
60     ${RELOCATING+*(.bootloader.*)}
61   } ${RELOCATING+ > bootloader}
62
63   /* Information memory.  */
64   .infomem ${RELOCATING-0} :
65   {
66     *(.infomem)
67     ${RELOCATING+. = ALIGN(2);}
68     ${RELOCATING+*(.infomem.*)}
69   } ${RELOCATING+ > infomem}
70
71   /* Information memory (not loaded into MPU).  */
72   .infomemnobits ${RELOCATING-0} :
73   {
74     *(.infomemnobits)
75     ${RELOCATING+. = ALIGN(2);}
76     ${RELOCATING+*(.infomemnobits.*)}
77   } ${RELOCATING+ > infomemnobits}
78
79   /* Read-only sections, merged into text segment.  */
80   ${TEXT_DYNAMIC+${DYNAMIC}}
81   .hash        ${RELOCATING-0} : { *(.hash)             }
82   .dynsym      ${RELOCATING-0} : { *(.dynsym)           }
83   .dynstr      ${RELOCATING-0} : { *(.dynstr)           }
84   .gnu.version ${RELOCATING-0} : { *(.gnu.version)      }
85   .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d)  }
86   .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r)  }
87
88   .rel.init    ${RELOCATING-0} : { *(.rel.init) }
89   .rela.init   ${RELOCATING-0} : { *(.rela.init) }
90   .rel.text    ${RELOCATING-0} :
91     {
92       *(.rel.text)
93       ${RELOCATING+*(.rel.text.*)}
94       ${RELOCATING+*(.rel.gnu.linkonce.t*)}
95     }
96   .rela.text   ${RELOCATING-0} :
97     {
98       *(.rela.text)
99       ${RELOCATING+*(.rela.text.*)}
100       ${RELOCATING+*(.rela.gnu.linkonce.t*)}
101     }
102   .rel.fini    ${RELOCATING-0} : { *(.rel.fini) }
103   .rela.fini   ${RELOCATING-0} : { *(.rela.fini) }
104   .rel.rodata  ${RELOCATING-0} :
105     {
106       *(.rel.rodata)
107       ${RELOCATING+*(.rel.rodata.*)}
108       ${RELOCATING+*(.rel.gnu.linkonce.r*)}
109     }
110   .rela.rodata ${RELOCATING-0} :
111     {
112       *(.rela.rodata)
113       ${RELOCATING+*(.rela.rodata.*)}
114       ${RELOCATING+*(.rela.gnu.linkonce.r*)}
115     }
116   .rel.data    ${RELOCATING-0} :
117     {
118       *(.rel.data)
119       ${RELOCATING+*(.rel.data.*)}
120       ${RELOCATING+*(.rel.gnu.linkonce.d*)}
121     }
122   .rela.data   ${RELOCATING-0} :
123     {
124       *(.rela.data)
125       ${RELOCATING+*(.rela.data.*)}
126       ${RELOCATING+*(.rela.gnu.linkonce.d*)}
127     }
128   .rel.ctors   ${RELOCATING-0} : { *(.rel.ctors)        }
129   .rela.ctors  ${RELOCATING-0} : { *(.rela.ctors)       }
130   .rel.dtors   ${RELOCATING-0} : { *(.rel.dtors)        }
131   .rela.dtors  ${RELOCATING-0} : { *(.rela.dtors)       }
132   .rel.got     ${RELOCATING-0} : { *(.rel.got)          }
133   .rela.got    ${RELOCATING-0} : { *(.rela.got)         }
134   .rel.bss     ${RELOCATING-0} : { *(.rel.bss)          }
135   .rela.bss    ${RELOCATING-0} : { *(.rela.bss)         }
136   .rel.plt     ${RELOCATING-0} : { *(.rel.plt)          }
137   .rela.plt    ${RELOCATING-0} : { *(.rela.plt)         }
138
139   /* Internal text space.  */
140   .text ${RELOCATING-0} :
141   {
142     ${RELOCATING+. = ALIGN(2);
143     *(SORT_NONE(.init))
144     *(SORT_NONE(.init0))  /* Start here after reset.  */
145     *(SORT_NONE(.init1))
146     *(SORT_NONE(.init2))  /* Copy data loop  */
147     *(SORT_NONE(.init3))
148     *(SORT_NONE(.init4))  /* Clear bss  */
149     *(SORT_NONE(.init5))
150     *(SORT_NONE(.init6))  /* C++ constructors.  */
151     *(SORT_NONE(.init7))
152     *(SORT_NONE(.init8))
153     *(SORT_NONE(.init9))  /* Call main().  */}
154
155     ${CONSTRUCTING+ __ctors_start = . ; }
156     ${CONSTRUCTING+ *(.ctors) }
157     ${CONSTRUCTING+ __ctors_end = . ; }
158     ${CONSTRUCTING+ __dtors_start = . ; }
159     ${CONSTRUCTING+ *(.dtors) }
160     ${CONSTRUCTING+ __dtors_end = . ; }
161
162     ${RELOCATING+. = ALIGN(2);
163     *(.lower.text.* .lower.text)
164
165     . = ALIGN(2);}
166     *(.text)
167     ${RELOCATING+. = ALIGN(2);
168     *(.text.*)
169     . = ALIGN(2);
170     *(.text:*)
171
172     *(.either.text.* .either.text)
173
174     . = ALIGN(2);
175     *(SORT_NONE(.fini9))
176     *(SORT_NONE(.fini8))
177     *(SORT_NONE(.fini7))
178     *(SORT_NONE(.fini6))  /* C++ destructors.  */
179     *(SORT_NONE(.fini5))
180     *(SORT_NONE(.fini4))
181     *(SORT_NONE(.fini3))
182     *(SORT_NONE(.fini2))
183     *(SORT_NONE(.fini1))
184     *(SORT_NONE(.fini0))  /* Infinite loop after program termination.  */
185     *(SORT_NONE(.fini))
186
187     _etext = .;}
188   } ${RELOCATING+ > text}
189
190   .rodata ${RELOCATING-0} :
191   {
192     ${RELOCATING+. = ALIGN(2);
193     *(.lower.rodata.* .lower.rodata)
194
195     . = ALIGN(2);
196     *(.plt)}
197     *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.* .const .const:*})
198     ${RELOCATING+*(.rodata1)
199
200     *(.either.rodata.*) *(.either.rodata)
201     *(.eh_frame_hdr)
202     KEEP (*(.eh_frame))
203
204     KEEP (*(.gcc_except_table)) *(.gcc_except_table.*)
205
206     PROVIDE (__preinit_array_start = .);
207     KEEP (*(.preinit_array))
208     PROVIDE (__preinit_array_end = .);
209
210     PROVIDE (__init_array_start = .);
211     KEEP (*(SORT(.init_array.*)))
212     KEEP (*(.init_array))
213     PROVIDE (__init_array_end = .);
214
215     PROVIDE (__fini_array_start = .);
216     KEEP (*(.fini_array))
217     KEEP (*(SORT(.fini_array.*)))
218     PROVIDE (__fini_array_end = .);
219
220     /* gcc uses crtbegin.o to find the start of the constructors, so
221        we make sure it is first.  Because this is a wildcard, it
222        doesn't matter if the user does not actually link against
223        crtbegin.o; the linker won't look for a file to match a
224        wildcard.  The wildcard also means that it doesn't matter which
225        directory crtbegin.o is in.  */
226     KEEP (*crtbegin*.o(.ctors))
227
228     /* We don't want to include the .ctor section from from the
229        crtend.o file until after the sorted ctors.  The .ctor section
230        from the crtend file contains the end of ctors marker and it
231        must be last */
232     KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors))
233     KEEP (*(SORT(.ctors.*)))
234     KEEP (*(.ctors))
235
236     KEEP (*crtbegin*.o(.dtors))
237     KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors))
238     KEEP (*(SORT(.dtors.*)))
239     KEEP (*(.dtors))}
240   } ${RELOCATING+ > text}
241
242   .vectors ${RELOCATING-0} :
243   {
244     ${RELOCATING+ PROVIDE (__vectors_start = .) ; }
245     *(.vectors${RELOCATING+*})
246     ${RELOCATING+ _vectors_end = . ; }
247   } ${RELOCATING+ > vectors}
248
249   .data ${RELOCATING-0} :
250   {
251     ${RELOCATING+ PROVIDE (__data_start = .) ; }
252     ${RELOCATING+ PROVIDE (__datastart = .) ; }
253     ${RELOCATING+. = ALIGN(2);
254
255     KEEP (*(.jcr))
256     *(.data.rel.ro.local) *(.data.rel.ro*)
257     *(.dynamic)
258
259     . = ALIGN(2);
260     *(.lower.data.* .lower.data)}
261
262     *(.data)
263     ${RELOCATING+*(.data.*)
264     *(.gnu.linkonce.d*)
265     KEEP (*(.gnu.linkonce.d.*personality*))
266     *(.data1)
267
268     *(.either.data.* .either.data)
269
270     *(.got.plt) *(.got)
271     . = ALIGN(2);
272     *(.sdata .sdata.* .gnu.linkonce.s.*)
273     . = ALIGN(2);
274     _edata = .;}
275   } ${RELOCATING+ > data AT> text}
276
277   ${RELOCATING+__romdatastart = LOADADDR(.data);
278   __romdatacopysize = SIZEOF(.data);}
279
280   .bss ${RELOCATING-0}${RELOCATING+SIZEOF(.data) + ADDR(.data)} :
281   {
282     ${RELOCATING+. = ALIGN(2);}
283     ${RELOCATING+ PROVIDE (__bss_start = .); }
284     ${RELOCATING+ PROVIDE (__bssstart = .);
285     *(.lower.bss.* .lower.bss)
286     . = ALIGN(2);}
287     *(.bss)
288     ${RELOCATING+*(.either.bss.* .either.bss)
289     *(COMMON)
290     PROVIDE (__bss_end = .);}
291   } ${RELOCATING+ > data}
292   ${RELOCATING+ PROVIDE (__bsssize = SIZEOF(.bss)); }
293
294   .noinit ${RELOCATING-0}${RELOCATING+SIZEOF(.bss) + ADDR(.bss)} :
295   {
296     ${RELOCATING+ PROVIDE (__noinit_start = .) ; }
297     *(.noinit)
298     ${RELOCATING+ PROVIDE (__noinit_end = .) ; }
299   } ${RELOCATING+ > data}
300
301   .persistent ${RELOCATING-0}${RELOCATING+SIZEOF(.noinit) + ADDR(.noinit)} :
302   {
303     ${RELOCATING+ PROVIDE (__persistent_start = .) ; }
304     *(.persistent)
305     ${RELOCATING+ PROVIDE (__persistent_end = .) ; }
306   } ${RELOCATING+ > data}
307
308   ${RELOCATING+ _end = . ;  }
309   ${HEAP_SECTION_MSP430}
310
311   /* Stabs for profiling information*/
312   .profiler 0 : { *(.profiler) }
313
314   /* Stabs debugging sections.  */
315   .stab 0 : { *(.stab) }
316   .stabstr 0 : { *(.stabstr) }
317   .stab.excl 0 : { *(.stab.excl) }
318   .stab.exclstr 0 : { *(.stab.exclstr) }
319   .stab.index 0 : { *(.stab.index) }
320   .stab.indexstr 0 : { *(.stab.indexstr) }
321   .comment 0 : { *(.comment) }
322 EOF
323
324 . $srcdir/scripttempl/DWARF.sc
325
326 test -n "${RELOCATING}" && cat <<EOF
327   .MSP430.attributes 0 :
328   {
329     KEEP (*(.MSP430.attributes))
330     KEEP (*(.gnu.attributes))
331     KEEP (*(__TI_build_attributes))
332   }
333
334   PROVIDE (__stack = ${STACK}) ;
335   PROVIDE (__data_start_rom = _etext) ;
336   PROVIDE (__data_end_rom   = _etext + SIZEOF (.data)) ;
337   PROVIDE (__noinit_start_rom = _etext + SIZEOF (.data)) ;
338   PROVIDE (__noinit_end_rom = _etext + SIZEOF (.data) + SIZEOF (.noinit)) ;
339   PROVIDE (__subdevice_has_heap = ${GOT_HEAP_MSP-0}) ;
340 EOF
341
342 cat <<EOF
343 }
344 EOF