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