linker.cfg revision 157873
155839Sasmodai/******************************************************************************* 255839Sasmodai * 355839Sasmodai * Filename: linker.cfg 455839Sasmodai * 555839Sasmodai * linker config file used for internal RAM or eeprom images at address 0. 655839Sasmodai * 755839Sasmodai * Revision information: 855839Sasmodai * 955839Sasmodai * 20AUG2004 kb_admin initial creation 1055839Sasmodai * 12JAN2005 kb_admin move data to SDRAM 1155839Sasmodai * 1255839Sasmodai * BEGIN_KBDD_BLOCK 1355839Sasmodai * No warranty, expressed or implied, is included with this software. It is 1455839Sasmodai * provided "AS IS" and no warranty of any kind including statutory or aspects 1555839Sasmodai * relating to merchantability or fitness for any purpose is provided. All 1655839Sasmodai * intellectual property rights of others is maintained with the respective 1755839Sasmodai * owners. This software is not copyrighted and is intended for reference 1855839Sasmodai * only. 1955839Sasmodai * END_BLOCK 2055839Sasmodai * 2155839Sasmodai * $FreeBSD: head/sys/boot/arm/at91/linker.cfg 157873 2006-04-19 17:16:49Z imp $ 2255839Sasmodai ******************************************************************************/ 2355839SasmodaiOUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", 2455839Sasmodai "elf32-littlearm") 2555839SasmodaiOUTPUT_ARCH(arm) 2655839SasmodaiENTRY(start) 2755839Sasmodai SEARCH_DIR(/usr/local/arm/2.95.3/arm-linux/lib); 2855839Sasmodai/* Do we need any of these for elf? 2955839Sasmodai __DYNAMIC = 0; */ 3055839SasmodaiSECTIONS 3155839Sasmodai{ 3255839Sasmodai /* Read-only sections, merged into text segment: */ 3355839Sasmodai . = 0; 3455839Sasmodai .text : 3555839Sasmodai { 3655839Sasmodai *(.text) 3755839Sasmodai *(.text.*) 3855839Sasmodai *(.stub) 3955839Sasmodai /* .gnu.warning sections are handled specially by elf32.em. */ 4055839Sasmodai *(.gnu.warning) 4155839Sasmodai *(.gnu.linkonce.t.*) 4255839Sasmodai *(.glue_7t) *(.glue_7) 4355839Sasmodai } 4455839Sasmodai .interp : { *(.interp) } 4555839Sasmodai .hash : { *(.hash) } 4655839Sasmodai .dynsym : { *(.dynsym) } 4755839Sasmodai .dynstr : { *(.dynstr) } 4855839Sasmodai .gnu.version : { *(.gnu.version) } 4955839Sasmodai .gnu.version_d : { *(.gnu.version_d) } 5055839Sasmodai .gnu.version_r : { *(.gnu.version_r) } 5155839Sasmodai .rel.init : { *(.rel.init) } 5255839Sasmodai .rela.init : { *(.rela.init) } 5355839Sasmodai .rel.text : 5455839Sasmodai { 5555839Sasmodai *(.rel.text) 5655839Sasmodai *(.rel.text.*) 5755839Sasmodai *(.rel.gnu.linkonce.t.*) 5855839Sasmodai } 5955839Sasmodai .rela.text : 6055839Sasmodai { 6155839Sasmodai *(.rela.text) 6255839Sasmodai *(.rela.text.*) 6355839Sasmodai *(.rela.gnu.linkonce.t.*) 6455839Sasmodai } 6555839Sasmodai .rel.fini : { *(.rel.fini) } 6655839Sasmodai .rela.fini : { *(.rela.fini) } 6755839Sasmodai .rel.rodata : 6855839Sasmodai { 6955839Sasmodai *(.rel.rodata) 7055839Sasmodai *(.rel.rodata.*) 7155839Sasmodai *(.rel.gnu.linkonce.r.*) 7255839Sasmodai } 7355839Sasmodai .rela.rodata : 7455839Sasmodai { 7555839Sasmodai *(.rela.rodata) 7655839Sasmodai *(.rela.rodata.*) 7755839Sasmodai *(.rela.gnu.linkonce.r.*) 7855839Sasmodai } 7955839Sasmodai .rel.data : 8055839Sasmodai { 8155839Sasmodai *(.rel.data) 8255839Sasmodai *(.rel.data.*) 8355839Sasmodai *(.rel.gnu.linkonce.d.*) 8455839Sasmodai } 8555839Sasmodai .rela.data : 8655839Sasmodai { 8755839Sasmodai *(.rela.data) 8855839Sasmodai *(.rela.data.*) 8955839Sasmodai *(.rela.gnu.linkonce.d.*) 9055839Sasmodai } 9155839Sasmodai .rel.ctors : { *(.rel.ctors) } 9255839Sasmodai .rela.ctors : { *(.rela.ctors) } 9355839Sasmodai .rel.dtors : { *(.rel.dtors) } 9455839Sasmodai .rela.dtors : { *(.rela.dtors) } 9555839Sasmodai .rel.got : { *(.rel.got) } 9655839Sasmodai .rela.got : { *(.rela.got) } 9755839Sasmodai .rel.sdata : 9855839Sasmodai { 9955839Sasmodai *(.rel.sdata) 10055839Sasmodai *(.rel.sdata.*) 10155839Sasmodai *(.rel.gnu.linkonce.s.*) 10255839Sasmodai } 10355839Sasmodai .rela.sdata : 10455839Sasmodai { 10555839Sasmodai *(.rela.sdata) 10655839Sasmodai *(.rela.sdata.*) 10755839Sasmodai *(.rela.gnu.linkonce.s.*) 10855839Sasmodai } 10955839Sasmodai .rel.sbss : 11055839Sasmodai { 11155839Sasmodai *(.rel.sbss) 11255839Sasmodai *(.rel.sbss.*) 11355839Sasmodai *(.rel.gnu.linkonce.sb.*) 11455839Sasmodai } 11555839Sasmodai .rela.sbss : 11655839Sasmodai { 11755839Sasmodai *(.rela.sbss) 11855839Sasmodai *(.rela.sbss.*) 11955839Sasmodai *(.rel.gnu.linkonce.sb.*) 12055839Sasmodai } 12155839Sasmodai .rel.sdata2 : 12255839Sasmodai { 12355839Sasmodai *(.rel.sdata2) 12455839Sasmodai *(.rel.sdata2.*) 12555839Sasmodai *(.rel.gnu.linkonce.s2.*) 12655839Sasmodai } 12755839Sasmodai .rela.sdata2 : 12855839Sasmodai { 12955839Sasmodai *(.rela.sdata2) 13055839Sasmodai *(.rela.sdata2.*) 13155839Sasmodai *(.rela.gnu.linkonce.s2.*) 13255839Sasmodai } 13355839Sasmodai .rel.sbss2 : 13455839Sasmodai { 13555839Sasmodai *(.rel.sbss2) 13655839Sasmodai *(.rel.sbss2.*) 13755839Sasmodai *(.rel.gnu.linkonce.sb2.*) 13855839Sasmodai } 13955839Sasmodai .rela.sbss2 : 14055839Sasmodai { 14155839Sasmodai *(.rela.sbss2) 14255839Sasmodai *(.rela.sbss2.*) 14355839Sasmodai *(.rela.gnu.linkonce.sb2.*) 14455839Sasmodai } 14555839Sasmodai .rel.bss : 14655839Sasmodai { 14755839Sasmodai *(.rel.bss) 14855839Sasmodai *(.rel.bss.*) 14955839Sasmodai *(.rel.gnu.linkonce.b.*) 15055839Sasmodai } 15155839Sasmodai .rela.bss : 15255839Sasmodai { 15355839Sasmodai *(.rela.bss) 15455839Sasmodai *(.rela.bss.*) 15555839Sasmodai *(.rela.gnu.linkonce.b.*) 15655839Sasmodai } 15755839Sasmodai .rel.plt : { *(.rel.plt) } 15855839Sasmodai .rela.plt : { *(.rela.plt) } 15955839Sasmodai .init : 16055839Sasmodai { 16155839Sasmodai KEEP (*(.init)) 16255839Sasmodai } =0 16355839Sasmodai .plt : { *(.plt) } 16455839Sasmodai .fini : 16555839Sasmodai { 16655839Sasmodai KEEP (*(.fini)) 16755839Sasmodai } =0 16855839Sasmodai PROVIDE (__etext = .); 16955839Sasmodai PROVIDE (_etext = .); 17055839Sasmodai PROVIDE (etext = .); 17155839Sasmodai .rodata : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r.*) } 17255839Sasmodai .rodata1 : { *(.rodata1) } 17355839Sasmodai .sdata2 : { *(.sdata2) *(.sdata2.*) *(.gnu.linkonce.s2.*) } 17455839Sasmodai .sbss2 : { *(.sbss2) *(.sbss2.*) *(.gnu.linkonce.sb2.*) } 17555839Sasmodai .data : 17655839Sasmodai { 17755839Sasmodai __data_start = . ; 17855839Sasmodai *(.data) 17955839Sasmodai *(.data.*) 18055839Sasmodai *(.gnu.linkonce.d.*) 18155839Sasmodai SORT(CONSTRUCTORS) 18255839Sasmodai } 18355839Sasmodai .data1 : { *(.data1) } 18455839Sasmodai . = 0x21200000; 18555839Sasmodai .eh_frame : { KEEP (*(.eh_frame)) } 18655839Sasmodai .gcc_except_table : { *(.gcc_except_table) } 18755839Sasmodai .ctors : 18855839Sasmodai { 18955839Sasmodai /* gcc uses crtbegin.o to find the start of 19055839Sasmodai the constructors, so we make sure it is 19155839Sasmodai first. Because this is a wildcard, it 19255839Sasmodai doesn't matter if the user does not 19355839Sasmodai actually link against crtbegin.o; the 19455839Sasmodai linker won't look for a file to match a 19555839Sasmodai wildcard. The wildcard also means that it 19655839Sasmodai doesn't matter which directory crtbegin.o 19755839Sasmodai is in. */ 19855839Sasmodai KEEP (*crtbegin.o(.ctors)) 19955839Sasmodai /* We don't want to include the .ctor section from 20055839Sasmodai from the crtend.o file until after the sorted ctors. 20155839Sasmodai The .ctor section from the crtend file contains the 20255839Sasmodai end of ctors marker and it must be last */ 20355839Sasmodai KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors)) 20455839Sasmodai KEEP (*(SORT(.ctors.*))) 20555839Sasmodai KEEP (*(.ctors)) 20655839Sasmodai } 20755839Sasmodai .dtors : 20855839Sasmodai { 20955839Sasmodai KEEP (*crtbegin.o(.dtors)) 21055839Sasmodai KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors)) 21155839Sasmodai KEEP (*(SORT(.dtors.*))) 21255839Sasmodai KEEP (*(.dtors)) 21355839Sasmodai } 21455839Sasmodai .got : { *(.got.plt) *(.got) } 21555839Sasmodai .dynamic : { *(.dynamic) } 21655839Sasmodai /* We want the small data sections together, so single-instruction offsets 21755839Sasmodai can access them all, and initialized data all before uninitialized, so 21855839Sasmodai we can shorten the on-disk segment size. */ 21955839Sasmodai .sdata : 22055839Sasmodai { 22155839Sasmodai *(.sdata) 22255839Sasmodai *(.sdata.*) 22355839Sasmodai *(.gnu.linkonce.s.*) 22455839Sasmodai } 22555839Sasmodai _edata = .; 22655839Sasmodai PROVIDE (edata = .); 22755839Sasmodai __bss_start = .; 22855839Sasmodai __bss_start__ = .; 22955839Sasmodai .sbss : 23055839Sasmodai { 23155839Sasmodai PROVIDE (__sbss_start = .); 23255839Sasmodai PROVIDE (___sbss_start = .); 23355839Sasmodai *(.dynsbss) 23455839Sasmodai *(.sbss) 23555839Sasmodai *(.sbss.*) 23655839Sasmodai *(.gnu.linkonce.sb.*) 23755839Sasmodai *(.scommon) 23855839Sasmodai PROVIDE (__sbss_end = .); 23955839Sasmodai PROVIDE (___sbss_end = .); 24055839Sasmodai } 24155839Sasmodai .bss : 24255839Sasmodai { 24355839Sasmodai *(.dynbss) 24455839Sasmodai *(.bss) 24555839Sasmodai *(.bss.*) 24655839Sasmodai *(.gnu.linkonce.b.*) 24755839Sasmodai *(COMMON) 24855839Sasmodai /* Align here to ensure that the .bss section occupies space up to 24955839Sasmodai _end. Align after .bss to ensure correct alignment even if the 25055839Sasmodai .bss section disappears because there are no input sections. */ 25155839Sasmodai . = ALIGN(32 / 8); 25255839Sasmodai } 25355839Sasmodai . = ALIGN(32 / 8); 25455839Sasmodai _end = .; 25555839Sasmodai _bss_end__ = . ; __bss_end__ = . ; __end__ = . ; 25655839Sasmodai PROVIDE (end = .); 25755839Sasmodai /* Stabs debugging sections. */ 25855839Sasmodai .stab 0 : { *(.stab) } 25955839Sasmodai .stabstr 0 : { *(.stabstr) } 26055839Sasmodai .stab.excl 0 : { *(.stab.excl) } 26155839Sasmodai .stab.exclstr 0 : { *(.stab.exclstr) } 26255839Sasmodai .stab.index 0 : { *(.stab.index) } 26355839Sasmodai .stab.indexstr 0 : { *(.stab.indexstr) } 26455839Sasmodai .comment 0 : { *(.comment) } 26555839Sasmodai /* DWARF debug sections. 26655839Sasmodai Symbols in the DWARF debugging sections are relative to the beginning 26755839Sasmodai of the section so we begin them at 0. */ 26855839Sasmodai /* DWARF 1 */ 26955839Sasmodai .debug 0 : { *(.debug) } 27055839Sasmodai .line 0 : { *(.line) } 27155839Sasmodai /* GNU DWARF 1 extensions */ 27255839Sasmodai .debug_srcinfo 0 : { *(.debug_srcinfo) } 27355839Sasmodai .debug_sfnames 0 : { *(.debug_sfnames) } 27455839Sasmodai /* DWARF 1.1 and DWARF 2 */ 27555839Sasmodai .debug_aranges 0 : { *(.debug_aranges) } 27655839Sasmodai .debug_pubnames 0 : { *(.debug_pubnames) } 27755839Sasmodai /* DWARF 2 */ 27855839Sasmodai .debug_info 0 : { *(.debug_info) *(.gnu.linkonce.wi.*) } 27955839Sasmodai .debug_abbrev 0 : { *(.debug_abbrev) } 28055839Sasmodai .debug_line 0 : { *(.debug_line) } 28155839Sasmodai .debug_frame 0 : { *(.debug_frame) } 28255839Sasmodai .debug_str 0 : { *(.debug_str) } 28355839Sasmodai .debug_loc 0 : { *(.debug_loc) } 28455839Sasmodai .debug_macinfo 0 : { *(.debug_macinfo) } 28555839Sasmodai /* SGI/MIPS DWARF 2 extensions */ 28655839Sasmodai .debug_weaknames 0 : { *(.debug_weaknames) } 28755839Sasmodai .debug_funcnames 0 : { *(.debug_funcnames) } 28855839Sasmodai .debug_typenames 0 : { *(.debug_typenames) } 28955839Sasmodai .debug_varnames 0 : { *(.debug_varnames) } 29055839Sasmodai /* These must appear regardless of . */ 29155839Sasmodai} 29255839Sasmodai