1 1.5 matt /* $NetBSD: ldscript,v 1.5 2012/08/06 02:14:16 matt Exp $ */ 2 1.1 mycroft 3 1.1 mycroft OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", 4 1.1 mycroft "elf32-littlearm") 5 1.1 mycroft 6 1.1 mycroft OUTPUT_ARCH(arm) 7 1.1 mycroft ENTRY(FLASH) 8 1.1 mycroft 9 1.1 mycroft MEMORY 10 1.1 mycroft { 11 1.1 mycroft /* We will locate the .text section in flash, and will run directly 12 1.1 mycroft from there just long enough to relocate our .text and .data into 13 1.1 mycroft a small chunk of SDRAM starting at (SDRAM + 1M). */ 14 1.1 mycroft flash : o = 0x00000000, l = 16M 15 1.1 mycroft sdram : o = 0x30000000, l = 1M /* kernel loads at 0x30200000 */ 16 1.1 mycroft } 17 1.1 mycroft 18 1.1 mycroft SECTIONS 19 1.1 mycroft { 20 1.1 mycroft FLASH = 0x00000000; 21 1.1 mycroft SDRAM = 0x30000000; 22 1.1 mycroft 23 1.5 matt /DISCARD/ : { *(.ARM.attributes*) *(.ARM.exidx) } 24 1.5 matt 25 1.1 mycroft /* Read-only sections, merged into text segment: */ 26 1.1 mycroft /* __text_store = FLASH; */ 27 1.1 mycroft .text : 28 1.1 mycroft AT (FLASH) 29 1.1 mycroft { 30 1.1 mycroft *(.vectors) 31 1.1 mycroft __text_store = . - SDRAM; 32 1.1 mycroft *(.text) 33 1.1 mycroft *(.text.*) 34 1.1 mycroft *(.stub) 35 1.1 mycroft *(.glue_7t) *(.glue_7) 36 1.1 mycroft *(.rodata) *(.rodata.*) 37 1.1 mycroft } > sdram = 0 38 1.1 mycroft PROVIDE (__etext = .); 39 1.1 mycroft PROVIDE (_etext = .); 40 1.1 mycroft PROVIDE (etext = .); 41 1.1 mycroft __data_store = FLASH + SIZEOF(.text); 42 1.1 mycroft .data : 43 1.1 mycroft AT (LOADADDR(.text) + SIZEOF(.text)) 44 1.1 mycroft { 45 1.1 mycroft __data_start = . ; 46 1.1 mycroft *(.data) 47 1.1 mycroft *(.data.*) 48 1.1 mycroft } > sdram 49 1.1 mycroft .sdata : 50 1.1 mycroft AT (LOADADDR(.data) + SIZEOF(.data)) 51 1.1 mycroft { 52 1.1 mycroft *(.sdata) 53 1.1 mycroft *(.sdata.*) 54 1.2 joff . = ALIGN(32 / 8); 55 1.1 mycroft } > sdram 56 1.1 mycroft _edata = .; 57 1.1 mycroft PROVIDE (edata = .); 58 1.1 mycroft __bss_start = .; 59 1.1 mycroft __bss_start__ = .; 60 1.1 mycroft .sbss : 61 1.4 skrll AT (ADDR(.sbss)) 62 1.1 mycroft { 63 1.1 mycroft PROVIDE (__sbss_start = .); 64 1.1 mycroft PROVIDE (___sbss_start = .); 65 1.1 mycroft *(.dynsbss) 66 1.1 mycroft *(.sbss) 67 1.1 mycroft *(.sbss.*) 68 1.1 mycroft *(.scommon) 69 1.1 mycroft PROVIDE (__sbss_end = .); 70 1.1 mycroft PROVIDE (___sbss_end = .); 71 1.1 mycroft } > sdram 72 1.1 mycroft .bss : 73 1.4 skrll AT (ADDR(.bss)) 74 1.1 mycroft { 75 1.1 mycroft *(.dynbss) 76 1.1 mycroft *(.bss) 77 1.1 mycroft *(.bss.*) 78 1.1 mycroft *(COMMON) 79 1.1 mycroft /* Align here to ensure that the .bss section occupies space up to 80 1.1 mycroft _end. Align after .bss to ensure correct alignment even if the 81 1.1 mycroft .bss section disappears because there are no input sections. */ 82 1.1 mycroft . = ALIGN(32 / 8); 83 1.1 mycroft } > sdram 84 1.1 mycroft . = ALIGN(32 / 8); 85 1.1 mycroft _end = .; 86 1.1 mycroft _bss_end__ = . ; __bss_end__ = . ; __end__ = . ; 87 1.1 mycroft PROVIDE (end = .); 88 1.1 mycroft /* .image (FLASH + SIZEOF(.text) + SIZEOF(.data) + SIZEOF(.sdata)) : */ 89 1.1 mycroft .image (FLASH + SIZEOF(.text) + SIZEOF(.data) + SIZEOF(.sdata)) : 90 1.1 mycroft AT (LOADADDR(.sdata) + SIZEOF(.sdata)) 91 1.1 mycroft { 92 1.1 mycroft *(.image) 93 1.1 mycroft } 94 1.1 mycroft 95 1.1 mycroft __rom_size__ = LOADADDR(.image) + SIZEOF(.image); 96 1.1 mycroft } 97 1.1 mycroft 98