1*bcd04d1dSmatt/* $NetBSD: ldscript,v 1.5 2012/08/06 02:14:16 matt Exp $ */ 279290227Smycroft 379290227SmycroftOUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", 479290227Smycroft "elf32-littlearm") 579290227Smycroft 679290227SmycroftOUTPUT_ARCH(arm) 779290227SmycroftENTRY(FLASH) 879290227Smycroft 979290227SmycroftMEMORY 1079290227Smycroft{ 1179290227Smycroft /* We will locate the .text section in flash, and will run directly 1279290227Smycroft from there just long enough to relocate our .text and .data into 1379290227Smycroft a small chunk of SDRAM starting at (SDRAM + 1M). */ 1479290227Smycroft flash : o = 0x00000000, l = 16M 1579290227Smycroft sdram : o = 0x30000000, l = 1M /* kernel loads at 0x30200000 */ 1679290227Smycroft} 1779290227Smycroft 1879290227SmycroftSECTIONS 1979290227Smycroft{ 2079290227Smycroft FLASH = 0x00000000; 2179290227Smycroft SDRAM = 0x30000000; 2279290227Smycroft 23*bcd04d1dSmatt /DISCARD/ : { *(.ARM.attributes*) *(.ARM.exidx) } 24*bcd04d1dSmatt 2579290227Smycroft /* Read-only sections, merged into text segment: */ 2679290227Smycroft /* __text_store = FLASH; */ 2779290227Smycroft .text : 2879290227Smycroft AT (FLASH) 2979290227Smycroft { 3079290227Smycroft *(.vectors) 3179290227Smycroft __text_store = . - SDRAM; 3279290227Smycroft *(.text) 3379290227Smycroft *(.text.*) 3479290227Smycroft *(.stub) 3579290227Smycroft *(.glue_7t) *(.glue_7) 3679290227Smycroft *(.rodata) *(.rodata.*) 3779290227Smycroft } > sdram = 0 3879290227Smycroft PROVIDE (__etext = .); 3979290227Smycroft PROVIDE (_etext = .); 4079290227Smycroft PROVIDE (etext = .); 4179290227Smycroft __data_store = FLASH + SIZEOF(.text); 4279290227Smycroft .data : 4379290227Smycroft AT (LOADADDR(.text) + SIZEOF(.text)) 4479290227Smycroft { 4579290227Smycroft __data_start = . ; 4679290227Smycroft *(.data) 4779290227Smycroft *(.data.*) 4879290227Smycroft } > sdram 4979290227Smycroft .sdata : 5079290227Smycroft AT (LOADADDR(.data) + SIZEOF(.data)) 5179290227Smycroft { 5279290227Smycroft *(.sdata) 5379290227Smycroft *(.sdata.*) 54b6d96c3cSjoff . = ALIGN(32 / 8); 5579290227Smycroft } > sdram 5679290227Smycroft _edata = .; 5779290227Smycroft PROVIDE (edata = .); 5879290227Smycroft __bss_start = .; 5979290227Smycroft __bss_start__ = .; 6079290227Smycroft .sbss : 61dc89c663Sskrll AT (ADDR(.sbss)) 6279290227Smycroft { 6379290227Smycroft PROVIDE (__sbss_start = .); 6479290227Smycroft PROVIDE (___sbss_start = .); 6579290227Smycroft *(.dynsbss) 6679290227Smycroft *(.sbss) 6779290227Smycroft *(.sbss.*) 6879290227Smycroft *(.scommon) 6979290227Smycroft PROVIDE (__sbss_end = .); 7079290227Smycroft PROVIDE (___sbss_end = .); 7179290227Smycroft } > sdram 7279290227Smycroft .bss : 73dc89c663Sskrll AT (ADDR(.bss)) 7479290227Smycroft { 7579290227Smycroft *(.dynbss) 7679290227Smycroft *(.bss) 7779290227Smycroft *(.bss.*) 7879290227Smycroft *(COMMON) 7979290227Smycroft /* Align here to ensure that the .bss section occupies space up to 8079290227Smycroft _end. Align after .bss to ensure correct alignment even if the 8179290227Smycroft .bss section disappears because there are no input sections. */ 8279290227Smycroft . = ALIGN(32 / 8); 8379290227Smycroft } > sdram 8479290227Smycroft . = ALIGN(32 / 8); 8579290227Smycroft _end = .; 8679290227Smycroft _bss_end__ = . ; __bss_end__ = . ; __end__ = . ; 8779290227Smycroft PROVIDE (end = .); 8879290227Smycroft /* .image (FLASH + SIZEOF(.text) + SIZEOF(.data) + SIZEOF(.sdata)) : */ 8979290227Smycroft .image (FLASH + SIZEOF(.text) + SIZEOF(.data) + SIZEOF(.sdata)) : 9079290227Smycroft AT (LOADADDR(.sdata) + SIZEOF(.sdata)) 9179290227Smycroft { 9279290227Smycroft *(.image) 9379290227Smycroft } 9479290227Smycroft 9579290227Smycroft __rom_size__ = LOADADDR(.image) + SIZEOF(.image); 9679290227Smycroft} 9779290227Smycroft 98