1/******************************************************************************* 2 * 3 * Filename: linker.cfg 4 * 5 * linker config file used for internal RAM or eeprom images at address 0. 6 * 7 * Revision information: 8 * 9 * 20AUG2004 kb_admin initial creation 10 * 12JAN2005 kb_admin move data to SDRAM 11 * 12 * BEGIN_KBDD_BLOCK 13 * No warranty, expressed or implied, is included with this software. It is 14 * provided "AS IS" and no warranty of any kind including statutory or aspects 15 * relating to merchantability or fitness for any purpose is provided. All 16 * intellectual property rights of others is maintained with the respective 17 * owners. This software is not copyrighted and is intended for reference 18 * only. 19 * END_BLOCK 20 * 21 * $FreeBSD$ 22 ******************************************************************************/ 23OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", 24 "elf32-littlearm") 25OUTPUT_ARCH(arm) 26ENTRY(start) 27SECTIONS 28{ 29 /* Read-only sections, merged into text segment: */ 30 . = 0; 31 .text : 32 { 33 *(.text) 34 *(.text.*) 35 *(.stub) 36 /* .gnu.warning sections are handled specially by elf32.em. */ 37 *(.gnu.warning) 38 *(.gnu.linkonce.t.*) 39 *(.glue_7t) *(.glue_7) 40 } 41 .interp : { *(.interp) } 42 .hash : { *(.hash) } 43 .dynsym : { *(.dynsym) } 44 .dynstr : { *(.dynstr) } 45 .gnu.version : { *(.gnu.version) } 46 .gnu.version_d : { *(.gnu.version_d) } 47 .gnu.version_r : { *(.gnu.version_r) } 48 .rel.init : { *(.rel.init) } 49 .rela.init : { *(.rela.init) } 50 .rel.text : 51 { 52 *(.rel.text) 53 *(.rel.text.*) 54 *(.rel.gnu.linkonce.t.*) 55 } 56 .rela.text : 57 { 58 *(.rela.text) 59 *(.rela.text.*) 60 *(.rela.gnu.linkonce.t.*) 61 } 62 .rel.fini : { *(.rel.fini) } 63 .rela.fini : { *(.rela.fini) } 64 .rel.rodata : 65 { 66 *(.rel.rodata) 67 *(.rel.rodata.*) 68 *(.rel.gnu.linkonce.r.*) 69 } 70 .rela.rodata : 71 { 72 *(.rela.rodata) 73 *(.rela.rodata.*) 74 *(.rela.gnu.linkonce.r.*) 75 } 76 .rel.data : 77 { 78 *(.rel.data) 79 *(.rel.data.*) 80 *(.rel.gnu.linkonce.d.*) 81 } 82 .rela.data : 83 { 84 *(.rela.data) 85 *(.rela.data.*) 86 *(.rela.gnu.linkonce.d.*) 87 } 88 .rel.ctors : { *(.rel.ctors) } 89 .rela.ctors : { *(.rela.ctors) } 90 .rel.dtors : { *(.rel.dtors) } 91 .rela.dtors : { *(.rela.dtors) } 92 .rel.got : { *(.rel.got) } 93 .rela.got : { *(.rela.got) } 94 .rel.sdata : 95 { 96 *(.rel.sdata) 97 *(.rel.sdata.*) 98 *(.rel.gnu.linkonce.s.*) 99 } 100 .rela.sdata : 101 { 102 *(.rela.sdata) 103 *(.rela.sdata.*) 104 *(.rela.gnu.linkonce.s.*) 105 } 106 .rel.sbss : 107 { 108 *(.rel.sbss) 109 *(.rel.sbss.*) 110 *(.rel.gnu.linkonce.sb.*) 111 } 112 .rela.sbss : 113 { 114 *(.rela.sbss) 115 *(.rela.sbss.*) 116 *(.rel.gnu.linkonce.sb.*) 117 } 118 .rel.sdata2 : 119 { 120 *(.rel.sdata2) 121 *(.rel.sdata2.*) 122 *(.rel.gnu.linkonce.s2.*) 123 } 124 .rela.sdata2 : 125 { 126 *(.rela.sdata2) 127 *(.rela.sdata2.*) 128 *(.rela.gnu.linkonce.s2.*) 129 } 130 .rel.sbss2 : 131 { 132 *(.rel.sbss2) 133 *(.rel.sbss2.*) 134 *(.rel.gnu.linkonce.sb2.*) 135 } 136 .rela.sbss2 : 137 { 138 *(.rela.sbss2) 139 *(.rela.sbss2.*) 140 *(.rela.gnu.linkonce.sb2.*) 141 } 142 .rel.bss : 143 { 144 *(.rel.bss) 145 *(.rel.bss.*) 146 *(.rel.gnu.linkonce.b.*) 147 } 148 .rela.bss : 149 { 150 *(.rela.bss) 151 *(.rela.bss.*) 152 *(.rela.gnu.linkonce.b.*) 153 } 154 .rel.plt : { *(.rel.plt) } 155 .rela.plt : { *(.rela.plt) } 156 .init : 157 { 158 KEEP (*(.init)) 159 } =0 160 .plt : { *(.plt) } 161 .fini : 162 { 163 KEEP (*(.fini)) 164 } =0 165 PROVIDE (__etext = .); 166 PROVIDE (_etext = .); 167 PROVIDE (etext = .); 168 .rodata : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r.*) } 169 .rodata1 : { *(.rodata1) } 170 .sdata2 : { *(.sdata2) *(.sdata2.*) *(.gnu.linkonce.s2.*) } 171 .sbss2 : { *(.sbss2) *(.sbss2.*) *(.gnu.linkonce.sb2.*) } 172 .data : 173 { 174 __data_start = . ; 175 *(.data) 176 *(.data.*) 177 *(.gnu.linkonce.d.*) 178 SORT(CONSTRUCTORS) 179 } 180 .data1 : { *(.data1) } 181 . = 0x21200000; 182 .eh_frame : { KEEP (*(.eh_frame)) } 183 .gcc_except_table : { *(.gcc_except_table) } 184 .ctors : 185 { 186 /* gcc uses crtbegin.o to find the start of 187 the constructors, so we make sure it is 188 first. Because this is a wildcard, it 189 doesn't matter if the user does not 190 actually link against crtbegin.o; the 191 linker won't look for a file to match a 192 wildcard. The wildcard also means that it 193 doesn't matter which directory crtbegin.o 194 is in. */ 195 KEEP (*crtbegin.o(.ctors)) 196 /* We don't want to include the .ctor section from 197 from the crtend.o file until after the sorted ctors. 198 The .ctor section from the crtend file contains the 199 end of ctors marker and it must be last */ 200 KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors)) 201 KEEP (*(SORT(.ctors.*))) 202 KEEP (*(.ctors)) 203 } 204 .dtors : 205 { 206 KEEP (*crtbegin.o(.dtors)) 207 KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors)) 208 KEEP (*(SORT(.dtors.*))) 209 KEEP (*(.dtors)) 210 } 211 .got : { *(.got.plt) *(.got) } 212 .dynamic : { *(.dynamic) } 213 /* We want the small data sections together, so single-instruction offsets 214 can access them all, and initialized data all before uninitialized, so 215 we can shorten the on-disk segment size. */ 216 .sdata : 217 { 218 *(.sdata) 219 *(.sdata.*) 220 *(.gnu.linkonce.s.*) 221 } 222 _edata = .; 223 PROVIDE (edata = .); 224 __bss_start = .; 225 __bss_start__ = .; 226 .sbss : 227 { 228 PROVIDE (__sbss_start = .); 229 PROVIDE (___sbss_start = .); 230 *(.dynsbss) 231 *(.sbss) 232 *(.sbss.*) 233 *(.gnu.linkonce.sb.*) 234 *(.scommon) 235 PROVIDE (__sbss_end = .); 236 PROVIDE (___sbss_end = .); 237 } 238 .bss : 239 { 240 *(.dynbss) 241 *(.bss) 242 *(.bss.*) 243 *(.gnu.linkonce.b.*) 244 *(COMMON) 245 /* Align here to ensure that the .bss section occupies space up to 246 _end. Align after .bss to ensure correct alignment even if the 247 .bss section disappears because there are no input sections. */ 248 . = ALIGN(32 / 8); 249 } 250 . = ALIGN(32 / 8); 251 _end = .; 252 _bss_end__ = . ; __bss_end__ = . ; __end__ = . ; 253 PROVIDE (end = .); 254 /* Stabs debugging sections. */ 255 .stab 0 : { *(.stab) } 256 .stabstr 0 : { *(.stabstr) } 257 .stab.excl 0 : { *(.stab.excl) } 258 .stab.exclstr 0 : { *(.stab.exclstr) } 259 .stab.index 0 : { *(.stab.index) } 260 .stab.indexstr 0 : { *(.stab.indexstr) } 261 .comment 0 : { *(.comment) } 262 /* DWARF debug sections. 263 Symbols in the DWARF debugging sections are relative to the beginning 264 of the section so we begin them at 0. */ 265 /* DWARF 1 */ 266 .debug 0 : { *(.debug) } 267 .line 0 : { *(.line) } 268 /* GNU DWARF 1 extensions */ 269 .debug_srcinfo 0 : { *(.debug_srcinfo) } 270 .debug_sfnames 0 : { *(.debug_sfnames) } 271 /* DWARF 1.1 and DWARF 2 */ 272 .debug_aranges 0 : { *(.debug_aranges) } 273 .debug_pubnames 0 : { *(.debug_pubnames) } 274 /* DWARF 2 */ 275 .debug_info 0 : { *(.debug_info) *(.gnu.linkonce.wi.*) } 276 .debug_abbrev 0 : { *(.debug_abbrev) } 277 .debug_line 0 : { *(.debug_line) } 278 .debug_frame 0 : { *(.debug_frame) } 279 .debug_str 0 : { *(.debug_str) } 280 .debug_loc 0 : { *(.debug_loc) } 281 .debug_macinfo 0 : { *(.debug_macinfo) } 282 /* SGI/MIPS DWARF 2 extensions */ 283 .debug_weaknames 0 : { *(.debug_weaknames) } 284 .debug_funcnames 0 : { *(.debug_funcnames) } 285 .debug_typenames 0 : { *(.debug_typenames) } 286 .debug_varnames 0 : { *(.debug_varnames) } 287 /* These must appear regardless of . */ 288} 289