# Sample Linker Command File for CodeWarrior for ColdFire

KEEP_SECTION {.vectortable}

# Memory ranges	

MEMORY {
   vectorrom   (RX)  : ORIGIN = 0x00000000, LENGTH = 0x00000400
   cfmprotrom  (RX)  : ORIGIN = 0x00000400, LENGTH = 0x00000020   
   code        (RX)  : ORIGIN = 0x00000500, LENGTH = 0x0001FB00
   userram     (RWX) : ORIGIN = 0x20000000, LENGTH = 0x00004000
}

SECTIONS {

# Heap and Stack sizes definition
	___heap_size	  = 0x4;
	___stack_size     = 0x100;
	



# MCF52221 Derivative Memory map definitions from linker command files:
# __IPSBAR, __RAMBAR, __RAMBAR_SIZE, __FLASHBAR, __FLASHBAR_SIZE linker
# symbols must be defined in the linker command file.

# Memory Mapped Registers (IPSBAR= 0x40000000)
   ___IPSBAR         = 0x40000000;

# 16 Kbytes Internal SRAM
   ___RAMBAR         = 0x20000000;
   ___RAMBAR_SIZE    = 0x00004000;

# 128 KByte Internal Flash Memory
   ___FLASHBAR       = 0x00000000;
   ___FLASHBAR_SIZE  = 0x00020000;

   ___SP_AFTER_RESET = ___RAMBAR + ___RAMBAR_SIZE - 4;
   
  .userram	  : {} > userram		
  .code	    : {} > code		
	
	.vectors :
	{
		exceptions.c(.vectortable)
		. = ALIGN (0x4); 
	} > vectorrom

	.cfmprotect :
	{
		*(.cfmconfig)
		. = ALIGN (0x4);
	} > cfmprotrom

	.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
  	
#	___VECTOR_RAM		= ADDR(.vectorram);
	
	__SP_INIT		= ___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);
	}

}