MEMORY { area.1 : org = 0x10000000 + 0x00000000, len = 0x04000000 } PROVIDE(__SP_LEN = 32 * 1024); SECTIONS { /DISCARD/ : { *(.eh_frame) } .text : { *(.text .gnu.linkonce.t.*) } > area.1 .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } > area.1 __libc_atexit : { *(__libc_atexit) } > area.1 .sdata2 : { *(.sdata2); /* This makes sure that, in the .bin file, __DATA_START is at offset __CODE_LEN. */ . = ALIGN (256); __CODE_LEN = . - ADDR (.text); } > area.1 .data : { *(.data .gnu.linkonce.d.*) } > area.1 /* TODO: Why?! */ PROVIDE(__CTOR_LIST__ = .); .ctors : { *(.ctors) } > area.1 PROVIDE(__CTOR_END__ = .); .dtors : { *(.dtors) } > area.1 .fixup : { *(.fixup) } > area.1 .got2 : { *(.got2) } > area.1 .sdata : { *(.sdata .gnu.linkonce.s.*) } > area.1 .sbss (NOLOAD) : { *(.sbss) } > area.1 .bss (NOLOAD) : { *(.bss) } > area.1 heap (NOLOAD) : { . = ALIGN (16); . = . + (DEFINED(__SP_START) ? 0 : 32 * 1024); PROVIDE(__SP_START = .); . = ALIGN (16); __HEAP_START = .; . = . + 15; } > area.1 } __CODE_START = ADDR(.text); __DATA_START = ADDR(.data); __DATA_LEN = ADDR(.sdata) - __DATA_START + SIZEOF(.sdata); __BSS_START = ADDR(.sbss); __BSS_LEN = ADDR(.bss) - __BSS_START + SIZEOF(.bss);