MEMORY {
    rom (rx)    : org = 0x08000000, len = 4k
    ram (rwx)   : org = 0x20000000, len = 8k
}

ENTRY(Reset_Handler)

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

    .startup : {
        . = ALIGN(4);
        *(.text.Reset_Handler)
        . = ALIGN(4);
    } > rom

    .text : {
        _sitext = LOADADDR(.text);
        . = ALIGN(4);
        _stext = .;
        *(.text)
        *(.text*) 
        *(.glue_7)
        *(.glue_7t)
        . = ALIGN(4);
        _etext = .;
    } > ram AT > rom

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

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

    .rodata : {
        _sirodata = LOADADDR(.rodata);
        . = ALIGN(4);
        _srodata = .;
        *(.rodata)
        *(.rodata*)
        . = ALIGN(4);
        _erodata = .;
    } > ram AT > rom

    _app_header = ORIGIN(rom) + LENGTH(rom);
    _app_magic = _app_header + 16;
    _estack = ORIGIN(ram) + LENGTH(ram);
}
