11.1Smrg/* Script for -N: mix text and data on same page; don't align data */ 21.1SmrgOUTPUT_ARCH(mips) 31.1SmrgENTRY(__start) 41.1SmrgSEARCH_DIR("=/usr/lib"); 51.1SmrgSECTIONS 61.1Smrg{ 71.1Smrg /* Read-only sections, merged into text segment: */ 81.1Smrg PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x20000000)); . = SEGMENT_START("text-segment", 0x20000000) + SIZEOF_HEADERS; 91.1Smrg .interp : { *(.interp) } 101.1Smrg .reginfo : { *(.reginfo) } 111.1Smrg .note.gnu.build-id : { *(.note.gnu.build-id) } 121.1Smrg .dynamic : { *(.dynamic) } 131.1Smrg .hash : { *(.hash) } 141.1Smrg .gnu.hash : { *(.gnu.hash) } 151.1Smrg .dynsym : { *(.dynsym) } 161.1Smrg .dynstr : { *(.dynstr) } 171.1Smrg .gnu.version : { *(.gnu.version) } 181.1Smrg .gnu.version_d : { *(.gnu.version_d) } 191.1Smrg .gnu.version_r : { *(.gnu.version_r) } 201.1Smrg .rel.init : { *(.rel.init) } 211.1Smrg .rela.init : { *(.rela.init) } 221.1Smrg .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } 231.1Smrg .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } 241.1Smrg .rel.fini : { *(.rel.fini) } 251.1Smrg .rela.fini : { *(.rela.fini) } 261.1Smrg .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } 271.1Smrg .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } 281.1Smrg .rel.data.rel.ro : { *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*) } 291.1Smrg .rela.data.rel.ro : { *(.rela.data.rel.ro* .rela.gnu.linkonce.d.rel.ro.*) } 301.1Smrg .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } 311.1Smrg .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } 321.1Smrg .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } 331.1Smrg .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } 341.1Smrg .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } 351.1Smrg .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } 361.1Smrg .rel.ctors : { *(.rel.ctors) } 371.1Smrg .rela.ctors : { *(.rela.ctors) } 381.1Smrg .rel.dtors : { *(.rel.dtors) } 391.1Smrg .rela.dtors : { *(.rela.dtors) } 401.1Smrg .rel.got : { *(.rel.got) } 411.1Smrg .rela.got : { *(.rela.got) } 421.1Smrg .rel.dyn : { *(.rel.dyn) } 431.1Smrg .rel.sdata : { *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*) } 441.1Smrg .rela.sdata : { *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*) } 451.1Smrg .rel.sbss : { *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*) } 461.1Smrg .rela.sbss : { *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*) } 471.1Smrg .rel.sdata2 : { *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*) } 481.1Smrg .rela.sdata2 : { *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*) } 491.1Smrg .rel.sbss2 : { *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*) } 501.1Smrg .rela.sbss2 : { *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*) } 511.1Smrg .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } 521.1Smrg .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } 531.1Smrg .rel.iplt : 541.1Smrg { 551.1Smrg PROVIDE_HIDDEN (__rel_iplt_start = .); 561.1Smrg *(.rel.iplt) 571.1Smrg PROVIDE_HIDDEN (__rel_iplt_end = .); 581.1Smrg } 591.1Smrg .rela.iplt : 601.1Smrg { 611.1Smrg PROVIDE_HIDDEN (__rela_iplt_start = .); 621.1Smrg *(.rela.iplt) 631.1Smrg PROVIDE_HIDDEN (__rela_iplt_end = .); 641.1Smrg } 651.1Smrg .rel.plt : 661.1Smrg { 671.1Smrg *(.rel.plt) 681.1Smrg } 691.1Smrg .rela.plt : 701.1Smrg { 711.1Smrg *(.rela.plt) 721.1Smrg } 731.1Smrg .init : 741.1Smrg { 751.1Smrg KEEP (*(.init)) 761.1Smrg } =0 771.1Smrg .plt : { *(.plt) } 781.1Smrg .iplt : { *(.iplt) } 791.1Smrg .text : 801.1Smrg { 811.1Smrg _ftext = . ; 821.1Smrg *(.text.unlikely .text.*_unlikely) 831.1Smrg *(.text.exit .text.exit.*) 841.1Smrg *(.text.startup .text.startup.*) 851.1Smrg *(.text.hot .text.hot.*) 861.1Smrg *(.text .stub .text.* .gnu.linkonce.t.*) 871.1Smrg /* .gnu.warning sections are handled specially by elf32.em. */ 881.1Smrg *(.gnu.warning) 891.1Smrg *(.mips16.fn.*) *(.mips16.call.*) 901.1Smrg } =0 911.1Smrg .fini : 921.1Smrg { 931.1Smrg KEEP (*(.fini)) 941.1Smrg } =0 951.1Smrg PROVIDE (__etext = .); 961.1Smrg PROVIDE (_etext = .); 971.1Smrg PROVIDE (etext = .); 981.1Smrg .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } 991.1Smrg .rodata1 : { *(.rodata1) } 1001.1Smrg .sdata2 : 1011.1Smrg { 1021.1Smrg *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) 1031.1Smrg } 1041.1Smrg .sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) } 1051.1Smrg .eh_frame_hdr : { *(.eh_frame_hdr) } 1061.1Smrg .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } 1071.1Smrg .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } 1081.1Smrg /* Adjust the address for the data segment. We want to adjust up to 1091.1Smrg the same address within the page on the next page up. */ 1101.1Smrg . = .; 1111.1Smrg /* Exception handling */ 1121.1Smrg .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) } 1131.1Smrg .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } 1141.1Smrg /* Thread Local Storage sections */ 1151.1Smrg .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } 1161.1Smrg .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } 1171.1Smrg .preinit_array : 1181.1Smrg { 1191.1Smrg PROVIDE_HIDDEN (__preinit_array_start = .); 1201.1Smrg KEEP (*(.preinit_array)) 1211.1Smrg PROVIDE_HIDDEN (__preinit_array_end = .); 1221.1Smrg } 1231.1Smrg .init_array : 1241.1Smrg { 1251.1Smrg PROVIDE_HIDDEN (__init_array_start = .); 1261.1Smrg KEEP (*(SORT(.init_array.*))) 1271.1Smrg KEEP (*(.init_array)) 1281.1Smrg PROVIDE_HIDDEN (__init_array_end = .); 1291.1Smrg } 1301.1Smrg .fini_array : 1311.1Smrg { 1321.1Smrg PROVIDE_HIDDEN (__fini_array_start = .); 1331.1Smrg KEEP (*(SORT(.fini_array.*))) 1341.1Smrg KEEP (*(.fini_array)) 1351.1Smrg PROVIDE_HIDDEN (__fini_array_end = .); 1361.1Smrg } 1371.1Smrg .ctors : 1381.1Smrg { 1391.1Smrg /* gcc uses crtbegin.o to find the start of 1401.1Smrg the constructors, so we make sure it is 1411.1Smrg first. Because this is a wildcard, it 1421.1Smrg doesn't matter if the user does not 1431.1Smrg actually link against crtbegin.o; the 1441.1Smrg linker won't look for a file to match a 1451.1Smrg wildcard. The wildcard also means that it 1461.1Smrg doesn't matter which directory crtbegin.o 1471.1Smrg is in. */ 1481.1Smrg KEEP (*crtbegin.o(.ctors)) 1491.1Smrg KEEP (*crtbegin?.o(.ctors)) 1501.1Smrg /* We don't want to include the .ctor section from 1511.1Smrg the crtend.o file until after the sorted ctors. 1521.1Smrg The .ctor section from the crtend file contains the 1531.1Smrg end of ctors marker and it must be last */ 1541.1Smrg KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) 1551.1Smrg KEEP (*(SORT(.ctors.*))) 1561.1Smrg KEEP (*(.ctors)) 1571.1Smrg } 1581.1Smrg .dtors : 1591.1Smrg { 1601.1Smrg KEEP (*crtbegin.o(.dtors)) 1611.1Smrg KEEP (*crtbegin?.o(.dtors)) 1621.1Smrg KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) 1631.1Smrg KEEP (*(SORT(.dtors.*))) 1641.1Smrg KEEP (*(.dtors)) 1651.1Smrg } 1661.1Smrg .jcr : { KEEP (*(.jcr)) } 1671.1Smrg .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) } 1681.1Smrg .data : 1691.1Smrg { 1701.1Smrg _fdata = . ; 1711.1Smrg *(.data .data.* .gnu.linkonce.d.*) 1721.1Smrg SORT(CONSTRUCTORS) 1731.1Smrg } 1741.1Smrg .data1 : { *(.data1) } 1751.1Smrg .got.plt : { *(.got.plt) } 1761.1Smrg . = .; 1771.1Smrg _gp = ALIGN(16) + 0x7ff0; 1781.1Smrg .got : { *(.got) } 1791.1Smrg /* We want the small data sections together, so single-instruction offsets 1801.1Smrg can access them all, and initialized data all before uninitialized, so 1811.1Smrg we can shorten the on-disk segment size. */ 1821.1Smrg .sdata : 1831.1Smrg { 1841.1Smrg *(.sdata .sdata.* .gnu.linkonce.s.*) 1851.1Smrg } 1861.1Smrg .lit8 : { *(.lit8) } 1871.1Smrg .lit4 : { *(.lit4) } 1881.1Smrg _edata = .; PROVIDE (edata = .); 1891.1Smrg __bss_start = .; 1901.1Smrg _fbss = .; 1911.1Smrg .sbss : 1921.1Smrg { 1931.1Smrg *(.dynsbss) 1941.1Smrg *(.sbss .sbss.* .gnu.linkonce.sb.*) 1951.1Smrg *(.scommon) 1961.1Smrg } 1971.1Smrg .bss : 1981.1Smrg { 1991.1Smrg *(.dynbss) 2001.1Smrg *(.bss .bss.* .gnu.linkonce.b.*) 2011.1Smrg *(COMMON) 2021.1Smrg /* Align here to ensure that the .bss section occupies space up to 2031.1Smrg _end. Align after .bss to ensure correct alignment even if the 2041.1Smrg .bss section disappears because there are no input sections. 2051.1Smrg FIXME: Why do we need it? When there is no .bss section, we don't 2061.1Smrg pad the .data section. */ 2071.1Smrg . = ALIGN(. != 0 ? 32 / 8 : 1); 2081.1Smrg } 2091.1Smrg . = ALIGN(32 / 8); 2101.1Smrg . = ALIGN(32 / 8); 2111.1Smrg _end = .; PROVIDE (end = .); 2121.1Smrg /* Stabs debugging sections. */ 2131.1Smrg .stab 0 : { *(.stab) } 2141.1Smrg .stabstr 0 : { *(.stabstr) } 2151.1Smrg .stab.excl 0 : { *(.stab.excl) } 2161.1Smrg .stab.exclstr 0 : { *(.stab.exclstr) } 2171.1Smrg .stab.index 0 : { *(.stab.index) } 2181.1Smrg .stab.indexstr 0 : { *(.stab.indexstr) } 2191.1Smrg .comment 0 : { *(.comment) } 2201.1Smrg /* DWARF debug sections. 2211.1Smrg Symbols in the DWARF debugging sections are relative to the beginning 2221.1Smrg of the section so we begin them at 0. */ 2231.1Smrg /* DWARF 1 */ 2241.1Smrg .debug 0 : { *(.debug) } 2251.1Smrg .line 0 : { *(.line) } 2261.1Smrg /* GNU DWARF 1 extensions */ 2271.1Smrg .debug_srcinfo 0 : { *(.debug_srcinfo) } 2281.1Smrg .debug_sfnames 0 : { *(.debug_sfnames) } 2291.1Smrg /* DWARF 1.1 and DWARF 2 */ 2301.1Smrg .debug_aranges 0 : { *(.debug_aranges) } 2311.1Smrg .debug_pubnames 0 : { *(.debug_pubnames) } 2321.1Smrg /* DWARF 2 */ 2331.1Smrg .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } 2341.1Smrg .debug_abbrev 0 : { *(.debug_abbrev) } 2351.1Smrg .debug_line 0 : { *(.debug_line) } 2361.1Smrg .debug_frame 0 : { *(.debug_frame) } 2371.1Smrg .debug_str 0 : { *(.debug_str) } 2381.1Smrg .debug_loc 0 : { *(.debug_loc) } 2391.1Smrg .debug_macinfo 0 : { *(.debug_macinfo) } 2401.1Smrg /* SGI/MIPS DWARF 2 extensions */ 2411.1Smrg .debug_weaknames 0 : { *(.debug_weaknames) } 2421.1Smrg .debug_funcnames 0 : { *(.debug_funcnames) } 2431.1Smrg .debug_typenames 0 : { *(.debug_typenames) } 2441.1Smrg .debug_varnames 0 : { *(.debug_varnames) } 2451.1Smrg /* DWARF 3 */ 2461.1Smrg .debug_pubtypes 0 : { *(.debug_pubtypes) } 2471.1Smrg .debug_ranges 0 : { *(.debug_ranges) } 2481.1Smrg .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } 2491.1Smrg .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } 2501.1Smrg .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } 2511.1Smrg .mdebug.abi32 : { KEEP(*(.mdebug.abi32)) } 2521.1Smrg .mdebug.abiN32 : { KEEP(*(.mdebug.abiN32)) } 2531.1Smrg .mdebug.abi64 : { KEEP(*(.mdebug.abi64)) } 2541.1Smrg .mdebug.abiO64 : { KEEP(*(.mdebug.abiO64)) } 2551.1Smrg .mdebug.eabi32 : { KEEP(*(.mdebug.eabi32)) } 2561.1Smrg .mdebug.eabi64 : { KEEP(*(.mdebug.eabi64)) } 2571.1Smrg .gcc_compiled_long32 : { KEEP(*(.gcc_compiled_long32)) } 2581.1Smrg .gcc_compiled_long64 : { KEEP(*(.gcc_compiled_long64)) } 2591.1Smrg /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } 2601.1Smrg} 261