summaryrefslogblamecommitdiffstats
path: root/c/src/lib/libbsp/i386/i386ex/startup/linkcmds
blob: 946de8e6e680cf225a129e4a7d3899c271ef1e2d (plain) (tree)
1
2
3
4
5
6
7
8
9



                                                                       
                            
                                                    
  

                                                           
                                         
  
        







                                                                                              

   


                      
 



                                                                                         

                                                                                       

                                                                                     







                                                                        
 

                                                 
                 
                               

                   
                  
                           
                             
                   

                                         
                                         
                                             
 




                                                                                       
                                 









                            
                                          
 







                                                                                              
                              







                                                                                             

                            

                              

                         


                                           
                       




                                            

                   
 









                                                    
                       




                                                    
                           
                   
                    

                                  

                               

         




                                                                                            

                                                                                      


                                                                                            



                    
                                                                                            
                       




                                                                                             
                         


                  








































                                                                          
 
/*
 *  This file contains directives for the GNU linker which are specific
 *  to the Intel 386ex evaluation board.
 *
 *  COPYRIGHT (c) 1989-1999.
 *  On-Line Applications Research Corporation (OAR).
 *
 *  The license and distribution terms for this file may be
 *  found in the file LICENSE in this distribution or at
 *  http://www.rtems.com/license/LICENSE.
 *
 *  $Id$
 * 
 * Memory layout:
 *
 * 0x3f80000 -> 0x3ff0000 : text section
 * 0x3ff0000 -> 0x3ff0028 : global descriptor table in ROM
 * 0x3ff0028 -> 0x3fff000 : data section ( copied by start.s to RAM )
 * 0x3fff000 -> 0x3fffff0 : initial section ( init 386ex, goto protected mode, copy ROM-RAM ) 
 * 0x3fffff0 -> 0x4000000 : reset section ( jmp to initial only )
 */

	ENTRY(reset) ;
SECTIONS
{

/****************************************************************************************
 * data section:
 *
 * This section defines the locations of the data section in ROM as well as in RAM.  
 * start.s copies the data section to RAM in real mode.  This is done PRIOR to the lgdt
 * instruction since the data section contains the Global_descriptor_table and GDTR.
 ***********************************************************************************/

	_rom_data_start = 0x3ff0000;

	_rom_data_segment   = 0xF000; 
	_rom_data_offset    = 0x0; 

	_ram_data_segment   = 0x0000 ;
	_ram_data_offset    = 0x0;
	_ram_data_location  = _ram_data_segment * 16 + _ram_data_offset;

  	.init : { _init = .; *(.init) } = 0x9090 
  	.fini : { _fini = .; *(.fini) } = 0x9090 
        .data  : 
        AT ( _rom_data_start ) 
        {
        _sdata = .;
        *(.data*);
	*(.gnu.linkonce.d*)
	*(.gcc_except_table*)
        _edata = .;
   	}
        _data_start       = ADDR(.data) ;
	 data_start       = _data_start ;
        _data_size        = _edata - _sdata ;

/**************************************************************************************
 * bss section:
 *
 * The bss section is the last section in RAM.  
 *************************************************************************************/
	_edata = ALIGN( 0x10 );  
	.bss :
	{
	_bss_start = .;
	*(.bss);
	*(COMMON);
	_ebss = ALIGN(0x10);
	end = _ebss;
	_end = end;
	__end = end;
	}
        _bss_size   = _ebss - _bss_start ;

/**************************************************************************************
 * 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 = end + stack_size ;
	heap_bottom  = stack_origin + 4 ;  

/***************************************************************************************
 * text section:
 *
 * This section is NOT copied into RAM.  It is left in ROM, as the flash ROM is quick enough.
 ***************************************************************************************/
        .text ( 0x3f80000 ):
        {
         CREATE_OBJECT_SYMBOLS
	text_start = . ;
        _text_start = . ;
        *(.text ) ;
	/*
	 * Special FreeBSD sysctl sections.
	 */
	. = ALIGN (16);
	__start_set_sysctl_set = .;
	*(set_sysctl_*);
	__stop_set_sysctl_set = ABSOLUTE(.);
	*(set_domain_*);
	*(set_pseudo_*);

	*(.eh_fram)

	. = ALIGN (16);

	/*
	 * 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*)
	*(.eh_frame)
	*(.gnu.linkonce.r*)
	_erodata = ALIGN( 0x10 ) ;
        _etext = ALIGN( 0x10 );
	_endtext = . ; 
        }

/*******************************************************************************************
 * initial section:
 *
 * This section is defined after the data section.  It must be in the top 64K of memory
 * to enable the initial short jmp from the reset section while still in real-mode. It 
 * initializes the i386ex, moves the gdt from ROM to RAM,loads the gdt,
 * jumps to protected mode, copies the data section from ROM to RAM and loads the idt.
 ******************************************************************************************/

	.initial _rom_data_start + _data_size :
	{
	*(.initial);
	}

/*******************************************************************************************
 * board reset section:
 *
 * This section contains the short jmp from the reset section to the initial section.  It is 
 * the first code executed on reset/power on.
 ******************************************************************************************/

	.reset 0x3fffff0:
	{
	*(.reset);
        }


  /* 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  .  */
}