/* ld script to make Meta Linux kernel */

#include <asm/thread_info.h>
#include <asm/page.h>
#include <asm/cache.h>

#include <asm-generic/vmlinux.lds.h>

OUTPUT_FORMAT("elf32-metag", "elf32-metag", "elf32-metag")
OUTPUT_ARCH(metag)
ENTRY(__start)

_jiffies = _jiffies_64;
SECTIONS
{
  . = CONFIG_PAGE_OFFSET;
  _text = .;
  __text = .;
  __stext = .;
  HEAD_TEXT_SECTION
  .text : {
	TEXT_TEXT
	SCHED_TEXT
	LOCK_TEXT
	KPROBES_TEXT
	IRQENTRY_TEXT
	*(.text.*)
	*(.gnu.warning)
	}

  __etext = .;			/* End of text section */

  __sdata = .;
  RO_DATA_SECTION(PAGE_SIZE)
  RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE)
  __edata = .;			/* End of data section */

  EXCEPTION_TABLE(16)
  NOTES

  . = ALIGN(PAGE_SIZE);		/* Init code and data */
  ___init_begin = .;
  INIT_TEXT_SECTION(PAGE_SIZE)
  INIT_DATA_SECTION(16)

  .init.arch.info : {
	  ___arch_info_begin = .;
	  *(.arch.info.init)
	  ___arch_info_end = .;
  }

  PERCPU_SECTION(L1_CACHE_BYTES)

  ___init_end = .;

  BSS_SECTION(0, PAGE_SIZE, 0)

  __end = .;

  . = ALIGN(PAGE_SIZE);
  __heap_start = .;

  DWARF_DEBUG

  /* When something in the kernel is NOT compiled as a module, the
   * module cleanup code and data are put into these segments.  Both
   * can then be thrown away, as cleanup code is never called unless
   * it's a module.
   */
  DISCARDS
}
