1 1.8 matt /* $NetBSD: ldscript.evbarm,v 1.8 2014/01/30 15:36:44 matt Exp $ */ 2 1.1 bsh 3 1.1 bsh OUTPUT_ARCH(arm) 4 1.1 bsh ENTRY(KERNEL_BASE_phys) 5 1.1 bsh SECTIONS 6 1.1 bsh { 7 1.1 bsh KERNEL_BASE_phys = @KERNEL_BASE_PHYS@; 8 1.1 bsh KERNEL_BASE_virt = @KERNEL_BASE_VIRT@; 9 1.1 bsh 10 1.1 bsh /* Kernel start: */ 11 1.1 bsh .start (KERNEL_BASE_phys) : 12 1.1 bsh { 13 1.1 bsh *(.start) 14 1.1 bsh } =0 15 1.1 bsh 16 1.1 bsh /* Read-only sections, merged into text segment: */ 17 1.1 bsh .text (KERNEL_BASE_virt + SIZEOF(.start)) : 18 1.1 bsh AT (LOADADDR(.start) + SIZEOF(.start)) 19 1.1 bsh { 20 1.1 bsh *(.text) 21 1.1 bsh *(.text.*) 22 1.1 bsh *(.stub) 23 1.1 bsh *(.glue_7t) *(.glue_7) 24 1.1 bsh *(.rodata) *(.rodata.*) 25 1.1 bsh } =0 26 1.8 matt .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } 27 1.8 matt PROVIDE (__exidx_start = .); 28 1.8 matt .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } 29 1.8 matt PROVIDE (__exidx_end = .); 30 1.1 bsh PROVIDE (__etext = .); 31 1.1 bsh PROVIDE (_etext = .); 32 1.1 bsh PROVIDE (etext = .); 33 1.4 matt /* Adjust the address for the data segment to start on the next large page 34 1.1 bsh boundary. */ 35 1.4 matt . = ALIGN(0x10000); 36 1.1 bsh .data : 37 1.2 thorpej AT (LOADADDR(.text) + (ADDR(.data) - ADDR(.text))) 38 1.1 bsh { 39 1.1 bsh __data_start = . ; 40 1.1 bsh *(.data) 41 1.1 bsh *(.data.*) 42 1.1 bsh } 43 1.6 jakllsch .sdata : 44 1.2 thorpej AT (LOADADDR(.data) + (ADDR(.sdata) - ADDR(.data))) 45 1.1 bsh { 46 1.6 jakllsch *(.sdata) 47 1.1 bsh *(.sdata.*) 48 1.1 bsh } 49 1.7 matt . = ALIGN(8); 50 1.1 bsh _edata = .; 51 1.1 bsh PROVIDE (edata = .); 52 1.1 bsh __bss_start = .; 53 1.1 bsh __bss_start__ = .; 54 1.1 bsh .sbss : 55 1.5 rafal AT (LOADADDR(.sdata) + (ADDR(.sbss) - ADDR(.sdata))) 56 1.1 bsh { 57 1.1 bsh PROVIDE (__sbss_start = .); 58 1.1 bsh PROVIDE (___sbss_start = .); 59 1.1 bsh *(.dynsbss) 60 1.1 bsh *(.sbss) 61 1.1 bsh *(.sbss.*) 62 1.1 bsh *(.scommon) 63 1.1 bsh PROVIDE (__sbss_end = .); 64 1.1 bsh PROVIDE (___sbss_end = .); 65 1.1 bsh } 66 1.1 bsh .bss : 67 1.5 rafal AT (LOADADDR(.sbss) + (ADDR(.bss) - ADDR(.sbss))) 68 1.1 bsh { 69 1.1 bsh *(.dynbss) 70 1.1 bsh *(.bss) 71 1.1 bsh *(.bss.*) 72 1.1 bsh *(COMMON) 73 1.1 bsh /* Align here to ensure that the .bss section occupies space up to 74 1.1 bsh _end. Align after .bss to ensure correct alignment even if the 75 1.1 bsh .bss section disappears because there are no input sections. */ 76 1.1 bsh . = ALIGN(32 / 8); 77 1.1 bsh } 78 1.1 bsh . = ALIGN(32 / 8); 79 1.1 bsh _end = .; 80 1.1 bsh _bss_end__ = . ; __bss_end__ = . ; __end__ = . ; 81 1.1 bsh PROVIDE (end = .); 82 1.1 bsh } 83