source: rtems/bsps/m68k/shared/start/linkcmds.base @ e10dec0

Last change on this file since e10dec0 was e10dec0, checked in by Sebastian Huber <sebastian.huber@…>, on 04/30/21 at 13:47:10

bsps: Support RTEMS_NOINIT in linkcmds

Update #3866.

  • Property mode set to 100644
File size: 11.0 KB
Line 
1/*
2 * Copyright (c) 2008, 2018 embedded brains GmbH.  All rights reserved.
3 *
4 *  embedded brains GmbH
5 *  Dornierstr. 4
6 *  82178 Puchheim
7 *  Germany
8 *  <rtems@embedded-brains.de>
9 *
10 * The license and distribution terms for this file may be
11 * found in the file LICENSE in this distribution or at
12 * http://www.rtems.org/license/LICENSE.
13 */
14
15OUTPUT_FORMAT("elf32-m68k", "elf32-m68k", "elf32-m68k")
16
17OUTPUT_ARCH(m68k)
18
19ENTRY(start)
20STARTUP(start.o)
21
22MEMORY {
23        UNEXPECTED_SECTIONS : ORIGIN = 0xffffffff, LENGTH = 0
24}
25
26SECTIONS {
27        .vector0 : ALIGN_WITH_INPUT {
28                bsp_vector0_begin = .;
29                KEEP (*(.vectors*))
30                bsp_vector0_end = .;
31        } > REGION_TEXT AT > REGION_TEXT
32        bsp_vector0_size = bsp_vector0_end - bsp_vector0_begin;
33
34        .text : ALIGN_WITH_INPUT {
35                *(.text.unlikely .text.*_unlikely)
36                *(.text .stub .text.* .gnu.linkonce.t.*)
37                /* .gnu.warning sections are handled specially by elf32.em.  */
38                *(.gnu.warning)
39        } > REGION_TEXT AT > REGION_TEXT_LOAD
40        .init : ALIGN_WITH_INPUT {
41                KEEP (*(.init))
42        } > REGION_TEXT AT > REGION_TEXT_LOAD
43        .fini : ALIGN_WITH_INPUT {
44                KEEP (*(.fini))
45        } > REGION_TEXT AT > REGION_TEXT_LOAD
46        .rodata : ALIGN_WITH_INPUT {
47                *(.rodata .rodata.* .gnu.linkonce.r.*)
48        } > REGION_TEXT AT > REGION_TEXT_LOAD
49        .rodata1 : ALIGN_WITH_INPUT {
50                *(.rodata1)
51        } > REGION_TEXT AT > REGION_TEXT_LOAD
52        .eh_frame : ALIGN_WITH_INPUT {
53                KEEP (*(.eh_frame))
54        } > REGION_TEXT AT > REGION_TEXT_LOAD
55        .gcc_except_table : ALIGN_WITH_INPUT {
56                *(.gcc_except_table .gcc_except_table.*)
57        } > REGION_TEXT AT > REGION_TEXT_LOAD
58        .tdata : ALIGN_WITH_INPUT {
59                _TLS_Data_begin = .;
60                *(.tdata .tdata.* .gnu.linkonce.td.*)
61                _TLS_Data_end = .;
62        } > REGION_TEXT AT > REGION_TEXT_LOAD
63        .tbss : ALIGN_WITH_INPUT {
64                _TLS_BSS_begin = .;
65                *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon)
66                _TLS_BSS_end = .;
67        } > REGION_TEXT AT > REGION_TEXT_LOAD
68        _TLS_Data_size = _TLS_Data_end - _TLS_Data_begin;
69        _TLS_Data_begin = _TLS_Data_size != 0 ? _TLS_Data_begin : _TLS_BSS_begin;
70        _TLS_Data_end = _TLS_Data_size != 0 ? _TLS_Data_end : _TLS_BSS_begin;
71        _TLS_BSS_size = _TLS_BSS_end - _TLS_BSS_begin;
72        _TLS_Size = _TLS_BSS_end - _TLS_Data_begin;
73        _TLS_Alignment = MAX (ALIGNOF (.tdata), ALIGNOF (.tbss));
74        .preinit_array : ALIGN_WITH_INPUT {
75                PROVIDE_HIDDEN (__preinit_array_start = .);
76                KEEP (*(.preinit_array))
77                PROVIDE_HIDDEN (__preinit_array_end = .);
78        } > REGION_TEXT AT > REGION_TEXT_LOAD
79        .init_array : ALIGN_WITH_INPUT {
80                PROVIDE_HIDDEN (__init_array_start = .);
81                KEEP (*(SORT(.init_array.*)))
82                KEEP (*(.init_array))
83                PROVIDE_HIDDEN (__init_array_end = .);
84        } > REGION_TEXT AT > REGION_TEXT_LOAD
85        .fini_array : ALIGN_WITH_INPUT {
86                PROVIDE_HIDDEN (__fini_array_start = .);
87                KEEP (*(.fini_array))
88                KEEP (*(SORT(.fini_array.*)))
89                PROVIDE_HIDDEN (__fini_array_end = .);
90        } > REGION_TEXT AT > REGION_TEXT_LOAD
91        .ctors : ALIGN_WITH_INPUT {
92                /* gcc uses crtbegin.o to find the start of
93                   the constructors, so we make sure it is
94                   first.  Because this is a wildcard, it
95                   doesn't matter if the user does not
96                   actually link against crtbegin.o; the
97                   linker won't look for a file to match a
98                   wildcard.  The wildcard also means that it
99                   doesn't matter which directory crtbegin.o
100                   is in.  */
101                KEEP (*crtbegin.o(.ctors))
102                KEEP (*crtbegin?.o(.ctors))
103                /* We don't want to include the .ctor section from
104                   the crtend.o file until after the sorted ctors.
105                   The .ctor section from the crtend file contains the
106                   end of ctors marker and it must be last */
107                KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
108                KEEP (*(SORT(.ctors.*)))
109                KEEP (*(.ctors))
110        } > REGION_TEXT AT > REGION_TEXT_LOAD
111        .dtors : ALIGN_WITH_INPUT {
112                KEEP (*crtbegin.o(.dtors))
113                KEEP (*crtbegin?.o(.dtors))
114                KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
115                KEEP (*(SORT(.dtors.*)))
116                KEEP (*(.dtors))
117        } > REGION_TEXT AT > REGION_TEXT_LOAD
118        .data.rel.ro : ALIGN_WITH_INPUT {
119                *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*)
120                *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*)
121        } > REGION_TEXT AT > REGION_TEXT_LOAD
122        .jcr : ALIGN_WITH_INPUT {
123                KEEP (*(.jcr))
124        } > REGION_TEXT AT > REGION_TEXT_LOAD
125        .interp : ALIGN_WITH_INPUT {
126                *(.interp)
127        } > REGION_TEXT AT > REGION_TEXT_LOAD
128        .note.gnu.build-id : ALIGN_WITH_INPUT {
129                *(.note.gnu.build-id)
130        } > REGION_TEXT AT > REGION_TEXT_LOAD
131        .hash : ALIGN_WITH_INPUT {
132                *(.hash)
133        } > REGION_TEXT AT > REGION_TEXT_LOAD
134        .gnu.hash : ALIGN_WITH_INPUT {
135                *(.gnu.hash)
136        } > REGION_TEXT AT > REGION_TEXT_LOAD
137        .dynsym : ALIGN_WITH_INPUT {
138                *(.dynsym)
139        } > REGION_TEXT AT > REGION_TEXT_LOAD
140        .dynstr : ALIGN_WITH_INPUT {
141                *(.dynstr)
142        } > REGION_TEXT AT > REGION_TEXT_LOAD
143        .gnu.version : ALIGN_WITH_INPUT {
144                *(.gnu.version)
145        } > REGION_TEXT AT > REGION_TEXT_LOAD
146        .gnu.version_d : ALIGN_WITH_INPUT {
147                *(.gnu.version_d)
148        } > REGION_TEXT AT > REGION_TEXT_LOAD
149        .gnu.version_r : ALIGN_WITH_INPUT {
150                *(.gnu.version_r)
151        } > REGION_TEXT AT > REGION_TEXT_LOAD
152        .rel.dyn : ALIGN_WITH_INPUT {
153                *(.rel.init)
154                *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
155                *(.rel.fini)
156                *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
157                *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*)
158                *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
159                *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
160                *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
161                *(.rel.ctors)
162                *(.rel.dtors)
163                *(.rel.got)
164                *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
165                PROVIDE_HIDDEN (__rel_iplt_start = .);
166                *(.rel.iplt)
167                PROVIDE_HIDDEN (__rel_iplt_end = .);
168                PROVIDE_HIDDEN (__rela_iplt_start = .);
169                PROVIDE_HIDDEN (__rela_iplt_end = .);
170        } > REGION_TEXT AT > REGION_TEXT_LOAD
171        .rela.dyn : ALIGN_WITH_INPUT {
172                *(.rela.init)
173                *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
174                *(.rela.fini)
175                *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
176                *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
177                *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
178                *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
179                *(.rela.ctors)
180                *(.rela.dtors)
181                *(.rela.got)
182                *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
183                *(.rela.rtemsroset*)
184                *(.rela.rtemsrwset*)
185                PROVIDE_HIDDEN (__rel_iplt_start = .);
186                PROVIDE_HIDDEN (__rel_iplt_end = .);
187                PROVIDE_HIDDEN (__rela_iplt_start = .);
188                *(.rela.iplt)
189                PROVIDE_HIDDEN (__rela_iplt_end = .);
190        } > REGION_TEXT AT > REGION_TEXT_LOAD
191        .rel.plt : ALIGN_WITH_INPUT {
192                *(.rel.plt)
193        } > REGION_TEXT AT > REGION_TEXT_LOAD
194        .rela.plt : ALIGN_WITH_INPUT {
195                *(.rela.plt)
196        } > REGION_TEXT AT > REGION_TEXT_LOAD
197        .plt : ALIGN_WITH_INPUT {
198                *(.plt)
199        } > REGION_TEXT AT > REGION_TEXT_LOAD
200        .iplt : ALIGN_WITH_INPUT {
201                *(.iplt)
202        } > REGION_TEXT AT > REGION_TEXT_LOAD
203        .dynamic : ALIGN_WITH_INPUT {
204                *(.dynamic)
205        } > REGION_TEXT AT > REGION_TEXT_LOAD
206        .got : ALIGN_WITH_INPUT {
207                *(.got.plt) *(.igot.plt) *(.got) *(.igot)
208        } > REGION_TEXT AT > REGION_TEXT_LOAD
209        .rtemsroset : ALIGN_WITH_INPUT {
210                /* Special FreeBSD linker set sections */
211                __start_set_sysctl_set = .;
212                *(set_sysctl_*);
213                __stop_set_sysctl_set = .;
214                *(set_domain_*);
215                *(set_pseudo_*);
216
217                KEEP (*(SORT(.rtemsroset.*)))
218        } > REGION_TEXT AT > REGION_TEXT_LOAD
219
220        .vector1 : ALIGN_WITH_INPUT {
221                bsp_vector1_begin = .;
222                . = . + (ORIGIN (REGION_TEXT) == ORIGIN (REGION_DATA) ? 0 : bsp_vector0_size);
223                bsp_vector1_end = .;
224        } > REGION_DATA AT > REGION_DATA
225        bsp_vector1_size = bsp_vector1_end - bsp_vector1_begin;
226
227        .data : ALIGN_WITH_INPUT {
228                bsp_section_data_begin = .;
229                *(.data .data.* .gnu.linkonce.d.*)
230                SORT(CONSTRUCTORS)
231        } > REGION_DATA AT > REGION_DATA_LOAD
232        .data1 : ALIGN_WITH_INPUT {
233                *(.data1)
234        } > REGION_DATA AT > REGION_DATA_LOAD
235        .rtemsrwset : ALIGN_WITH_INPUT {
236                KEEP (*(SORT(.rtemsrwset.*)))
237                bsp_section_data_end = .;
238        } > REGION_DATA AT > REGION_DATA_LOAD
239        bsp_section_data_size = bsp_section_data_end - bsp_section_data_begin;
240        bsp_section_data_load_begin = LOADADDR (.data);
241        bsp_section_data_load_end = bsp_section_data_load_begin + bsp_section_data_size;
242
243        .bss : ALIGN_WITH_INPUT {
244                bsp_section_bss_begin = .;
245                *(.dynbss)
246                *(.bss .bss.* .gnu.linkonce.b.*)
247                *(COMMON)
248                bsp_section_bss_end = .;
249        } > REGION_DATA AT > REGION_DATA
250        bsp_section_bss_size = bsp_section_bss_end - bsp_section_bss_begin;
251
252        .noinit (NOLOAD) : ALIGN_WITH_INPUT {
253                bsp_section_noinit_begin = .;
254                *(.noinit*)
255                bsp_section_noinit_end = .;
256        } > REGION_DATA AT > REGION_DATA
257        bsp_section_noinit_size = bsp_section_noinit_end - bsp_section_noinit_begin;
258
259        .rtemsstack (NOLOAD) : ALIGN_WITH_INPUT {
260                *(SORT(.rtemsstack.*))
261        } > REGION_DATA AT > REGION_DATA
262
263        .work : ALIGN_WITH_INPUT {
264                /*
265                 * The work section will occupy the remaining REGION_DATA region and
266                 * contains the RTEMS work space and heap.
267                 */
268                bsp_section_work_begin = .;
269                . += ORIGIN (REGION_DATA) + LENGTH (REGION_DATA) - ABSOLUTE (.);
270                bsp_section_work_end = .;
271        } > REGION_DATA AT > REGION_DATA
272        bsp_section_work_size = bsp_section_work_end - bsp_section_work_begin;
273
274        /* FIXME */
275        RamBase = ORIGIN (REGION_DATA);
276        RamSize = LENGTH (REGION_DATA);
277        RamEnd = RamBase + RamSize;
278        WorkAreaBase = bsp_section_work_begin;
279        HeapSize = 0;
280
281        /* Stabs debugging sections.  */
282        .stab          0 : { *(.stab) }
283        .stabstr       0 : { *(.stabstr) }
284        .stab.excl     0 : { *(.stab.excl) }
285        .stab.exclstr  0 : { *(.stab.exclstr) }
286        .stab.index    0 : { *(.stab.index) }
287        .stab.indexstr 0 : { *(.stab.indexstr) }
288        .comment       0 : { *(.comment) }
289        /* DWARF debug sections.
290           Symbols in the DWARF debugging sections are relative to the beginning
291           of the section so we begin them at 0.  */
292        /* DWARF 1.  */
293        .debug          0 : { *(.debug) }
294        .line           0 : { *(.line) }
295        /* GNU DWARF 1 extensions.  */
296        .debug_srcinfo  0 : { *(.debug_srcinfo) }
297        .debug_sfnames  0 : { *(.debug_sfnames) }
298        /* DWARF 1.1 and DWARF 2.  */
299        .debug_aranges  0 : { *(.debug_aranges) }
300        .debug_pubnames 0 : { *(.debug_pubnames) }
301        /* DWARF 2.  */
302        .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
303        .debug_abbrev   0 : { *(.debug_abbrev) }
304        .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
305        .debug_frame    0 : { *(.debug_frame) }
306        .debug_str      0 : { *(.debug_str) }
307        .debug_loc      0 : { *(.debug_loc) }
308        .debug_macinfo  0 : { *(.debug_macinfo) }
309        /* SGI/MIPS DWARF 2 extensions.  */
310        .debug_weaknames 0 : { *(.debug_weaknames) }
311        .debug_funcnames 0 : { *(.debug_funcnames) }
312        .debug_typenames 0 : { *(.debug_typenames) }
313        .debug_varnames  0 : { *(.debug_varnames) }
314        /* DWARF 3.  */
315        .debug_pubtypes 0 : { *(.debug_pubtypes) }
316        .debug_ranges   0 : { *(.debug_ranges) }
317        /* DWARF 5.  */
318        .debug_addr     0 : { *(.debug_addr) }
319        .debug_line_str 0 : { *(.debug_line_str) }
320        .debug_loclists 0 : { *(.debug_loclists) }
321        .debug_macro    0 : { *(.debug_macro) }
322        .debug_names    0 : { *(.debug_names) }
323        .debug_rnglists 0 : { *(.debug_rnglists) }
324        .debug_str_offsets 0 : { *(.debug_str_offsets) }
325        .debug_sup      0 : { *(.debug_sup) }
326        /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
327
328        /*
329         * This is a RTEMS specific section to catch all unexpected input
330         * sections.  In case you get an error like
331         *   "section `.unexpected_sections' will not fit in region
332         *   `UNEXPECTED_SECTIONS'"
333         * you have to figure out the offending input section and add it to the
334         * appropriate output section definition above.
335         */
336        .unexpected_sections : { *(*) } > UNEXPECTED_SECTIONS
337}
Note: See TracBrowser for help on using the repository browser.