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