/* Default linker script, for normal executables */
OUTPUT_FORMAT("elf64-powerpc", "elf64-powerpc",
             "elf64-powerpc")
OUTPUT_ARCH(powerpc:common64)
ENTRY(_start)
SECTIONS
{
 /*  Read-only sections, merged into text segment.  Assumes the
     kernel Makefile sets the start address via -Ttext.  */
 .text      :
 {
   PROVIDE_HIDDEN (__eprol = .);
   *(.text)
   *(.text.unlikely .text.*_unlikely)
   *(.text.exit .text.exit.*)
   *(.text.startup .text.startup.*)
   *(.text.hot .text.hot.*)
   *(.text.* .gnu.linkonce.t.*)
   __stub_start = .;
   *(.stub)
   __stub_end = .;
   __stub_pmap_start = .;
   *(.stub.pmap)
   __stub_pmap_end = .;
   /* .gnu.warning sections are handled specially by elf32.em.  */
   *(.gnu.warning)
   *(.glink)
 } =0x60000000
 _etext = .;
 PROVIDE (__etext = .);
 PROVIDE (_etext = .);
 PROVIDE (etext = .);
 .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
 .rodata1        : { *(.rodata1) }
 .sdata2         :
 {
   *(.sdata2 .sdata2.* .gnu.linkonce.s2.*)
 }
 .sbss2          : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) }
 .jcr            : { KEEP (*(.jcr)) }
 . = DATA_SEGMENT_RELRO_END (0, .);
 .data           :
 {
   _fdata = .;
   *(.data .data.* .gnu.linkonce.d.*)
   SORT(CONSTRUCTORS)
 }
 .data1          : { *(.data1) }
 .toc1           : ALIGN(8) { *(.toc1) }
 .opd            : ALIGN(8) { KEEP (*(.opd)) }
 .branch_lt      : ALIGN(8) { *(.branch_lt) }
 .got          : ALIGN(8) { *(.got .toc) }
 /* 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.  */
 . = ALIGN(64);        /* COHERENCY UNIT */
 .data.cacheline_aligned       : { *(.data.cacheline_aligned) }
 . = ALIGN(64);        /* COHERENCY UNIT */
 .data.read_mostly             : { *(.data.read_mostly) }
 . = ALIGN(64);        /* COHERENCY UNIT */
 .sdata          :
 {
   *(.sdata .sdata.* .gnu.linkonce.s.*)
 }
 _edata = .; PROVIDE (edata = .);
 __bss_start = .;
 .tocbss         : ALIGN(8) { *(.tocbss)}
 .sbss           :
 {
   *(.dynsbss)
   *(.sbss .sbss.* .gnu.linkonce.sb.*)
   *(.scommon)
 }
 .plt            : { *(.plt) }
 .iplt           : { *(.iplt) }
 .bss            :
 {
   *(.dynbss)
   *(.bss .bss.* .gnu.linkonce.b.*)
   *(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.  */
   . = ALIGN(. != 0 ? 64 / 8 : 1);
 }
 . = ALIGN(64 / 8);
 . = ALIGN(64 / 8);
 _end = .; PROVIDE (end = .);
 . = DATA_SEGMENT_END (.);
}