/* Script for ld -Ur: link w/out relocation, do create constructors */
OUTPUT_FORMAT("elf64-tradlittlemips", "elf64-tradbigmips",
	      "elf64-tradlittlemips")
OUTPUT_ARCH(mips)
SECTIONS
{
  /* Read-only sections, merged into text segment: */
  .MIPS.options : { *(.MIPS.options) }
  .note.gnu.build-id : { *(.note.gnu.build-id) }
  .dynamic       : { *(.dynamic) }
  .hash          : { *(.hash) }
  .gnu.hash      : { *(.gnu.hash) }
  .dynsym        : { *(.dynsym) }
  .dynstr        : { *(.dynstr) }
  .gnu.version   : { *(.gnu.version) }
  .gnu.version_d : { *(.gnu.version_d) }
  .gnu.version_r : { *(.gnu.version_r) }
  .rel.init      : { *(.rel.init) }
  .rela.init     : { *(.rela.init) }
  .rel.text      : { *(.rel.text) }
  .rela.text     : { *(.rela.text) }
  .rel.fini      : { *(.rel.fini) }
  .rela.fini     : { *(.rela.fini) }
  .rel.rodata    : { *(.rel.rodata) }
  .rela.rodata   : { *(.rela.rodata) }
  .rel.data.rel.ro  : { *(.rel.data.rel.ro) }
  .rela.data.rel.ro  : { *(.rela.data.rel.ro) }
  .rel.data      : { *(.rel.data) }
  .rela.data     : { *(.rela.data) }
  .rel.tdata	 : { *(.rel.tdata) }
  .rela.tdata	 : { *(.rela.tdata) }
  .rel.tbss	 : { *(.rel.tbss) }
  .rela.tbss	 : { *(.rela.tbss) }
  .rel.ctors     : { *(.rel.ctors) }
  .rela.ctors    : { *(.rela.ctors) }
  .rel.dtors     : { *(.rel.dtors) }
  .rela.dtors    : { *(.rela.dtors) }
  .rel.got       : { *(.rel.got) }
  .rela.got      : { *(.rela.got) }
  .rel.dyn      0 : { *(.rel.dyn) }
  .rel.sdata     : { *(.rel.sdata) }
  .rela.sdata    : { *(.rela.sdata) }
  .rel.sbss      : { *(.rel.sbss) }
  .rela.sbss     : { *(.rela.sbss) }
  .rel.sdata2    : { *(.rel.sdata2) }
  .rela.sdata2   : { *(.rela.sdata2) }
  .rel.sbss2     : { *(.rel.sbss2) }
  .rela.sbss2    : { *(.rela.sbss2) }
  .rel.bss       : { *(.rel.bss) }
  .rela.bss      : { *(.rela.bss) }
  .rel.iplt      :
    {
      *(.rel.iplt)
    }
  .rela.iplt     :
    {
      *(.rela.iplt)
    }
  .rel.plt       :
    {
      *(.rel.plt)
    }
  .rela.plt      :
    {
      *(.rela.plt)
    }
  .init          :
  {
    KEEP (*(.init))
  } =0
  .plt           : { *(.plt) }
  .iplt          : { *(.iplt) }
  .text          :
  {
    *(.text .stub)
    /* .gnu.warning sections are handled specially by elf32.em.  */
    *(.gnu.warning)
  } =0
  .fini          :
  {
    KEEP (*(.fini))
  } =0
  .rodata        : { *(.rodata) }
  .rodata1       : { *(.rodata1) }
  .sdata2        :
  {
    *(.sdata2)
  }
  .sbss2         : { *(.sbss2) }
  .eh_frame_hdr : { *(.eh_frame_hdr) }
  .eh_frame      : ONLY_IF_RO { KEEP (*(.eh_frame)) }
  .gcc_except_table  : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
  /* Adjust the address for the data segment.  We want to adjust up to
     the same address within the page on the next page up.  */
  /* Exception handling  */
  .eh_frame      : ONLY_IF_RW { KEEP (*(.eh_frame)) }
  .gcc_except_table  : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
  /* Thread Local Storage sections  */
  .tdata	 : { *(.tdata) }
  .tbss		 : { *(.tbss) }
  .preinit_array    :
  {
    KEEP (*(.preinit_array))
  }
  .init_array    :
  {
     KEEP (*(SORT(.init_array.*)))
     KEEP (*(.init_array))
  }
  .fini_array    :
  {
    KEEP (*(.fini_array))
    KEEP (*(SORT(.fini_array.*)))
  }
  .jcr           : { KEEP (*(.jcr)) }
  .data          :
  {
    *(.data)
    SORT(CONSTRUCTORS)
  }
  .data1         : { *(.data1) }
  .got.plt      0 : { *(.got.plt) }
  .got          0 : { *(.got) }
  /* We want the small data sections together, so single-instruction offsets
     can access them all, and initialized data all before uninitialized, so
     we can shorten the on-disk segment size.  */
  .sdata         :
  {
    *(.sdata)
  }
  .lit8         0 : { *(.lit8) }
  .lit4         0 : { *(.lit4) }
  .srdata       0 : { *(.srdata) }
  .sbss          :
  {
    *(.dynsbss)
    *(.sbss)
    *(.scommon)
  }
  .bss           :
  {
   *(.dynbss)
   *(.bss)
   *(COMMON)
   /* Align here to ensure that the .bss section occupies space up to
      _end.  Align after .bss to ensure correct alignment even if the
      .bss section disappears because there are no input sections.
      FIXME: Why do we need it? When there is no .bss section, we don't
      pad the .data section.  */
  }
  /* Stabs debugging sections.  */
  .stab          0 : { *(.stab) }
  .stabstr       0 : { *(.stabstr) }
  .stab.excl     0 : { *(.stab.excl) }
  .stab.exclstr  0 : { *(.stab.exclstr) }
  .stab.index    0 : { *(.stab.index) }
  .stab.indexstr 0 : { *(.stab.indexstr) }
  .comment       0 : { *(.comment) }
  /* DWARF debug sections.
     Symbols in the DWARF debugging sections are relative to the beginning
     of the section so we begin them at 0.  */
  /* DWARF 1 */
  .debug          0 : { *(.debug) }
  .line           0 : { *(.line) }
  /* GNU DWARF 1 extensions */
  .debug_srcinfo  0 : { *(.debug_srcinfo) }
  .debug_sfnames  0 : { *(.debug_sfnames) }
  /* DWARF 1.1 and DWARF 2 */
  .debug_aranges  0 : { *(.debug_aranges) }
  .debug_pubnames 0 : { *(.debug_pubnames) }
  /* DWARF 2 */
  .debug_info     0 : { *(.debug_info) }
  .debug_abbrev   0 : { *(.debug_abbrev) }
  .debug_line     0 : { *(.debug_line) }
  .debug_frame    0 : { *(.debug_frame) }
  .debug_str      0 : { *(.debug_str) }
  .debug_loc      0 : { *(.debug_loc) }
  .debug_macinfo  0 : { *(.debug_macinfo) }
  /* SGI/MIPS DWARF 2 extensions */
  .debug_weaknames 0 : { *(.debug_weaknames) }
  .debug_funcnames 0 : { *(.debug_funcnames) }
  .debug_typenames 0 : { *(.debug_typenames) }
  .debug_varnames  0 : { *(.debug_varnames) }
  /* DWARF 3 */
  .debug_pubtypes 0 : { *(.debug_pubtypes) }
  .debug_ranges   0 : { *(.debug_ranges) }
  .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
  .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
  .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
}
