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