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