1 # Linker Script for National Semiconductor's CR16-ELF32. 2 # 3 # Copyright (C) 2014 Free Software Foundation, Inc. 4 # 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. 8 9 # The next line should be uncommented if it is desired to link 10 # without libstart.o and directly enter main. 11 12 # ENTRY=_main 13 14 test -z "$ENTRY" && ENTRY=_start 15 cat <<EOF 16 17 /* Example Linker Script for linking NS CR16 elf32 files. 18 Copyright (C) 2014 Free Software Foundation, Inc. 19 20 Copying and distribution of this script, with or without modification, 21 are permitted in any medium without royalty provided the copyright 22 notice and this notice are preserved. */ 23 24 OUTPUT_FORMAT("${OUTPUT_FORMAT}") 25 OUTPUT_ARCH(${ARCH}) 26 ${RELOCATING+ENTRY(${ENTRY})} 27 28 /* Define memory regions. */ 29 MEMORY 30 { 31 rom : ORIGIN = 0x2, LENGTH = 3M 32 ram : ORIGIN = 4M, LENGTH = 10M 33 } 34 35 /* Many sections come in three flavours. There is the 'real' section, 36 like ".data". Then there are the per-procedure or per-variable 37 sections, generated by -ffunction-sections and -fdata-sections in GCC, 38 and useful for --gc-sections, which for a variable "foo" might be 39 ".data.foo". Then there are the linkonce sections, for which the linker 40 eliminates duplicates, which are named like ".gnu.linkonce.d.foo". 41 The exact correspondences are: 42 43 Section Linkonce section 44 .text .gnu.linkonce.t.foo 45 .rdata .gnu.linkonce.r.foo 46 .data .gnu.linkonce.d.foo 47 .bss .gnu.linkonce.b.foo 48 .debug_info .gnu.linkonce.wi.foo */ 49 50 SECTIONS 51 { 52 .init : 53 { 54 __INIT_START = .; 55 KEEP (*(.init)) 56 __INIT_END = .; 57 } > rom 58 59 .fini : 60 { 61 __FINI_START = .; 62 KEEP (*(.fini)) 63 __FINI_END = .; 64 } > rom 65 66 .jcr : 67 { 68 KEEP (*(.jcr)) 69 } > rom 70 71 .text : 72 { 73 __TEXT_START = .; 74 *(.text) *(.text.*) *(.gnu.linkonce.t.*) 75 __TEXT_END = .; 76 } > rom 77 78 .rdata : 79 { 80 __RDATA_START = .; 81 *(.rdata_4) *(.rdata_2) *(.rdata_1) *(.rdata.*) *(.gnu.linkonce.r.*) *(.rodata*) 82 __RDATA_END = .; 83 } > rom 84 85 .ctor ALIGN(4) : 86 { 87 __CTOR_START = .; 88 /* The compiler uses crtbegin.o to find the start 89 of the constructors, so we make sure it is 90 first. Because this is a wildcard, it 91 doesn't matter if the user does not 92 actually link against crtbegin.o; the 93 linker won't look for a file to match a 94 wildcard. The wildcard also means that it 95 doesn't matter which directory crtbegin.o 96 is in. */ 97 98 KEEP (*crtbegin*.o(.ctors)) 99 100 /* We don't want to include the .ctor section from 101 the crtend.o file until after the sorted ctors. 102 The .ctor section from the crtend file contains the 103 end of ctors marker and it must be last */ 104 105 KEEP (*(EXCLUDE_FILE (*crtend*.o) .ctors)) 106 KEEP (*(SORT(.ctors.*))) 107 KEEP (*(.ctors)) 108 __CTOR_END = .; 109 } > rom 110 111 .dtor ALIGN(4) : 112 { 113 __DTOR_START = .; 114 KEEP (*crtbegin*.o(.dtors)) 115 KEEP (*(EXCLUDE_FILE (*crtend*.o) .dtors)) 116 KEEP (*(SORT(.dtors.*))) 117 KEEP (*(.dtors)) 118 __DTOR_END = .; 119 } > rom 120 121 .data : 122 { 123 __DATA_START = .; 124 *(.data_4) *(.data_2) *(.data_1) *(.data) *(.data.*) *(.gnu.linkonce.d.*) 125 __DATA_END = .; 126 } > ram AT > rom 127 128 .bss (NOLOAD) : 129 { 130 __BSS_START = .; 131 *(.bss_4) *(.bss_2) *(.bss_1) *(.bss) *(COMMON) *(.bss.*) *(.gnu.linkonce.b.*) 132 __BSS_END = .; 133 } > ram 134 135 /* You may change the sizes of the following sections to fit the actual 136 size your program requires. 137 138 The heap and stack are aligned to the bus width, as a speed optimization 139 for accessing data located there. */ 140 141 .heap (NOLOAD) : 142 { 143 . = ALIGN(4); 144 __HEAP_START = .; 145 . += 0x2000; __HEAP_MAX = .; 146 } > ram 147 148 .stack (NOLOAD) : 149 { 150 . = ALIGN(4); 151 . += 0x6000; 152 __STACK_START = .; 153 } > ram 154 155 .istack (NOLOAD) : 156 { 157 . = ALIGN(4); 158 . += 0x100; 159 __ISTACK_START = .; 160 } > ram 161 162 .comment 0 : { *(.comment) } 163 164 EOF 165 166 . $srcdir/scripttempl/DWARF.sc 167 168 cat <<EOF 169 } 170 171 __DATA_IMAGE_START = LOADADDR(.data); 172 EOF 173