# Default linker command file.
MEMORY {
m_reset (RX) : ORIGIN = 0x8080, LENGTH = 0x20
prog_flash (RX) : ORIGIN = 0x80a0, LENGTH = 0x80000-0x80a0
m_interrupts  (RX) : ORIGIN = 0x8080, LENGTH = 0x000001E0
m_text        (RX) : ORIGIN = 0x00000800, LENGTH = 0x0007F800
m_data        (RW) : ORIGIN = 0x1FFF0000, LENGTH = 0x00020000
m_cfmprotrom  (RX) : ORIGIN = 0x00000400, LENGTH = 0x00000010
}

KEEP_SECTION { .vectortable }
KEEP_SECTION { .cfmconfig }

SECTIONS {

.interrupts :
{
    __vector_table = .;
    * (.vectortable)
    . = ALIGN (0x4);
} > m_interrupts



.cfmprotect :
{
    *(.cfmconfig)
    . = ALIGN (0x4);
} > m_cfmprotrom

.app_text: 
{
	ALIGNALL(4);
   	* (.init)	
   	* (.text)
		.= ALIGN(0x8) ;
	* (.rodata)
		.= ALIGN(0x4) ;
    ___ROM_AT = .;
} > m_text
.app_data: AT(___ROM_AT)
{
   	* (.sdata)
   	* (.data)
		.= ALIGN(0x4) ;
   	*(.ARM.extab)
		.= ALIGN(0x4) ;
       __exception_table_start__ = .;
   	EXCEPTION
       __exception_table_end__ = .;
		.= ALIGN(0x4) ;
       __sinit__ = .;
   	STATICINIT
	.= ALIGN(0x8) ;
} > m_data
.bss :
{
	.= ALIGN(0x4) ;
	__START_BSS = .;
	* (.bss)
	__END_BSS = .;
	.= ALIGN(0x8) ;
} >> m_data

_romp_at = ___ROM_AT + SIZEOF(.app_data);
.romp : AT(_romp_at)
{
    __S_romp = _romp_at;
    WRITEW(___ROM_AT);
    WRITEW(ADDR(.app_data));
    WRITEW(SIZEOF(.app_data));
    WRITEW(0);
    WRITEW(0);
    WRITEW(0);
}

__SP_INIT = . + 0x00008000;
__heap_addr = __SP_INIT;
__heap_size = 0x00008000;

}