/* Define the flash max size */
__max_flash_size = 768k;

__base = 0x10000000;

__comm_vma = 0x17000;
__max_comm_size = 76k;

MEMORY
{
    init            : org = __base,             len = 512
    flash(rx)       : org = __base + 512,       len = __max_flash_size
    comm(rx)        : org = __comm_vma,         len = __max_comm_size
    data            : org = 0x11000,            len = 16k
    stack           : org = 0x15000,            len = 8k
    aram            : org = 0x50000,            len = 16k
    dram            : org = 0x54000,            len = 12k
    eram            : org = 0x57000,            len = 0xa00
}

SECTIONS
{
    .init : {
        *(.reset)
    } > init

    .comm : {
        KEEP(*(.vector))
        *(.com_text*)
        *(.text*)
        *(.rodata*)
        *(.com_rodata*)
        *(.rela*)
        *(.data*)
	    *(.sdata*)
        LONG(0)
    } > comm AT > flash

    .rti : {
        . = ALIGN(4);
        /* section information for initial */
        __rt_init_start = .;
        KEEP(*(SORT(.rti_fn*)))
        __rt_init_end = .;

        . = ALIGN(4);
        __fsymtab_start = .;
        KEEP(*(FSymTab))
        __fsymtab_end = .;

        . = ALIGN(4);
        __vsymtab_start = .;
        KEEP(*(VSymTab))
        __vsymtab_end = .;
    } > comm AT > flash

    .flash : {
        . = ALIGN(512);
    } > flash

    .bss (NOLOAD):
    {
        __bss_start = .;
        *(COMMON)
        *(.bss)
        *(.sbss)
        *(.buf*)
        __bss_end = .;
    } > data
    __bss_size = __bss_end - __bss_start;

    .stack (NOLOAD) : {
        __irq_stack_start = .;
        . = 0x2000;
        __irq_stack = .;
    } > stack
    __irq_stack_size = __irq_stack - __irq_stack_start;

    .code_aecram (NOLOAD): {
        __aram_start = .;
    } > aram

    .code_decram (NOLOAD): {
    } > dram

    .code_encram (NOLOAD): {
        __eram_start = .;
        . = 0xa00;
        __eram_end = .;
    } > eram
}

/* Calc the lma */
__bank_size = SIZEOF(.flash);
__comm_lma = LOADADDR(.comm);
__comm_size = SIZEOF(.comm) + SIZEOF(.rti);