1 1.2.6.2 yamt /* Script for -N: mix text and data on same page; don't align data */ 2 1.2.6.2 yamt OUTPUT_ARCH(mips) 3 1.2.6.2 yamt ENTRY(__start) 4 1.2.6.2 yamt SEARCH_DIR("=/usr/lib"); 5 1.2.6.2 yamt SECTIONS 6 1.2.6.2 yamt { 7 1.2.6.2 yamt /* Read-only sections, merged into text segment: */ 8 1.2.6.2 yamt PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x20000000)); . = SEGMENT_START("text-segment", 0x20000000) + SIZEOF_HEADERS; 9 1.2.6.2 yamt .interp : { *(.interp) } 10 1.2.6.2 yamt .reginfo : { *(.reginfo) } 11 1.2.6.2 yamt .note.gnu.build-id : { *(.note.gnu.build-id) } 12 1.2.6.2 yamt .dynamic : { *(.dynamic) } 13 1.2.6.2 yamt .hash : { *(.hash) } 14 1.2.6.2 yamt .gnu.hash : { *(.gnu.hash) } 15 1.2.6.2 yamt .dynsym : { *(.dynsym) } 16 1.2.6.2 yamt .dynstr : { *(.dynstr) } 17 1.2.6.2 yamt .gnu.version : { *(.gnu.version) } 18 1.2.6.2 yamt .gnu.version_d : { *(.gnu.version_d) } 19 1.2.6.2 yamt .gnu.version_r : { *(.gnu.version_r) } 20 1.2.6.2 yamt .rel.init : { *(.rel.init) } 21 1.2.6.2 yamt .rela.init : { *(.rela.init) } 22 1.2.6.2 yamt .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } 23 1.2.6.2 yamt .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } 24 1.2.6.2 yamt .rel.fini : { *(.rel.fini) } 25 1.2.6.2 yamt .rela.fini : { *(.rela.fini) } 26 1.2.6.2 yamt .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } 27 1.2.6.2 yamt .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } 28 1.2.6.2 yamt .rel.data.rel.ro : { *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*) } 29 1.2.6.2 yamt .rela.data.rel.ro : { *(.rela.data.rel.ro* .rela.gnu.linkonce.d.rel.ro.*) } 30 1.2.6.2 yamt .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } 31 1.2.6.2 yamt .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } 32 1.2.6.2 yamt .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } 33 1.2.6.2 yamt .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } 34 1.2.6.2 yamt .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } 35 1.2.6.2 yamt .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } 36 1.2.6.2 yamt .rel.ctors : { *(.rel.ctors) } 37 1.2.6.2 yamt .rela.ctors : { *(.rela.ctors) } 38 1.2.6.2 yamt .rel.dtors : { *(.rel.dtors) } 39 1.2.6.2 yamt .rela.dtors : { *(.rela.dtors) } 40 1.2.6.2 yamt .rel.got : { *(.rel.got) } 41 1.2.6.2 yamt .rela.got : { *(.rela.got) } 42 1.2.6.2 yamt .rel.dyn : { *(.rel.dyn) } 43 1.2.6.2 yamt .rel.sdata : { *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*) } 44 1.2.6.2 yamt .rela.sdata : { *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*) } 45 1.2.6.2 yamt .rel.sbss : { *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*) } 46 1.2.6.2 yamt .rela.sbss : { *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*) } 47 1.2.6.2 yamt .rel.sdata2 : { *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*) } 48 1.2.6.2 yamt .rela.sdata2 : { *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*) } 49 1.2.6.2 yamt .rel.sbss2 : { *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*) } 50 1.2.6.2 yamt .rela.sbss2 : { *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*) } 51 1.2.6.2 yamt .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } 52 1.2.6.2 yamt .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } 53 1.2.6.2 yamt .rel.iplt : 54 1.2.6.2 yamt { 55 1.2.6.2 yamt PROVIDE_HIDDEN (__rel_iplt_start = .); 56 1.2.6.2 yamt *(.rel.iplt) 57 1.2.6.2 yamt PROVIDE_HIDDEN (__rel_iplt_end = .); 58 1.2.6.2 yamt } 59 1.2.6.2 yamt .rela.iplt : 60 1.2.6.2 yamt { 61 1.2.6.2 yamt PROVIDE_HIDDEN (__rela_iplt_start = .); 62 1.2.6.2 yamt *(.rela.iplt) 63 1.2.6.2 yamt PROVIDE_HIDDEN (__rela_iplt_end = .); 64 1.2.6.2 yamt } 65 1.2.6.2 yamt .rel.plt : 66 1.2.6.2 yamt { 67 1.2.6.2 yamt *(.rel.plt) 68 1.2.6.2 yamt } 69 1.2.6.2 yamt .rela.plt : 70 1.2.6.2 yamt { 71 1.2.6.2 yamt *(.rela.plt) 72 1.2.6.2 yamt } 73 1.2.6.2 yamt .init : 74 1.2.6.2 yamt { 75 1.2.6.2 yamt KEEP (*(.init)) 76 1.2.6.2 yamt } =0 77 1.2.6.2 yamt .plt : { *(.plt) } 78 1.2.6.2 yamt .iplt : { *(.iplt) } 79 1.2.6.2 yamt .text : 80 1.2.6.2 yamt { 81 1.2.6.2 yamt _ftext = . ; 82 1.2.6.2 yamt *(.text.unlikely .text.*_unlikely) 83 1.2.6.2 yamt *(.text.exit .text.exit.*) 84 1.2.6.2 yamt *(.text.startup .text.startup.*) 85 1.2.6.2 yamt *(.text.hot .text.hot.*) 86 1.2.6.2 yamt *(.text .stub .text.* .gnu.linkonce.t.*) 87 1.2.6.2 yamt /* .gnu.warning sections are handled specially by elf32.em. */ 88 1.2.6.2 yamt *(.gnu.warning) 89 1.2.6.2 yamt *(.mips16.fn.*) *(.mips16.call.*) 90 1.2.6.2 yamt } =0 91 1.2.6.2 yamt .fini : 92 1.2.6.2 yamt { 93 1.2.6.2 yamt KEEP (*(.fini)) 94 1.2.6.2 yamt } =0 95 1.2.6.2 yamt PROVIDE (__etext = .); 96 1.2.6.2 yamt PROVIDE (_etext = .); 97 1.2.6.2 yamt PROVIDE (etext = .); 98 1.2.6.2 yamt .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } 99 1.2.6.2 yamt .rodata1 : { *(.rodata1) } 100 1.2.6.2 yamt .sdata2 : 101 1.2.6.2 yamt { 102 1.2.6.2 yamt *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) 103 1.2.6.2 yamt } 104 1.2.6.2 yamt .sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) } 105 1.2.6.2 yamt .eh_frame_hdr : { *(.eh_frame_hdr) } 106 1.2.6.2 yamt .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } 107 1.2.6.2 yamt .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } 108 1.2.6.2 yamt /* Adjust the address for the data segment. We want to adjust up to 109 1.2.6.2 yamt the same address within the page on the next page up. */ 110 1.2.6.2 yamt . = .; 111 1.2.6.2 yamt /* Exception handling */ 112 1.2.6.2 yamt .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) } 113 1.2.6.2 yamt .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } 114 1.2.6.2 yamt /* Thread Local Storage sections */ 115 1.2.6.2 yamt .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } 116 1.2.6.2 yamt .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } 117 1.2.6.2 yamt .preinit_array : 118 1.2.6.2 yamt { 119 1.2.6.2 yamt PROVIDE_HIDDEN (__preinit_array_start = .); 120 1.2.6.2 yamt KEEP (*(.preinit_array)) 121 1.2.6.2 yamt PROVIDE_HIDDEN (__preinit_array_end = .); 122 1.2.6.2 yamt } 123 1.2.6.2 yamt .init_array : 124 1.2.6.2 yamt { 125 1.2.6.2 yamt PROVIDE_HIDDEN (__init_array_start = .); 126 1.2.6.2 yamt KEEP (*(SORT(.init_array.*))) 127 1.2.6.2 yamt KEEP (*(.init_array)) 128 1.2.6.2 yamt PROVIDE_HIDDEN (__init_array_end = .); 129 1.2.6.2 yamt } 130 1.2.6.2 yamt .fini_array : 131 1.2.6.2 yamt { 132 1.2.6.2 yamt PROVIDE_HIDDEN (__fini_array_start = .); 133 1.2.6.2 yamt KEEP (*(SORT(.fini_array.*))) 134 1.2.6.2 yamt KEEP (*(.fini_array)) 135 1.2.6.2 yamt PROVIDE_HIDDEN (__fini_array_end = .); 136 1.2.6.2 yamt } 137 1.2.6.2 yamt .ctors : 138 1.2.6.2 yamt { 139 1.2.6.2 yamt /* gcc uses crtbegin.o to find the start of 140 1.2.6.2 yamt the constructors, so we make sure it is 141 1.2.6.2 yamt first. Because this is a wildcard, it 142 1.2.6.2 yamt doesn't matter if the user does not 143 1.2.6.2 yamt actually link against crtbegin.o; the 144 1.2.6.2 yamt linker won't look for a file to match a 145 1.2.6.2 yamt wildcard. The wildcard also means that it 146 1.2.6.2 yamt doesn't matter which directory crtbegin.o 147 1.2.6.2 yamt is in. */ 148 1.2.6.2 yamt KEEP (*crtbegin.o(.ctors)) 149 1.2.6.2 yamt KEEP (*crtbegin?.o(.ctors)) 150 1.2.6.2 yamt /* We don't want to include the .ctor section from 151 1.2.6.2 yamt the crtend.o file until after the sorted ctors. 152 1.2.6.2 yamt The .ctor section from the crtend file contains the 153 1.2.6.2 yamt end of ctors marker and it must be last */ 154 1.2.6.2 yamt KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) 155 1.2.6.2 yamt KEEP (*(SORT(.ctors.*))) 156 1.2.6.2 yamt KEEP (*(.ctors)) 157 1.2.6.2 yamt } 158 1.2.6.2 yamt .dtors : 159 1.2.6.2 yamt { 160 1.2.6.2 yamt KEEP (*crtbegin.o(.dtors)) 161 1.2.6.2 yamt KEEP (*crtbegin?.o(.dtors)) 162 1.2.6.2 yamt KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) 163 1.2.6.2 yamt KEEP (*(SORT(.dtors.*))) 164 1.2.6.2 yamt KEEP (*(.dtors)) 165 1.2.6.2 yamt } 166 1.2.6.2 yamt .jcr : { KEEP (*(.jcr)) } 167 1.2.6.2 yamt .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) } 168 1.2.6.2 yamt .data : 169 1.2.6.2 yamt { 170 1.2.6.2 yamt _fdata = . ; 171 1.2.6.2 yamt *(.data .data.* .gnu.linkonce.d.*) 172 1.2.6.2 yamt SORT(CONSTRUCTORS) 173 1.2.6.2 yamt } 174 1.2.6.2 yamt .data1 : { *(.data1) } 175 1.2.6.2 yamt .got.plt : { *(.got.plt) } 176 1.2.6.2 yamt . = .; 177 1.2.6.2 yamt _gp = ALIGN(16) + 0x7ff0; 178 1.2.6.2 yamt .got : { *(.got) } 179 1.2.6.2 yamt /* We want the small data sections together, so single-instruction offsets 180 1.2.6.2 yamt can access them all, and initialized data all before uninitialized, so 181 1.2.6.2 yamt we can shorten the on-disk segment size. */ 182 1.2.6.2 yamt .sdata : 183 1.2.6.2 yamt { 184 1.2.6.2 yamt *(.sdata .sdata.* .gnu.linkonce.s.*) 185 1.2.6.2 yamt } 186 1.2.6.2 yamt .lit8 : { *(.lit8) } 187 1.2.6.2 yamt .lit4 : { *(.lit4) } 188 1.2.6.2 yamt _edata = .; PROVIDE (edata = .); 189 1.2.6.2 yamt __bss_start = .; 190 1.2.6.2 yamt _fbss = .; 191 1.2.6.2 yamt .sbss : 192 1.2.6.2 yamt { 193 1.2.6.2 yamt *(.dynsbss) 194 1.2.6.2 yamt *(.sbss .sbss.* .gnu.linkonce.sb.*) 195 1.2.6.2 yamt *(.scommon) 196 1.2.6.2 yamt } 197 1.2.6.2 yamt .bss : 198 1.2.6.2 yamt { 199 1.2.6.2 yamt *(.dynbss) 200 1.2.6.2 yamt *(.bss .bss.* .gnu.linkonce.b.*) 201 1.2.6.2 yamt *(COMMON) 202 1.2.6.2 yamt /* Align here to ensure that the .bss section occupies space up to 203 1.2.6.2 yamt _end. Align after .bss to ensure correct alignment even if the 204 1.2.6.2 yamt .bss section disappears because there are no input sections. 205 1.2.6.2 yamt FIXME: Why do we need it? When there is no .bss section, we don't 206 1.2.6.2 yamt pad the .data section. */ 207 1.2.6.2 yamt . = ALIGN(. != 0 ? 32 / 8 : 1); 208 1.2.6.2 yamt } 209 1.2.6.2 yamt . = ALIGN(32 / 8); 210 1.2.6.2 yamt . = ALIGN(32 / 8); 211 1.2.6.2 yamt _end = .; PROVIDE (end = .); 212 1.2.6.2 yamt /* Stabs debugging sections. */ 213 1.2.6.2 yamt .stab 0 : { *(.stab) } 214 1.2.6.2 yamt .stabstr 0 : { *(.stabstr) } 215 1.2.6.2 yamt .stab.excl 0 : { *(.stab.excl) } 216 1.2.6.2 yamt .stab.exclstr 0 : { *(.stab.exclstr) } 217 1.2.6.2 yamt .stab.index 0 : { *(.stab.index) } 218 1.2.6.2 yamt .stab.indexstr 0 : { *(.stab.indexstr) } 219 1.2.6.2 yamt .comment 0 : { *(.comment) } 220 1.2.6.2 yamt /* DWARF debug sections. 221 1.2.6.2 yamt Symbols in the DWARF debugging sections are relative to the beginning 222 1.2.6.2 yamt of the section so we begin them at 0. */ 223 1.2.6.2 yamt /* DWARF 1 */ 224 1.2.6.2 yamt .debug 0 : { *(.debug) } 225 1.2.6.2 yamt .line 0 : { *(.line) } 226 1.2.6.2 yamt /* GNU DWARF 1 extensions */ 227 1.2.6.2 yamt .debug_srcinfo 0 : { *(.debug_srcinfo) } 228 1.2.6.2 yamt .debug_sfnames 0 : { *(.debug_sfnames) } 229 1.2.6.2 yamt /* DWARF 1.1 and DWARF 2 */ 230 1.2.6.2 yamt .debug_aranges 0 : { *(.debug_aranges) } 231 1.2.6.2 yamt .debug_pubnames 0 : { *(.debug_pubnames) } 232 1.2.6.2 yamt /* DWARF 2 */ 233 1.2.6.2 yamt .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } 234 1.2.6.2 yamt .debug_abbrev 0 : { *(.debug_abbrev) } 235 1.2.6.2 yamt .debug_line 0 : { *(.debug_line) } 236 1.2.6.2 yamt .debug_frame 0 : { *(.debug_frame) } 237 1.2.6.2 yamt .debug_str 0 : { *(.debug_str) } 238 1.2.6.2 yamt .debug_loc 0 : { *(.debug_loc) } 239 1.2.6.2 yamt .debug_macinfo 0 : { *(.debug_macinfo) } 240 1.2.6.2 yamt /* SGI/MIPS DWARF 2 extensions */ 241 1.2.6.2 yamt .debug_weaknames 0 : { *(.debug_weaknames) } 242 1.2.6.2 yamt .debug_funcnames 0 : { *(.debug_funcnames) } 243 1.2.6.2 yamt .debug_typenames 0 : { *(.debug_typenames) } 244 1.2.6.2 yamt .debug_varnames 0 : { *(.debug_varnames) } 245 1.2.6.2 yamt /* DWARF 3 */ 246 1.2.6.2 yamt .debug_pubtypes 0 : { *(.debug_pubtypes) } 247 1.2.6.2 yamt .debug_ranges 0 : { *(.debug_ranges) } 248 1.2.6.2 yamt .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } 249 1.2.6.2 yamt .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } 250 1.2.6.2 yamt .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } 251 1.2.6.2 yamt .mdebug.abi32 : { KEEP(*(.mdebug.abi32)) } 252 1.2.6.2 yamt .mdebug.abiN32 : { KEEP(*(.mdebug.abiN32)) } 253 1.2.6.2 yamt .mdebug.abi64 : { KEEP(*(.mdebug.abi64)) } 254 1.2.6.2 yamt .mdebug.abiO64 : { KEEP(*(.mdebug.abiO64)) } 255 1.2.6.2 yamt .mdebug.eabi32 : { KEEP(*(.mdebug.eabi32)) } 256 1.2.6.2 yamt .mdebug.eabi64 : { KEEP(*(.mdebug.eabi64)) } 257 1.2.6.2 yamt .gcc_compiled_long32 : { KEEP(*(.gcc_compiled_long32)) } 258 1.2.6.2 yamt .gcc_compiled_long64 : { KEEP(*(.gcc_compiled_long64)) } 259 1.2.6.2 yamt /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } 260 1.2.6.2 yamt } 261