/* * Declare some sizes. */ _RamBase = DEFINED(_RamBase) ? _RamBase : 0x0; _RamSize = DEFINED(_RamSize) ? _RamSize : 16M; _HeapSize = DEFINED(_HeapSize) ? _HeapSize : 0x0; _StackSize = DEFINED(_StackSize) ? _StackSize : 0x1000; ENTRY("_start") /* The memory size is 16M to coincide with the simulator. Don't change either without considering the other. */ 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 /* We still only use 256k as the main ram size. */ ram : o = 0x0100, l = 0xfffefc /* 16MB RAM --> 0x3fefc */ /* The stack starts at the top of main ram. */ topram : o = 0xfffffc, l = 0x4 /* 256K RAM --> 0x3fffc */ /* This holds variables in the "tiny" sections. */ tiny : o = 0xff8000, l = 0x7f00 /* At the very top of the address space is the 8-bit area. */ eight : o = 0xffff00, l = 0x100 } SECTIONS { .vectors : { *(.vectors) } > vectors .text : { *(.text*) *(.gnu.linkonce.t*) /* * Special FreeBSD sysctl sections. */ . = ALIGN (16); ___start_set_sysctl_set = .; *(set_sys*); /* sysctl set */ ___stop_set_sysctl_set = ABSOLUTE(.); *(set_dom*); /* domain set */ *(set_pse*); /* * Read-only data */ . = ALIGN (16); PROVIDE(_rodata_start = . ); *(.rodata*) *(.gnu.linkonce.r*) PROVIDE(_erodata = . ); _etext = .; } >ram .tors SIZEOF(.text) + ADDR(.text): { ___ctors = . ; *(.ctors) ___ctors_end = . ; ___dtors = . ; *(.dtors) ___dtors_end = . ; } >ram .data SIZEOF(.tors) + ADDR(.tors): { *(.data*) *(.gcc_exc*) CONSTRUCTORS _edata = .; } >ram .bss SIZEOF(.data) + ADDR(.data): { _bss_start = .; *(.bss* .gnu.linkonce.b.*) *(COMMON) . = ALIGN (64); . += _StackSize; _stack_init = .; _clear_end = .; _WorkAreaBase = .; _end = .; __end = .; } >ram .tiny : { *(.tiny) } > tiny .eight : { *(.eight) } > eight .stab 0 (NOLOAD) : { [ .stab ] } .stabstr 0 (NOLOAD) : { [ .stabstr ] } }