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