summaryrefslogblamecommitdiffstats
path: root/c/src/lib/libbsp/m68k/mvme167/startup/elflinkcmds
blob: 3aa5a9d27979e00ccd0dd843201119745db7a952 (plain) (tree)






















                                                                        

                      
   

                                                       






































































































































                                                                             
                                                                  
                                                                          
                                                            















































                                                                          
/*
 *  This file contains directives for the GNU linker which are specific
 *  to the Motorola MVME167 board. This linker script produces ELF
 *  executables.
 *
 *  Copyright (c) 1999, National Research Council of Canada.
 *  Some of this material was copied from binutils-2.9.4 linker scripts,
 *  and is therefore likely to be copyrighted by the Free Software
 *  Foundation, even though explicit copyright notices did not appear in
 *  those files.
 *
 *  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$
 */

/* These are not really needed here */
OUTPUT_FORMAT("elf32-m68k")
OUTPUT_ARCH(m68k)
ENTRY(_start)

/*
 * Declare some sizes.
 */
_HeapSize = DEFINED(_HeapSize) ? _HeapSize : 0x10000;
_StackSize = DEFINED(_StackSize) ? _StackSize : 0x1000;

MEMORY
{
  /*  The location of RAM is the address space is configurable.
      This is where we put one board. The base address should be
      passed as a parameter when building multiprocessor images
      where each board resides at a different address. */
  ram  : org = 0x00800000, l = 4M
  rom  : org = 0xFF800000, l = 4M
  sram : org = 0xFFE00000, l = 128K
}

SECTIONS
{
  /* 
   * We want the entry point to be the first thing in memory.
   * Merge all read-only data into the .text section.
   */
  .text 0x00800000 :
  {
    text_start = . ;
    
    *(.text)
    *(.text.*)
    *(.stub)

    /* C++ constructors/destructors */
    *(.gnu.linkonce.t*)
   
    /* Initialization and finalization code.
     *
     * Various files can provide initialization and finalization functions.
     * crtbegin.o and crtend.o are two instances. The body of these functions
     * are in .init and .fini sections. We accumulate the bodies here, and
     * prepend function prologues from crti.o and function epilogues from
     * crtn.o. crti.o must be linked first; crtn.o must be linked last.
     * Because these are wildcards, it doesn't matter if the user does not
     * actually link against crti.o and crtn.o; the linker won't look for a
     * file to match a wildcard.  The wildcard also means that it doesn't
     * matter which directory crti.o and crtn.o are in. 
     */
    PROVIDE (_init = .);
    *crti.o(.init)
    *(.init)
    *crtn.o(.init)
    
    PROVIDE (_fini = .);
    *crti.o(.fini)
    *(.fini)
    *crtn.o(.init)
    
    . = ALIGN (16);
    
    /* C++ constructors and destructors for static objects.
     *
     * gcc uses crtbegin.o to find the start of the constructors and
     * destructors so we make sure it is first.  Because this is a wildcard,
     * it doesn't matter if the user does not actually link against
     * crtbegin.o; the linker won't look for a file to match a wildcard.  The
     * wildcard also means that it doesn't matter which directory crtbegin.o
     * is in. The constructor and destructor list are terminated in crtend.o.
     * The same comments apply to it.
     */
    PROVIDE (__CTOR_LIST__ = .);
    *crtbegin.o(.ctors)
    *(.ctors)
    *crtend.o(.ctors)
    PROVIDE (__CTOR_END__ = .);

    PROVIDE (__DTOR_LIST__ = .);
    *crtbegin.o(.dtors)
    *(.dtors)
    *crtend.o(.dtors)
    PROVIDE (__DTOR_END__ = .);
    
    . = ALIGN (16);
    
    /* Exception frame info */
    *(.eh_frame)
    
    . = ALIGN (16);

    /* Do we have any of these with egcs-1.x and higher? */
    *(.gcc_exc)
    
    . = ALIGN (16);
		
    _rodata_start = . ;
    *(.rodata)
    *(.rodata.*)
    *(.gnu.linkonce.r*)
    *(.rodata1)    
    _erodata = .;

    _etext = .;
    PROVIDE (etext = .);
       
  } >ram =0x4e75
 
  . = ALIGN (16);
  
  .data :
  {
    data_start = .;
    
    *(.data)
    *(.data.*)
    *(.data1)
    *(.sdata)
    *(.gnu.linkonce.d*)
    *(.gcc_except_table)
    
    . = ALIGN (16); 
    _edata = .;
    PROVIDE (edata = .); 
  } >ram

  .bss :
  {
    bss_start = .;
    *(.dynbss)
    *(.bss)
    *(COMMON)
    *(.sbss)
    *(.scommon)  
    
    . = ALIGN (16);
    _end = .;
    PROVIDE (end = .); 
  } >ram

  _HeapStart	= .;
  . += HeapSize;	/* XXX -- Old gld can't	handle this	*/
  _HeapEnd = .;
  _StackStart = .;
  . += _StackSize;	/* XXX -- Old gld can't	handle this	*/
  /* . +=	0x10000; */	/* HeapSize	for	old	gld	*/
  /* . +=	0x1000;	 */	/* _StackSize for old gld */
  . =	ALIGN (16);
  _StackEnd = .;
  stack_init = .;
  clear_end =	.;

  _WorkspaceBase	= .;

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