ENTRY(reset_handler) % template memory_map % _min_stack = 0x1000; /* 4K - minimum stack space to reserve */ _stack_len = LENGTH(stack); _stack_start = ORIGIN(stack) + LENGTH(stack); SECTIONS { .vectors : { . = ALIGN(4); KEEP(*(.vectors)) } > instrram .text : { . = ALIGN(4); _stext = .; *(.text) _etext = .; __CTOR_LIST__ = .; LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) *(.ctors) LONG(0) __CTOR_END__ = .; __DTOR_LIST__ = .; LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) *(.dtors) LONG(0) __DTOR_END__ = .; *(.lit) *(.shdata) _endtext = .; } > instrram /*--------------------------------------------------------------------*/ /* Global constructor/destructor segement */ /*--------------------------------------------------------------------*/ .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } > dataram .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array )) PROVIDE_HIDDEN (__init_array_end = .); } > dataram .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT(.fini_array.*))) KEEP (*(.fini_array )) PROVIDE_HIDDEN (__fini_array_end = .); } > dataram .rodata : { . = ALIGN(4); *(.rodata); *(.rodata.*) } > dataram .shbss : { . = ALIGN(4); *(.shbss) } > dataram .data : { . = ALIGN(4); sdata = .; _sdata = .; *(.data); *(.data.*) edata = .; _edata = .; } > dataram .bss : { . = ALIGN(4); _bss_start = .; *(.bss) *(.bss.*) *(.sbss) *(.sbss.*) *(COMMON) _bss_end = .; } > dataram /* ensure there is enough room for stack */ .stack (NOLOAD): { . = ALIGN(4); . = . + _min_stack ; . = ALIGN(4); stack = . ; _stack = . ; } > stack .stab 0 (NOLOAD) : { [ .stab ] } .stabstr 0 (NOLOAD) : { [ .stabstr ] } .bss : { . = ALIGN(4); _end = .; } > dataram } % template if exists script_specific % /* Remove information from the standard libraries */ SECTIONS { /DISCARD/ : { libc.a ( * ) libm.a ( * ) libgcc.a ( * ) } }