/* * This file contains directives for the GNU linker which are specific * to the Technologic Systems TS-1325 (i386ex) board. * * Copyright (c) 1989-1998. * On-Line Applications Research Corporation (OAR). * Copyright assigned to U.S. Government, 1994. * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://www.OARcorp.com/rtems/license.html. * * $Id$ * * Memory layout: * * 0x0008000 -> ... : initial section ( init 386ex, goto protected mode) * ... -> ... : text section ( executable code ) * ... -> 0x00A0000 : data section ( initialized storage ) * 0x0100000 -> 0x0200000 : bss section, stack space, heap storage */ ENTRY(_init_i386ex) ; SECTIONS { /*************************************************************************** * initial section: * * This subsection of ".text" is the first in memory, and executed by the DOS * loader. It initializes the i386ex, sets up the gdt in RAM, loads the gdt, * jumps to protected mode, loads the idt, zeros the bss section, sets up * the stack and calls the rest of the RTEMS initialization. ***************************************************************************/ _DOS_ld_addr = 0x0008000 ; /*************************************************************************** * text section: * * Nobody here but us opcodes. ***************************************************************************/ .text _DOS_ld_addr : { CREATE_OBJECT_SYMBOLS text_start = . ; _text_start = . ; *(.initial); . = ALIGN(0x20); *(.text ); . = ALIGN (0x20); *(.eh_frame) . = ALIGN (0x20); *(.gnu.linkonce.t*) . = ALIGN(0x20); /* * C++ constructors */ __CTOR_LIST__ = .; LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) *(.ctors) LONG(0) __CTOR_END__ = .; . = ALIGN (4) ; __DTOR_LIST__ = .; LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) *(.dtors) LONG(0) __DTOR_END__ = .; _rodata_start = . ; *(.rodata) . = ALIGN(0x20); _erodata = .; *(.gnu.linkonce.r*) . = ALIGN(0x20); _endtext = . ; } /*************************************************************************** * ctor/dtor sections: * * These sections house the global constructors and destructors. ***************************************************************************/ .init BLOCK(0x20) : { *(.init) } = 0x9090 .fini BLOCK(0x20) : { *(.fini) } = 0x9090 /*************************************************************************** * data section: * * This section defines the location of the data section in RAM. ***************************************************************************/ .data BLOCK(0x20) : { _sdata = .; *(.data); . = ALIGN(0x20); *(.gnu.linkonce.d*) . = ALIGN(0x20); *(.gcc_except_table) . = ALIGN(0x20); _edata = .; } _data_size = _edata - _sdata ; /*************************************************************************** * bss section: * * The bss section is the first section in extended RAM ( > 1MB). ***************************************************************************/ .bss 0x100000 (NOLOAD) : { _bss_start = .; *(.bss); *(COMMON); _ebss = ALIGN(0x20); } _bss_size = _ebss - _bss_start ; /*************************************************************************** * discard section: * * This section is used to throw away stuff we don't want. ***************************************************************************/ /DISCARD/ : { *(.comment); *(.note); } /*************************************************************************** * General variables: * * The stack_size variable is customizable here. The heap is located directly * after the stack in RAM. A routine within bspstart.c uses these variables * to ensure that the heap used by RTEMS is as large as the RAM remaining * after all workspace configurations are complete. ***************************************************************************/ stack_size = 0x8000 ; stack_origin = _ebss + stack_size ; heap_bottom = stack_origin + 4 ; /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 : { *(.comment) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1 */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2 */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2 */ .debug_info 0 : { *(.debug_info) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* These must appear regardless of . */ }