source: rtems/c/src/lib/libbsp/powerpc/shared/startup/linkcmds.base @ fd153c73

4.115
Last change on this file since fd153c73 was fd153c73, checked in by Sebastian Huber <sebastian.huber@…>, on Jun 12, 2012 at 1:27:17 PM

bsps: Replace NIRVANA region

Replace the "NIRVANA" region with the more verbose "UNEXPECTED_SECTIONS"
region. Move the region definition into the "linkcmds.base" files.

  • Property mode set to 100644
File size: 12.4 KB
Line 
1/**
2 * @file
3 *
4 * @ingroup bsp_linker
5 *
6 * @brief Linker command base file.
7 */
8
9/*
10 * Copyright (c) 2011-2012 embedded brains GmbH.  All rights reserved.
11 *
12 *  embedded brains GmbH
13 *  Obere Lagerstr. 30
14 *  82178 Puchheim
15 *  Germany
16 *  <rtems@embedded-brains.de>
17 *
18 * The license and distribution terms for this file may be
19 * found in the file LICENSE in this distribution or at
20 * http://www.rtems.com/license/LICENSE.
21 */
22
23OUTPUT_FORMAT ("elf32-powerpc", "elf32-powerpc", "elf32-powerpc")
24
25OUTPUT_ARCH (powerpc:common)
26
27ENTRY (_start)
28
29/*
30 * Global symbols that may be defined externally
31 */
32
33bsp_section_xbarrier_align = DEFINED (bsp_section_xbarrier_align) ? bsp_section_xbarrier_align : 1;
34bsp_section_robarrier_align = DEFINED (bsp_section_robarrier_align) ? bsp_section_robarrier_align : 1;
35bsp_section_rwbarrier_align = DEFINED (bsp_section_rwbarrier_align) ? bsp_section_rwbarrier_align : 1;
36
37MEMORY {
38        UNEXPECTED_SECTIONS : ORIGIN = 0xffffffff, LENGTH = 0
39}
40
41SECTIONS {
42        .start : {
43                bsp_section_start_begin = .;
44                KEEP (*(.bsp_start_text))
45                KEEP (*(.bsp_start_data))
46                bsp_section_start_end = .;
47        } > REGION_START AT > REGION_START
48        bsp_section_start_size = bsp_section_start_end - bsp_section_start_begin;
49
50        .xbarrier : {
51                . = ALIGN (bsp_section_xbarrier_align);
52        } > REGION_TEXT
53
54        .fast_text : {
55                bsp_section_fast_text_begin = .;
56                *(.bsp_fast_text)
57                bsp_section_fast_text_end = .;
58        } > REGION_FAST_TEXT AT > REGION_FAST_TEXT_LOAD
59        bsp_section_fast_text_size = bsp_section_fast_text_end - bsp_section_fast_text_begin;
60        bsp_section_fast_text_load_begin = LOADADDR (.fast_text);
61        bsp_section_fast_text_load_end = bsp_section_fast_text_load_begin + bsp_section_fast_text_size;
62
63        .text : {
64                bsp_section_text_begin = .;
65                *(.text.unlikely .text.*_unlikely)
66                *(.text .stub .text.* .gnu.linkonce.t.*)
67                *(.gnu.warning)
68                *(.glink)
69        } > REGION_TEXT AT > REGION_TEXT_LOAD
70        .init : {
71                KEEP (*(.init))
72        } > REGION_TEXT AT > REGION_TEXT_LOAD
73        .fini : {
74                PROVIDE (_fini = .);
75                KEEP (*(.fini))
76                bsp_section_text_end = .;
77        } > REGION_TEXT AT > REGION_TEXT_LOAD
78        bsp_section_text_size = bsp_section_text_end - bsp_section_text_begin;
79        bsp_section_text_load_begin = LOADADDR (.text);
80        bsp_section_text_load_end = bsp_section_text_load_begin + bsp_section_text_size;
81
82        .robarrier : {
83                . = ALIGN (bsp_section_robarrier_align);
84        } > REGION_RODATA
85
86        .rodata : {
87                bsp_section_rodata_begin = .;
88                *(.rodata .rodata.* .gnu.linkonce.r.*)
89        } > REGION_RODATA AT > REGION_RODATA_LOAD
90        .rodata1 : {
91                *(.rodata1)
92        } > REGION_RODATA AT > REGION_RODATA_LOAD
93        .sdata2 : {
94                PROVIDE (_SDA2_BASE_ = 32768);
95                *(.sdata2 .sdata2.* .gnu.linkonce.s2.*)
96        } > REGION_RODATA AT > REGION_RODATA_LOAD
97        .sbss2 : {
98                *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)
99        } > REGION_RODATA AT > REGION_RODATA_LOAD
100        .eh_frame_hdr : {
101                *(.eh_frame_hdr)
102        } > REGION_RODATA AT > REGION_RODATA_LOAD
103        .eh_frame : {
104                KEEP (*(.eh_frame))
105        } > REGION_RODATA AT > REGION_RODATA_LOAD
106        .gcc_except_table : {
107                *(.gcc_except_table .gcc_except_table.*)
108        } > REGION_RODATA AT > REGION_RODATA_LOAD
109        .tdata : {
110                *(.tdata .tdata.* .gnu.linkonce.td.*)
111        } > REGION_RODATA AT > REGION_RODATA_LOAD
112        .tbss : {
113                *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon)
114        } > REGION_RODATA AT > REGION_RODATA_LOAD
115        .preinit_array : {
116                PROVIDE_HIDDEN (__preinit_array_start = .);
117                KEEP (*(.preinit_array))
118                PROVIDE_HIDDEN (__preinit_array_end = .);
119        } > REGION_RODATA AT > REGION_RODATA_LOAD
120        .init_array : {
121                PROVIDE_HIDDEN (__init_array_start = .);
122                KEEP (*(SORT(.init_array.*)))
123                KEEP (*(.init_array))
124                PROVIDE_HIDDEN (__init_array_end = .);
125        } > REGION_RODATA AT > REGION_RODATA_LOAD
126        .fini_array : {
127                PROVIDE_HIDDEN (__fini_array_start = .);
128                KEEP (*(SORT(.fini_array.*)))
129                KEEP (*(.fini_array))
130                PROVIDE_HIDDEN (__fini_array_end = .);
131        } > REGION_RODATA AT > REGION_RODATA_LOAD
132        .ctors : {
133                KEEP (*crtbegin.o(.ctors))
134                KEEP (*crtbegin?.o(.ctors))
135                KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
136                KEEP (*(SORT(.ctors.*)))
137                KEEP (*(.ctors))
138        } > REGION_RODATA AT > REGION_RODATA_LOAD
139        .dtors : {
140                KEEP (*crtbegin.o(.dtors))
141                KEEP (*crtbegin?.o(.dtors))
142                KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
143                KEEP (*(SORT(.dtors.*)))
144                KEEP (*(.dtors))
145        } > REGION_RODATA AT > REGION_RODATA_LOAD
146        .jcr : {
147                KEEP (*(.jcr))
148        } > REGION_RODATA AT > REGION_RODATA_LOAD
149        .data.rel.ro : {
150                *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*)
151        } > REGION_RODATA AT > REGION_RODATA_LOAD
152        .fixup : {
153                *(.fixup)
154        } > REGION_RODATA AT > REGION_RODATA_LOAD
155        .dynamic : {
156                *(.dynamic)
157        } > REGION_RODATA AT > REGION_RODATA_LOAD
158        .got1 : {
159                *(.got1)
160        } > REGION_RODATA AT > REGION_RODATA_LOAD
161        .got2 : {
162                *(.got2)
163        } > REGION_RODATA AT > REGION_RODATA_LOAD
164        .got : {
165                *(.got)
166        } > REGION_RODATA AT > REGION_RODATA_LOAD
167        .plt : {
168                *(.plt)
169        } > REGION_RODATA AT > REGION_RODATA_LOAD
170        .iplt : {
171                *(.iplt)
172        } > REGION_RODATA AT > REGION_RODATA_LOAD
173        .interp : {
174                *(.interp)
175        } > REGION_RODATA AT > REGION_RODATA_LOAD
176        .note.gnu.build-id : {
177                *(.note.gnu.build-id)
178        } > REGION_RODATA AT > REGION_RODATA_LOAD
179        .hash : {
180                *(.hash)
181        } > REGION_RODATA AT > REGION_RODATA_LOAD
182        .gnu.hash : {
183                *(.gnu.hash)
184        } > REGION_RODATA AT > REGION_RODATA_LOAD
185        .dynsym : {
186                *(.dynsym)
187        } > REGION_RODATA AT > REGION_RODATA_LOAD
188        .dynstr : {
189                *(.dynstr)
190        } > REGION_RODATA AT > REGION_RODATA_LOAD
191        .gnu.version : {
192                *(.gnu.version)
193        } > REGION_RODATA AT > REGION_RODATA_LOAD
194        .gnu.version_d : {
195                *(.gnu.version_d)
196        } > REGION_RODATA AT > REGION_RODATA_LOAD
197        .gnu.version_r : {
198                *(.gnu.version_r)
199        } > REGION_RODATA AT > REGION_RODATA_LOAD
200        .rela.dyn : {
201                *(.rela.init)
202                *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
203                *(.rela.fini)
204                *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
205                *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
206                *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
207                *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
208                *(.rela.ctors)
209                *(.rela.dtors)
210                *(.rela.got)
211                *(.rela.got1)
212                *(.rela.got2)
213                *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*)
214                *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*)
215                *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*)
216                *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*)
217                *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
218                PROVIDE_HIDDEN (__rel_iplt_start = .);
219                PROVIDE_HIDDEN (__rel_iplt_end = .);
220                PROVIDE_HIDDEN (__rela_iplt_start = .);
221                *(.rela.iplt)
222                PROVIDE_HIDDEN (__rela_iplt_end = .);
223        } > REGION_RODATA AT > REGION_RODATA_LOAD
224        .rela.plt : {
225                *(.rela.plt)
226        } > REGION_RODATA AT > REGION_RODATA_LOAD
227        .robsdsets : {
228                /* Special FreeBSD linker set sections */
229                __start_set_sysctl_set = .;
230                *(set_sysctl_*);
231                __stop_set_sysctl_set = .;
232                *(set_domain_*);
233                *(set_pseudo_*);
234                _bsd__start_set_modmetadata_set = .;
235                *(_bsd_set_modmetadata_set);
236                _bsd__stop_set_modmetadata_set = .;
237                _bsd__start_set_sysctl_set = .;
238                *(_bsd_set_sysctl_set);
239                _bsd__stop_set_sysctl_set = .;
240
241                bsp_section_rodata_end = .;
242        } > REGION_RODATA AT > REGION_RODATA_LOAD
243        bsp_section_rodata_size = bsp_section_rodata_end - bsp_section_rodata_begin;
244        bsp_section_rodata_load_begin = LOADADDR (.rodata);
245        bsp_section_rodata_load_end = bsp_section_rodata_load_begin + bsp_section_rodata_size;
246
247        .rwbarrier : {
248                . = ALIGN (bsp_section_rwbarrier_align);
249        } > REGION_DATA
250
251        .fast_data : {
252                bsp_section_fast_data_begin = .;
253                *(.bsp_fast_data)
254                bsp_section_fast_data_end = .;
255        } > REGION_FAST_DATA AT > REGION_FAST_DATA_LOAD
256        bsp_section_fast_data_size = bsp_section_fast_data_end - bsp_section_fast_data_begin;
257        bsp_section_fast_data_load_begin = LOADADDR (.fast_data);
258        bsp_section_fast_data_load_end = bsp_section_fast_data_load_begin + bsp_section_fast_data_size;
259
260        .data : {
261                bsp_section_data_begin = .;
262                *(.data .data.* .gnu.linkonce.d.*)
263                SORT(CONSTRUCTORS)
264        } > REGION_DATA AT > REGION_DATA_LOAD
265        .data1 : {
266                *(.data1)
267        } > REGION_DATA AT > REGION_DATA_LOAD
268        .rwbsdsets : {
269                /* Special FreeBSD linker set sections */
270                _bsd__start_set_sysinit_set = .;
271                *(_bsd_set_sysinit_set);
272                _bsd__stop_set_sysinit_set = .;
273        } > REGION_DATA AT > REGION_DATA_LOAD
274        .sdata : {
275                PROVIDE (_SDA_BASE_ = 32768);
276                *(.sdata .sdata.* .gnu.linkonce.s.*)
277                bsp_section_data_end = .;
278        } > REGION_DATA AT > REGION_DATA_LOAD
279        bsp_section_data_size = bsp_section_data_end - bsp_section_data_begin;
280        bsp_section_data_load_begin = LOADADDR (.data);
281        bsp_section_data_load_end = bsp_section_data_load_begin + bsp_section_data_size;
282
283        .sbss : {
284                bsp_section_sbss_begin = .;
285                *(.dynsbss)
286                *(.sbss .sbss.* .gnu.linkonce.sb.*)
287                *(.scommon)
288                bsp_section_sbss_end = .;
289        } > REGION_DATA AT > REGION_DATA
290        bsp_section_sbss_size = bsp_section_sbss_end - bsp_section_sbss_begin;
291
292        .bss : {
293                bsp_section_bss_begin = .;
294                *(.dynbss)
295                *(.bss .bss.* .gnu.linkonce.b.*)
296                *(COMMON)
297                bsp_section_bss_end = .;
298        } > REGION_BSS AT > REGION_BSS
299        bsp_section_bss_size = bsp_section_bss_end - bsp_section_bss_begin;
300
301        .rwextra : {
302                bsp_section_rwextra_begin = .;
303                *(.bsp_rwextra)
304                bsp_section_rwextra_end = .;
305        } > REGION_RWEXTRA AT > REGION_RWEXTRA
306        bsp_section_rwextra_size = bsp_section_rwextra_end - bsp_section_rwextra_begin;
307
308        .work : {
309                /*
310                 * The work section will occupy the remaining REGION_WORK region and
311                 * contains the RTEMS work space and heap.
312                 */
313                bsp_section_work_begin = .;
314                . += ORIGIN (REGION_WORK) + LENGTH (REGION_WORK) - ABSOLUTE (.);
315                bsp_section_work_end = .;
316        } > REGION_WORK AT > REGION_WORK
317        bsp_section_work_size = bsp_section_work_end - bsp_section_work_begin;
318
319        .stack : {
320                /*
321                 * The stack section will occupy the remaining REGION_STACK region and may
322                 * contain the task stacks.  Depending on the region distribution this
323                 * section may be of zero size.
324                 */
325                bsp_section_stack_begin = .;
326                . += ORIGIN (REGION_STACK) + LENGTH (REGION_STACK) - ABSOLUTE (.);
327                bsp_section_stack_end = .;
328        } > REGION_STACK AT > REGION_STACK
329        bsp_section_stack_size = bsp_section_stack_end - bsp_section_stack_begin;
330
331        .nocache : {
332                bsp_section_nocache_begin = .;
333                *(.bsp_nocache)
334                bsp_section_nocache_end = .;
335        } > REGION_NOCACHE AT > REGION_NOCACHE_LOAD
336        bsp_section_nocache_size = bsp_section_nocache_end - bsp_section_nocache_begin;
337        bsp_section_nocache_load_begin = LOADADDR (.nocache);
338        bsp_section_nocache_load_end = bsp_section_nocache_load_begin + bsp_section_nocache_size;
339
340        /* FIXME */
341        RamBase = ORIGIN (REGION_WORK);
342        RamSize = LENGTH (REGION_WORK);
343        WorkAreaBase = bsp_section_work_begin;
344        HeapSize = 0;
345
346        /* Stabs debugging sections.  */
347        .stab          0 : { *(.stab) }
348        .stabstr       0 : { *(.stabstr) }
349        .stab.excl     0 : { *(.stab.excl) }
350        .stab.exclstr  0 : { *(.stab.exclstr) }
351        .stab.index    0 : { *(.stab.index) }
352        .stab.indexstr 0 : { *(.stab.indexstr) }
353        .comment       0 : { *(.comment) }
354        /* DWARF debug sections.
355           Symbols in the DWARF debugging sections are relative to the beginning
356           of the section so we begin them at 0.  */
357        /* DWARF 1 */
358        .debug          0 : { *(.debug) }
359        .line           0 : { *(.line) }
360        /* GNU DWARF 1 extensions */
361        .debug_srcinfo  0 : { *(.debug_srcinfo .zdebug_srcinfo) }
362        .debug_sfnames  0 : { *(.debug_sfnames .zdebug_sfnames) }
363        /* DWARF 1.1 and DWARF 2 */
364        .debug_aranges  0 : { *(.debug_aranges .zdebug_aranges) }
365        .debug_pubnames 0 : { *(.debug_pubnames .zdebug_pubnames) }
366        /* DWARF 2 */
367        .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.* .zdebug_info) }
368        .debug_abbrev   0 : { *(.debug_abbrev .zdebug_abbrev) }
369        .debug_line     0 : { *(.debug_line .zdebug_line) }
370        .debug_frame    0 : { *(.debug_frame .zdebug_frame) }
371        .debug_str      0 : { *(.debug_str .zdebug_str) }
372        .debug_loc      0 : { *(.debug_loc .zdebug_loc) }
373        .debug_macinfo  0 : { *(.debug_macinfo .zdebug_macinfo) }
374        /* SGI/MIPS DWARF 2 extensions */
375        .debug_weaknames 0 : { *(.debug_weaknames .zdebug_weaknames) }
376        .debug_funcnames 0 : { *(.debug_funcnames .zdebug_funcnames) }
377        .debug_typenames 0 : { *(.debug_typenames .zdebug_typenames) }
378        .debug_varnames  0 : { *(.debug_varnames .zdebug_varnames) }
379        /* DWARF 3 */
380        .debug_pubtypes 0 : { *(.debug_pubtypes .zdebug_pubtypes) }
381        .debug_ranges   0 : { *(.debug_ranges .zdebug_ranges) }
382        .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
383        .PPC.EMB.apuinfo 0 : { *(.PPC.EMB.apuinfo) }
384        /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
385
386        /*
387         * This is a RTEMS specific section to catch all unexpected input
388         * sections.  In case you get an error like
389         *   "section `.unexpected_sections' will not fit in region
390         *   `UNEXPECTED_SECTIONS'"
391         * you have to figure out the offending input section and add it to the
392         * appropriate output section definition above.
393         */
394        .unexpected_sections : { *(*) } > UNEXPECTED_SECTIONS
395}
Note: See TracBrowser for help on using the repository browser.