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