1 1.9 chs /* $NetBSD: kern.ldscript,v 1.9 2007/06/04 04:53:44 chs Exp $ */ 2 1.2 mrg 3 1.2 mrg /* 4 1.2 mrg * Kernel linker script for NetBSD/sparc64. This script is based on 5 1.2 mrg * elf64_sparc.xn, but puts _etext after all of the read-only sections. 6 1.2 mrg */ 7 1.1 mrg OUTPUT_FORMAT("elf64-sparc", "elf64-sparc", 8 1.1 mrg "elf64-sparc") 9 1.1 mrg OUTPUT_ARCH(sparc:v9) 10 1.1 mrg ENTRY(_start) 11 1.1 mrg SEARCH_DIR(/usr/lib); 12 1.1 mrg /* Do we need any of these for elf? 13 1.1 mrg __DYNAMIC = 0; */ 14 1.1 mrg SECTIONS 15 1.1 mrg { 16 1.1 mrg /* Read-only sections, merged into text segment: */ 17 1.6 martin . = 0x100000 + SIZEOF_HEADERS; 18 1.1 mrg .interp : { *(.interp) } 19 1.1 mrg .hash : { *(.hash) } 20 1.1 mrg .dynsym : { *(.dynsym) } 21 1.1 mrg .dynstr : { *(.dynstr) } 22 1.1 mrg .gnu.version : { *(.gnu.version) } 23 1.1 mrg .gnu.version_d : { *(.gnu.version_d) } 24 1.1 mrg .gnu.version_r : { *(.gnu.version_r) } 25 1.1 mrg .rel.text : 26 1.1 mrg { *(.rel.text) *(.rel.gnu.linkonce.t*) } 27 1.1 mrg .rela.text : 28 1.1 mrg { *(.rela.text) *(.rela.gnu.linkonce.t*) } 29 1.1 mrg .rel.data : 30 1.1 mrg { *(.rel.data) *(.rel.gnu.linkonce.d*) } 31 1.1 mrg .rela.data : 32 1.1 mrg { *(.rela.data) *(.rela.gnu.linkonce.d*) } 33 1.1 mrg .rel.rodata : 34 1.1 mrg { *(.rel.rodata) *(.rel.gnu.linkonce.r*) } 35 1.1 mrg .rela.rodata : 36 1.1 mrg { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } 37 1.1 mrg .rel.got : { *(.rel.got) } 38 1.1 mrg .rela.got : { *(.rela.got) } 39 1.1 mrg .rel.ctors : { *(.rel.ctors) } 40 1.1 mrg .rela.ctors : { *(.rela.ctors) } 41 1.1 mrg .rel.dtors : { *(.rel.dtors) } 42 1.1 mrg .rela.dtors : { *(.rela.dtors) } 43 1.1 mrg .rel.init : { *(.rel.init) } 44 1.1 mrg .rela.init : { *(.rela.init) } 45 1.1 mrg .rel.fini : { *(.rel.fini) } 46 1.1 mrg .rela.fini : { *(.rela.fini) } 47 1.1 mrg .rel.bss : { *(.rel.bss) } 48 1.1 mrg .rela.bss : { *(.rela.bss) } 49 1.1 mrg .rel.plt : { *(.rel.plt) } 50 1.1 mrg .rela.plt : { *(.rela.plt) } 51 1.1 mrg .init : { *(.init) } =0x01000000 52 1.1 mrg .text : 53 1.1 mrg { 54 1.1 mrg *(.text) 55 1.1 mrg *(.stub) 56 1.1 mrg /* .gnu.warning sections are handled specially by elf32.em. */ 57 1.1 mrg *(.gnu.warning) 58 1.1 mrg *(.gnu.linkonce.t*) 59 1.1 mrg } =0x01000000 60 1.1 mrg .fini : { *(.fini) } =0x01000000 61 1.1 mrg .rodata : { *(.rodata) *(.gnu.linkonce.r*) } 62 1.1 mrg .rodata1 : { *(.rodata1) } 63 1.2 mrg _etext = .; 64 1.2 mrg PROVIDE (etext = .); 65 1.9 chs /* Adjust the address for the data segment. We push the data segment 66 1.9 chs up to the next 4MB boundary so that we can map the text with large 67 1.9 chs pages. */ 68 1.9 chs . = ALIGN(0x400000); 69 1.2 mrg kernel_data_start = .; 70 1.1 mrg .data : 71 1.1 mrg { 72 1.1 mrg *(.data) 73 1.1 mrg *(.gnu.linkonce.d*) 74 1.1 mrg CONSTRUCTORS 75 1.1 mrg } 76 1.1 mrg .data1 : { *(.data1) } 77 1.1 mrg .ctors : 78 1.1 mrg { 79 1.1 mrg *(.ctors) 80 1.1 mrg } 81 1.1 mrg .dtors : 82 1.1 mrg { 83 1.1 mrg *(.dtors) 84 1.1 mrg } 85 1.1 mrg .plt : { *(.plt) } 86 1.1 mrg .got : { *(.got.plt) *(.got) } 87 1.1 mrg .dynamic : { *(.dynamic) } 88 1.1 mrg /* We want the small data sections together, so single-instruction offsets 89 1.1 mrg can access them all, and initialized data all before uninitialized, so 90 1.1 mrg we can shorten the on-disk segment size. */ 91 1.1 mrg .sdata : { *(.sdata) } 92 1.1 mrg _edata = .; 93 1.1 mrg PROVIDE (edata = .); 94 1.1 mrg __bss_start = .; 95 1.1 mrg .sbss : { *(.sbss) *(.scommon) } 96 1.1 mrg .bss : 97 1.1 mrg { 98 1.1 mrg *(.dynbss) 99 1.1 mrg *(.bss) 100 1.1 mrg *(COMMON) 101 1.1 mrg } 102 1.1 mrg . = ALIGN(64 / 8); 103 1.1 mrg _end = . ; 104 1.1 mrg PROVIDE (end = .); 105 1.1 mrg /* Stabs debugging sections. */ 106 1.1 mrg .stab 0 : { *(.stab) } 107 1.1 mrg .stabstr 0 : { *(.stabstr) } 108 1.1 mrg .stab.excl 0 : { *(.stab.excl) } 109 1.1 mrg .stab.exclstr 0 : { *(.stab.exclstr) } 110 1.1 mrg .stab.index 0 : { *(.stab.index) } 111 1.1 mrg .stab.indexstr 0 : { *(.stab.indexstr) } 112 1.1 mrg .comment 0 : { *(.comment) } 113 1.1 mrg /* DWARF debug sections. 114 1.1 mrg Symbols in the DWARF debugging sections are relative to the beginning 115 1.1 mrg of the section so we begin them at 0. */ 116 1.1 mrg /* DWARF 1 */ 117 1.1 mrg .debug 0 : { *(.debug) } 118 1.1 mrg .line 0 : { *(.line) } 119 1.1 mrg /* GNU DWARF 1 extensions */ 120 1.1 mrg .debug_srcinfo 0 : { *(.debug_srcinfo) } 121 1.1 mrg .debug_sfnames 0 : { *(.debug_sfnames) } 122 1.1 mrg /* DWARF 1.1 and DWARF 2 */ 123 1.1 mrg .debug_aranges 0 : { *(.debug_aranges) } 124 1.1 mrg .debug_pubnames 0 : { *(.debug_pubnames) } 125 1.1 mrg /* DWARF 2 */ 126 1.1 mrg .debug_info 0 : { *(.debug_info) } 127 1.1 mrg .debug_abbrev 0 : { *(.debug_abbrev) } 128 1.1 mrg .debug_line 0 : { *(.debug_line) } 129 1.1 mrg .debug_frame 0 : { *(.debug_frame) } 130 1.1 mrg .debug_str 0 : { *(.debug_str) } 131 1.1 mrg .debug_loc 0 : { *(.debug_loc) } 132 1.1 mrg .debug_macinfo 0 : { *(.debug_macinfo) } 133 1.1 mrg /* SGI/MIPS DWARF 2 extensions */ 134 1.1 mrg .debug_weaknames 0 : { *(.debug_weaknames) } 135 1.1 mrg .debug_funcnames 0 : { *(.debug_funcnames) } 136 1.1 mrg .debug_typenames 0 : { *(.debug_typenames) } 137 1.1 mrg .debug_varnames 0 : { *(.debug_varnames) } 138 1.1 mrg /* These must appear regardless of . */ 139 1.8 martin .note.netbsd.ident : 140 1.8 martin { 141 1.8 martin KEEP(*(.note.netbsd.ident)); 142 1.8 martin } 143 1.1 mrg } 144