cat <<EOF OUTPUT_FORMAT("${OUTPUT_FORMAT}") OUTPUT_ARCH(${ARCH}) ENTRY("_start") MEMORY { /* 0xc4 is a magic entry. We should have the linker just skip over it one day... */ vectors : o = 0x0000, l = 0xc4 magicvectors : o = 0xc4, l = 0x3c ram : o = 0x0100, l = 0xfdfc /* The stack starts at the top of main ram. */ topram : o = 0xfefc, l = 0x4 /* At the very to of the address space is the 8-bit area. */ eight : o = 0xff00, l = 0x100 } SECTIONS { .vectors : { /* Use something like this to place a specific function's address into the vector table. SHORT(ABSOLUTE(_foobar)) */ *(.vectors) } ${RELOCATING+ > vectors} .text : { *(.rodata) *(.text) *(.strings) ${RELOCATING+ _etext = . ; } } ${RELOCATING+ > ram} .tors : { ___ctors = . ; *(.ctors) ___ctors_end = . ; ___dtors = . ; *(.dtors) ___dtors_end = . ; } ${RELOCATING+ > ram} .data : { *(.data) ${RELOCATING+ _edata = . ; } } ${RELOCATING+ > ram} .bss : { ${RELOCATING+ _bss_start = . ;} *(.bss) *(COMMON) ${RELOCATING+ _end = . ; } } ${RELOCATING+ >ram} .stack : { ${RELOCATING+ _stack = . ; } *(.stack) } ${RELOCATING+ > topram} .eight : { *(.eight) } ${RELOCATING+ > eight} .stab 0 ${RELOCATING+(NOLOAD)} : { [ .stab ] } .stabstr 0 ${RELOCATING+(NOLOAD)} : { [ .stabstr ] } } EOF