#  NOTE: The debugger uses the Illegal Instruction Vector to stop.
#  A small subroutine is written at the location VBR+0x408-VBR+0x40B
#  to handle the exception.  The Illegal Instruction Vector in
#  the the vector table at VBR+0x10 is then pointed to it.  When the
#  debugger encounters an illegal instruction, it jumps to this 
#  subroutine, which ends with an RTE, then exits.
#  Do not overwrite this area of memory otherwise the debugger may not 
#  exit properly.
# */

MEMORY
{
	vectorflash(RX) : ORIGIN = 0x00000000, LENGTH = 0x00000418

    flash   (RX)   : ORIGIN = 0x00000420, LENGTH = 0x0007FC00
	vectorram(RWX) : ORIGIN = 0x20000000, LENGTH = 0x00000400
	sram	(RWX)  : ORIGIN = 0x20000400, LENGTH = 0x0000FA00
	ipsbar  (RWX)  : ORIGIN = 0x40000000, LENGTH = 0x0
}

SECTIONS 
{
	.ipsbar	 : {} > ipsbar
    
	.vectorflash :
	{
		mcf5225x_vectors.s (.text)
    } > vectorflash
    
	.flash :
	{
		*(.text)
		. 			   = ALIGN(0x10);
		*(.rodata)

		___DATA_ROM	   = .;
    } > flash
    
    .data : AT(___DATA_ROM) 
	{
		___DATA_RAM    = . ;

        *(.exception)	
		.              = ALIGN(0x10);	
		__exception_table_start__ = .;
	    EXCEPTION
		__exception_table_end__   = .;

		___sinit__     = .;
	    STATICINIT

        *(.data)
        *(.relocate_code)
		.              = ALIGN (0x10);
		___DATA_END    = .;

		__START_SDATA  = .;
        *(.sdata)

		.              = ALIGN (0x10);
		__END_SDATA    = .;

		__SDA_BASE     = .;
		.              = ALIGN(0x10);
	} > sram

	.bss :
	{
		. = ALIGN(0x10);
		__START_SBSS = .;
		*(.sbss)
		*(SCOMMON)
		__END_SBSS   = .;

		. = ALIGN(0x10);
		__START_BSS  = .;
		*(.bss)
		*(COMMON)
		__END_BSS    = .;	
        ___BSS_START = __START_SBSS;
        ___BSS_END   = __END_BSS;
        . = ALIGN(0x10);

	} >> sram

	___FLASH		= ADDR(.vectorflash);
	___FLASH_SIZE	= 0x00080000;
	___SRAM			= 0x20000400;
	___SRAM_SIZE	= 0x0000FC00;

	___VECTOR_RAM	= 0x20000000;
	___IPSBAR		= ADDR(.ipsbar);

    ___SP_SIZE      = 0x200;
	___HEAP_START	= .;
	___HEAP_END		= ___SRAM + ___SRAM_SIZE - ___SP_SIZE;
	___SP_END		= ___HEAP_END;
	___SP_INIT		= ___SP_END + ___SP_SIZE;
	
  	___heap_addr 	= ___HEAP_START;
	___heap_size 	= ___HEAP_END - ___HEAP_START ;
	__SP_INIT 		= ___SP_INIT;
}
