/* *uncomment this if you want the linker to output srecords. OUTPUT_FORMAT(srec) * */ OUTPUT_ARCH(sparc) SEARCH_DIR(/usr/local/erc32/sparc-erc32-aout/lib) SEARCH_DIR(/usr/local/erc32/lib/gcc-lib/sparc-aout/2.7.2) __DYNAMIC = 0; ENTRY(start) /* * The memory map looks like this: * +--------------------+ <- low memory * | .text | * | etext | * | ctor list | the ctor and dtor lists are for * | dtor list | C++ support * | _endtext | * +--------------------+ * | .data | initialized data goes here * | _sdata | * | _edata | * +--------------------+ * | .bss | * | __bss_start | start of bss, cleared by crt0 * | _end | start of heap, used by sbrk() * +--------------------+ * | heap space | * | _ENDHEAP | * | stack space | * | __stack | top of stack * +--------------------+ <- high memory */ /* * User modifiable values: * * _CLOCK_SPEED in Mhz (used to program the counter/timers) * * _PROM_SIZE size of PROM (permissible values are 4K, 8K, 16K * 32K, 64K, 128K, 256K, and 512K) * _RAM_SIZE size of RAM (permissible values are 256K, 512K, * 1MB, 2Mb, 4Mb, 8Mb, 16Mb, and 32Mb) * * MAKE SURE THESE MATCH THE MEMORY DESCRIPTION SECTION!!! */ MEMORY { rom : ORIGIN = 0x00000000, LENGTH = 4M ram : ORIGIN = 0x08000000, LENGTH = 2M } /* * stick everything in ram (of course) */ SECTIONS { .text : { CREATE_OBJECT_SYMBOLS text_start = .; _text_start = .; *(.text) etext = ALIGN(0x10); _etext = .; *(.lit) *(.shdata) _endtext = .; } > ram .dynamic : { *(.dynamic) } >ram .got : { *(.got) } >ram .plt : { *(.plt) } >ram .hash : { *(.hash) } >ram .dynrel : { *(.dynrel) } >ram .dynsym : { *(.dynsym) } >ram .dynstr : { *(.dynstr) } >ram .hash : { *(.hash) } >ram .data : { data_start = .; _data_start = .; _sdata = . ; *(.data) edata = ALIGN(0x10); _edata = .; } > ram .shbss : { *(.shbss) } > ram .bss : { __bss_start = ALIGN(0x8); _bss_start = .; bss_start = .; *(.bss) *(COMMON) end = .; _end = ALIGN(0x8); __end = ALIGN(0x8); } > ram .stab . (NOLOAD) : { [ .stab ] } .stabstr . (NOLOAD) : { [ .stabstr ] } }