# Sample Linker Command File for CodeWarrior for ColdFire MCF51CN128

# Memory ranges

MEMORY {
   code        (RX)  : ORIGIN = 0x00000410, LENGTH = 0x0001FBF0
   userram     (RWX) : ORIGIN = 0x00800000, LENGTH = 0x00006000
}

SECTIONS {

# Heap and Stack sizes definition
  ___heap_size     = 0x04;
  ___stack_size    = 0x0200;

# MCF51CN128 Derivative Memory map definitions from linker command files:
# ___RAM_ADDRESS, ___RAM_SIZE, ___FLASH_ADDRESS, ___FLASH_SIZE linker
# symbols must be defined in the linker command file.

# 24 Kbytes Internal SRAM
   ___RAM_ADDRESS = 0x00800000;
   ___RAM_SIZE    = 0x00006000;

# 128 KByte Internal Flash Memory
   ___FLASH_ADDRESS  = 0x00000000;
   ___FLASH_SIZE     = 0x00020000;

  .userram        : {} > userram
  .code     : {} > code

  .text :
  {
    *(.text)
    . = ALIGN (0x4);
    *(.rodata)
    . = ALIGN (0x4);
    ___ROM_AT = .;
    ___DATA_ROM = .;
  } >> code

  .data : AT(___ROM_AT)
  {
    ___DATA_RAM = .;
    . = ALIGN(0x4);
    *(.exception)
    . = ALIGN(0x4);
    __exception_table_start__ = .;
    EXCEPTION
    __exception_table_end__ = .;

    ___sinit__ = .;
      STATICINIT
    __START_DATA = .;

    *(.data)
    . = ALIGN (0x4);
    __END_DATA = .;

    __START_SDATA = .;
    *(.sdata)
    . = ALIGN (0x4);
    __END_SDATA = .;

    ___DATA_END = .;
    __SDA_BASE = .;
    . = ALIGN (0x4);
  } >> userram

  .bss :
  {
    ___BSS_START = .;
    __START_SBSS = .;
    *(.sbss)
    . = ALIGN (0x4);
    *(SCOMMON)
    __END_SBSS = .;

    __START_BSS = .;
    *(.bss)
    . = ALIGN (0x4);
    *(COMMON)
    __END_BSS = .;
    ___BSS_END = .;

    . = ALIGN(0x4);
  } >> userram

  .custom :
  {
    ___HEAP_START       = .;
    ___heap_addr        = ___HEAP_START;
    ___HEAP_END         = ___HEAP_START + ___heap_size;
    ___SP_END             = ___HEAP_END;
    ___SP_INIT          = ___SP_END + ___stack_size;

    . = ALIGN (0x4);
  } >> userram

  __SP_INIT             = ___SP_INIT;

  ___SP_AFTER_RESET     = __SP_INIT;

  _romp_at = ___ROM_AT + SIZEOF(.data);
  .romp : AT(_romp_at)
  {
    __S_romp = _romp_at;
    WRITEW(___ROM_AT);
    WRITEW(ADDR(.data));
    WRITEW(SIZEOF(.data));
    WRITEW(0);
    WRITEW(0);
    WRITEW(0);
  }
}
