1 # Linker Script for National Semiconductor's CRX-ELF32.
3 # Copyright (C) 2014-2018 Free Software Foundation, Inc.
5 # Copying and distribution of this file, with or without modification,
6 # are permitted in any medium without royalty provided the copyright
7 # notice and this notice are preserved.
9 # The next line should be uncommented if it is desired to link
10 # without libstart.o and directly enter main.
14 test -z "$ENTRY" && ENTRY=_start
17 /* Example Linker Script for linking NS CRX elf32 files.
19 Copyright (C) 2014-2018 Free Software Foundation, Inc.
21 Copying and distribution of this script, with or without modification,
22 are permitted in any medium without royalty provided the copyright
23 notice and this notice are preserved. */
26 OUTPUT_FORMAT("${OUTPUT_FORMAT}")
28 ${RELOCATING+ENTRY(${ENTRY})}
30 /* Define memory regions. */
33 rom : ORIGIN = 0x2, LENGTH = 3M
34 ram : ORIGIN = 4M, LENGTH = 10M
37 /* Many sections come in three flavours. There is the 'real' section,
38 like ".data". Then there are the per-procedure or per-variable
39 sections, generated by -ffunction-sections and -fdata-sections in GCC,
40 and useful for --gc-sections, which for a variable "foo" might be
41 ".data.foo". Then there are the linkonce sections, for which the linker
42 eliminates duplicates, which are named like ".gnu.linkonce.d.foo".
43 The exact correspondences are:
45 Section Linkonce section
46 .text .gnu.linkonce.t.foo
47 .rdata .gnu.linkonce.r.foo
48 .data .gnu.linkonce.d.foo
49 .bss .gnu.linkonce.b.foo
50 .debug_info .gnu.linkonce.wi.foo */
76 *(.text) *(.text.*) *(.gnu.linkonce.t.*)
83 *(.rdata_4) *(.rdata_2) *(.rdata_1) *(.rdata.*) *(.gnu.linkonce.r.*) *(.rodata.*)
90 /* The compiler uses crtbegin.o to find the start
91 of the constructors, so we make sure it is
92 first. Because this is a wildcard, it
93 doesn't matter if the user does not
94 actually link against crtbegin.o; the
95 linker won't look for a file to match a
96 wildcard. The wildcard also means that it
97 doesn't matter which directory crtbegin.o
100 KEEP (*crtbegin.o(.ctors))
101 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 */
108 KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .ctors))
109 KEEP (*(SORT(.ctors.*)))
117 KEEP (*crtbegin.o(.dtors))
118 KEEP (*crtbegin?.o(.dtors))
119 KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .dtors))
120 KEEP (*(SORT(.dtors.*)))
128 *(.data_4) *(.data_2) *(.data_1) *(.data) *(.data.*) *(.gnu.linkonce.d.*)
135 *(.bss_4) *(.bss_2) *(.bss_1) *(.bss) *(COMMON) *(.bss.*) *(.gnu.linkonce.b.*)
139 /* You may change the sizes of the following sections to fit the actual
140 size your program requires.
142 The heap and stack are aligned to the bus width, as a speed optimization
143 for accessing data located there. */
149 . += 0x2000; __HEAP_MAX = .;
166 .comment 0 : { *(.comment) }
170 . $srcdir/scripttempl/DWARF.sc
175 __DATA_IMAGE_START = LOADADDR(.data);