Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

/* 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 (.);
}