MEMORY {
    loader (rx) : org = 0x08000000, len = 4k
    code (rx)   : org = 0x08001000, len = 28k
    ram (rwx)   : org = 0x20000000, len = 8k
}

ENTRY(Reset_Handler)

__bin_align = 8;

SECTIONS {
    .loader : {
        . = ALIGN(4);
        KEEP(*(.loader))
        . = ALIGN(4);
    } > loader

    .isr_vector : {
        . = ALIGN(4);
        KEEP(*(.isr_vector))
        . = ALIGN(4);
    } > code

    .text : {
        . = ALIGN(4);
        *(.text)
        *(.text*)
        *(.glue_7)
        *(.glue_7t)
        . = ALIGN(4);
        _etext = .;
    } > code

    .bss : {
        . = ALIGN(4);
        _sbss = .;
        *(.bss)
        *(.bss*)
        *(COMMON)
        . = ALIGN(4);
        _ebss = .;
    } > ram

    .data : {
        _sidata = LOADADDR(.data);
        . = ALIGN(4);
        _sdata = .;
        *(.data)
        *(.data*)
        . = ALIGN(4);
        _edata = .;
    } > ram AT > code

    .rodata : {
        . = ALIGN(4);
        *(.rodata)
        *(.rodata*)
        FILL(0xFF);
        . = ALIGN(__bin_align);
    } > code

    _estack = ORIGIN(ram) + LENGTH(ram);
}
