11.5Smatt/* $NetBSD: ldscript,v 1.5 2012/08/06 02:14:16 matt Exp $ */ 21.1Smycroft 31.1SmycroftOUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", 41.1Smycroft "elf32-littlearm") 51.1Smycroft 61.1SmycroftOUTPUT_ARCH(arm) 71.1SmycroftENTRY(FLASH) 81.1Smycroft 91.1SmycroftMEMORY 101.1Smycroft{ 111.1Smycroft /* We will locate the .text section in flash, and will run directly 121.1Smycroft from there just long enough to relocate our .text and .data into 131.1Smycroft a small chunk of SDRAM starting at (SDRAM + 1M). */ 141.1Smycroft flash : o = 0x00000000, l = 16M 151.1Smycroft sdram : o = 0x30000000, l = 1M /* kernel loads at 0x30200000 */ 161.1Smycroft} 171.1Smycroft 181.1SmycroftSECTIONS 191.1Smycroft{ 201.1Smycroft FLASH = 0x00000000; 211.1Smycroft SDRAM = 0x30000000; 221.1Smycroft 231.5Smatt /DISCARD/ : { *(.ARM.attributes*) *(.ARM.exidx) } 241.5Smatt 251.1Smycroft /* Read-only sections, merged into text segment: */ 261.1Smycroft /* __text_store = FLASH; */ 271.1Smycroft .text : 281.1Smycroft AT (FLASH) 291.1Smycroft { 301.1Smycroft *(.vectors) 311.1Smycroft __text_store = . - SDRAM; 321.1Smycroft *(.text) 331.1Smycroft *(.text.*) 341.1Smycroft *(.stub) 351.1Smycroft *(.glue_7t) *(.glue_7) 361.1Smycroft *(.rodata) *(.rodata.*) 371.1Smycroft } > sdram = 0 381.1Smycroft PROVIDE (__etext = .); 391.1Smycroft PROVIDE (_etext = .); 401.1Smycroft PROVIDE (etext = .); 411.1Smycroft __data_store = FLASH + SIZEOF(.text); 421.1Smycroft .data : 431.1Smycroft AT (LOADADDR(.text) + SIZEOF(.text)) 441.1Smycroft { 451.1Smycroft __data_start = . ; 461.1Smycroft *(.data) 471.1Smycroft *(.data.*) 481.1Smycroft } > sdram 491.1Smycroft .sdata : 501.1Smycroft AT (LOADADDR(.data) + SIZEOF(.data)) 511.1Smycroft { 521.1Smycroft *(.sdata) 531.1Smycroft *(.sdata.*) 541.2Sjoff . = ALIGN(32 / 8); 551.1Smycroft } > sdram 561.1Smycroft _edata = .; 571.1Smycroft PROVIDE (edata = .); 581.1Smycroft __bss_start = .; 591.1Smycroft __bss_start__ = .; 601.1Smycroft .sbss : 611.4Sskrll AT (ADDR(.sbss)) 621.1Smycroft { 631.1Smycroft PROVIDE (__sbss_start = .); 641.1Smycroft PROVIDE (___sbss_start = .); 651.1Smycroft *(.dynsbss) 661.1Smycroft *(.sbss) 671.1Smycroft *(.sbss.*) 681.1Smycroft *(.scommon) 691.1Smycroft PROVIDE (__sbss_end = .); 701.1Smycroft PROVIDE (___sbss_end = .); 711.1Smycroft } > sdram 721.1Smycroft .bss : 731.4Sskrll AT (ADDR(.bss)) 741.1Smycroft { 751.1Smycroft *(.dynbss) 761.1Smycroft *(.bss) 771.1Smycroft *(.bss.*) 781.1Smycroft *(COMMON) 791.1Smycroft /* Align here to ensure that the .bss section occupies space up to 801.1Smycroft _end. Align after .bss to ensure correct alignment even if the 811.1Smycroft .bss section disappears because there are no input sections. */ 821.1Smycroft . = ALIGN(32 / 8); 831.1Smycroft } > sdram 841.1Smycroft . = ALIGN(32 / 8); 851.1Smycroft _end = .; 861.1Smycroft _bss_end__ = . ; __bss_end__ = . ; __end__ = . ; 871.1Smycroft PROVIDE (end = .); 881.1Smycroft /* .image (FLASH + SIZEOF(.text) + SIZEOF(.data) + SIZEOF(.sdata)) : */ 891.1Smycroft .image (FLASH + SIZEOF(.text) + SIZEOF(.data) + SIZEOF(.sdata)) : 901.1Smycroft AT (LOADADDR(.sdata) + SIZEOF(.sdata)) 911.1Smycroft { 921.1Smycroft *(.image) 931.1Smycroft } 941.1Smycroft 951.1Smycroft __rom_size__ = LOADADDR(.image) + SIZEOF(.image); 961.1Smycroft} 971.1Smycroft 98