PLC_APP_SIZE        = 0x000D0000;
PLC_APP_PA_START    = 0x20700000;
PLC_APP_VA_START    = 0x30700000;

PLC_APP_PA_END	    = PLC_APP_PA_START + PLC_APP_SIZE;
PLC_APP_VA_END	    = PLC_APP_VA_START + PLC_APP_SIZE;


MEMORY
{
    plc_app_area_pa (RXA) : ORIGIN = 0x20700000, LENGTH = 832K
    plc_app_area_va (RXA) : ORIGIN = 0x30700000, LENGTH = 832K
}


OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")


OUTPUT_ARCH(arm)


PHDRS
{
    code     PT_LOAD ;      /* segment containing all sections to load in program memory */
    debug    PT_LOAD ;      /* segment containing all sections for gdb debug             */
}


SECTIONS
{
    /* ******************** code ******************** */
    /* Code RO */

    . = ALIGN(4);

    .code :
    {
        _code_start = .;

            *(.intro)
            *(.code)
            *(.text*)
            *(.glue_7t)
            *(.glue_7)
            *(.vfp11_veneer)
            *(.v4_bx)

            . = ALIGN(4);

        _code_end = .;

    } >plc_app_area_va AT>plc_app_area_pa :code


    /* ******************** const data ******************** */
    /* Data RO */

    . = ALIGN(4);

    .data_const :
    {
        _rodata_start = .;

            *(.rodata*)				/* C-compiler output .read only data */
            *(.eh_frame)

            . = ALIGN(4);

        _rodata_end = .;

    } >plc_app_area_va AT>plc_app_area_pa :code


    /* ******************** initialized data ******************** */
    /* Data RW */

    . = ALIGN(4);

    .data_initialized :
    { 
        _data_initialized_start = .;

        *(.data)				    /* C-compiler output .data */

        _data_initialized_end = .;

        . = ALIGN(4);

    } >plc_app_area_va AT>plc_app_area_pa :code


    /* ******************** zero data ******************** */
    /* Data RW */

    . = ALIGN(4);

    .data_zero :
    { 
        . = ALIGN(4);

        _data_zero_start = .;

        *(.data_zero)
        *(COMMON)
        *(.dynbss)                  /* bss "Block Started by Symbol" */
        *(.bss .bss.* .gnu.linkonce.b.*)

        _data_zero_end = .;

        /* Align here to ensure that the .bss section occupies space up to
          _end.  Align after .bss to ensure correct alignment even if the
          .bss section disappears because there are no input sections.  */
        . = ALIGN(4);

    } >plc_app_area_va :NONE

    . = ALIGN(4);


    /* ******************** .comment ******************** */

    /DISCARD/ :
    {
        *(.comment)
        
    } :NONE


    /* ******************** gdb debug ******************** */

    /* Stabs debugging sections. */ 
    .stab 0 : { *(.stab) } :debug
    .stabstr 0 : { *(.stabstr) } :debug
    .stab.excl 0 : { *(.stab.excl) } :debug
    .stab.exclstr 0 : { *(.stab.exclstr) } :debug
    .stab.index 0 : { *(.stab.index) } :debug
    .stab.indexstr 0 : { *(.stab.indexstr) } :debug
    .comment 0 : { *(.comment) } :debug

    /* DWARF debug sections. 
    Symbols in the DWARF debugging sections are relative to the beginning 
    of the section so we begin them at 0. */

    /* DWARF 1 */ 
    .debug 0 : { *(.debug) } :debug
    .line 0 : { *(.line) } :debug

    /* GNU DWARF 1 extensions */ 
    .debug_srcinfo 0 : { *(.debug_srcinfo) } :debug
    .debug_sfnames 0 : { *(.debug_sfnames) } :debug

    /* DWARF 1.1 and DWARF 2 */ 
    .debug_aranges 0 : { *(.debug_aranges) } :debug
    .debug_pubnames 0 : { *(.debug_pubnames) } :debug

    /* DWARF 2 */ 
    .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } :debug
    .debug_abbrev 0 : { *(.debug_abbrev) } :debug
    .debug_line 0 : { *(.debug_line) } :debug
    .debug_frame 0 : { *(.debug_frame) } :debug
    .debug_str 0 : { *(.debug_str) } :debug
    .debug_loc 0 : { *(.debug_loc) } :debug
    .debug_macinfo 0 : { *(.debug_macinfo) } :debug

    /* SGI/MIPS DWARF 2 extensions */ 
    .debug_weaknames 0 : { *(.debug_weaknames) } :debug
    .debug_funcnames 0 : { *(.debug_funcnames) } :debug
    .debug_typenames 0 : { *(.debug_typenames) } :debug
    .debug_varnames 0 : { *(.debug_varnames) } :debug
}

