/*
 * (C) Copyright 2000
 * Rob Taylor, Flying Pig Systems Ltd. robt@flyingpig.com
 *
 * SPDX-License-Identifier:	GPL-2.0+
 */

OUTPUT_ARCH(powerpc)

MEMORY {
	ram  (!rx) : org = 0x00000000 , LENGTH = 8M
	code (!rx) : org = 0x00002000 , LENGTH = (4M - 0x2000)
	rom   (rx) : org = 0xfff00000 , LENGTH = 512K
}

SECTIONS
{
  _f_init = .;
  PROVIDE(_f_init = .);
  _f_init_rom = .;
  PROVIDE(_f_init_rom = .);

  .init : {
      arch/powerpc/cpu/mpc824x/start.o	(.text)
      *(.init)
  } > ram
  _init_size = SIZEOF(.init);
  PROVIDE(_init_size = SIZEOF(.init));

  ENTRY(_start)

/*  _ftext = .;
  _ftext_rom = .;
  _text_size = SIZEOF(.text);
 */
  .text : {
      *(.text)
      *(.got1)
      } > ram
  .rodata : { *(.rodata) } > ram
  .dtors : { *(.dtors) } > ram
  .data : { *(.data) } > ram
  .sdata : { *(.sdata) } > ram
  .sdata2 : { *(.sdata2)
      *(.got)
    _GOT2_TABLE_ = .;
    *(.got2)
    _FIXUP_TABLE_ = .;
    *(.fixup)
    } > ram
  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2;
  __fixup_entries = (. - _FIXUP_TABLE_)>>2;

  .sbss : { *(.sbss) } > ram
  .sbss2 : { *(.sbss2) } > ram
  .bss : { *(.bss) } > ram
  .debug : { *(.debug) } > ram
  .line : { *(.line) } > ram
  .symtab : { *(.symtab) } > ram
  .shrstrtab : { *(.shstrtab) } > ram
  .strtab : { *(.strtab) } > ram
 /* .reloc   :
  {
    *(.got)
    _GOT2_TABLE_ = .;
    *(.got2)
    _FIXUP_TABLE_ = .;
    *(.fixup)
  } > ram
  */


   __start___ex_table = .;
    __ex_table : { *(__ex_table) } > ram
    __stop___ex_table = .;


  .ppcenv	:
  {
    common/env_embedded.o (.ppcenv)
  } > ram

  __bss_end = . ;
  PROVIDE (end = .);
}
