ENTRY(_start) MEMORY { NEWTEXT (rx) : ORIGIN = 0x10000, LENGTH = 32K NEWRO (r) : ORIGIN = 0x18000, LENGTH = 8K NEWDATA (rw) : ORIGIN = 0x1a000, LENGTH = 8K NEWBSS (rw) : ORIGIN = 0x1c000, LENGTH = 8K TEXT (rx) : ORIGIN = 0x80000, LENGTH = 32K RO (r) : ORIGIN = 0x88000, LENGTH = 8K DATA (rw) : ORIGIN = 0x8a000, LENGTH = 8K BSS (rw) : ORIGIN = 0x8c000, LENGTH = 8K RAM (rw) : ORIGIN = 0xa4000, LENGTH = 4M } SECTIONS { .text : { __text_start = .; KEEP(*(.text.boot)) *(.text) __text_end = .; } >TEXT .rodata : { __rodata_start = .; *(.rodata) __rodata_end = .; } >RO .data : { __data_start = .; *(.data) __data_end = .; } >DATA .bss : { __bss_start = .; *(.bss) __bss_end = .; } >BSS __stack_end = ORIGIN(RAM) + LENGTH(RAM); __new_text_start = ORIGIN(NEWTEXT); __new_ro_start = ORIGIN(NEWRO); __new_data_start = ORIGIN(NEWDATA); __new_bss_start = ORIGIN(NEWBSS); } __heap_start = ORIGIN(RAM); __heap_end = ORIGIN(RAM) + LENGTH(RAM) - 2M; __bss_size = (__bss_end - __bss_start)>>3;