ENTRY(_start) MEMORY { NEWTEXT (rx) : ORIGIN = 0x10000, LENGTH = 128K NEWRO (r) : ORIGIN = 0x30000, LENGTH = 128K NEWDATA (rw) : ORIGIN = 0x50000, LENGTH = 64K NEWBSS (rw) : ORIGIN = 0x60000, LENGTH = 64K TEXT (rx) : ORIGIN = 0x80000, LENGTH = 128K RO (r) : ORIGIN = 0xa0000, LENGTH = 128K DATA (rw) : ORIGIN = 0xc0000, LENGTH = 64K BSS (rw) : ORIGIN = 0xd0000, LENGTH = 64K RAM (rw) : ORIGIN = 0xf0000, LENGTH = 8M } 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); } __kernel = 0x80000; __heap_start = ORIGIN(RAM); __heap_end = ORIGIN(RAM) + LENGTH(RAM) - 2M; __bss_size = (__bss_end - __bss_start)>>3;