summaryrefslogblamecommitdiffstats
path: root/c/src/lib/libbsp/arm/csb337/startup/linkcmds
blob: 3ae98f2058371cc36495d25f59e297a37331fc3f (plain) (tree)































































                                                                      
                                           































































                                                                       



                                                        













                         
                            















































































                                                                            
/*
 * Cogent CSB337 Linker script
 *
 * Copyright (c) 2004 by Jay Monkman <jtm@lopingdog.com>
 *	
 *  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$
 */

OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
	      "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)

MEMORY
{
	sdram : ORIGIN = 0x20100000, LENGTH = 15M
	sram  : ORIGIN = 0x00200000, LENGTH = 16K
}

/*
 * Declare some sizes.
 */
_sdram_base = DEFINED(_sdram_base) ? _sdram_base : 0x20100000;
_sdram_size = DEFINED(_sdram_size) ? _sdram_size : 15M;


_sram_base = DEFINED(_sram_base) ? _sram_base : 0x00000000;
_sram_size = DEFINED(_sram_size) ? _sram_size : 16K;

_irq_stack_size = DEFINED(_irq_stack_size) ? _irq_stack_size : 0x1000;
_fiq_stack_size = DEFINED(_fiq_stack_size) ? _fiq_stack_size : 0x400;
_abt_stack_size = DEFINED(_abt_stack_size) ? _abt_stack_size : 0x100;
_svc_stack_size = DEFINED(_svc_stack_size) ? _svc_stack_size : 0x1000;



/* Do we need any of these for elf?
   __DYNAMIC = 0;    */

SECTIONS
{
    .base :
    {
        _sram_base = .;

	/* reserve room for the vectors and function pointers */
	arm_exception_table = .;    
	. += 64;

	/* 256 byte aligned rx buffer header array */
	. = ALIGN (0x100);
	at91rm9200_emac_rxbuf_hdrs = .;	

	/* 1 transmit buffer, 0x600 size */
	. += (0x100);
	at91rm9200_emac_txbuf = .;
	. += (0x600);

	/* 8 receive buffers, 0x600 each */
	at91rm9200_emac_rxbufs = .;
	. += (0x600 * 8);

    } > sram

    .init          : 
    { 
        KEEP (*(.init))
    } > sdram   /*=0*/

    .text      :
    {
	_text_start = .;
	 CREATE_OBJECT_SYMBOLS
	*(.text) 
	*(.text.*)

        /*
         * Special FreeBSD sysctl sections.
         */
        . = ALIGN (16);
        __start_set_sysctl_set = .;
        *(set_sysctl_*);
        __stop_set_sysctl_set = ABSOLUTE(.);
        *(set_domain_*);
        *(set_pseudo_*);

	/* .gnu.warning sections are handled specially by elf32.em.  */
	*(.gnu.warning)
	*(.gnu.linkonce.t*)
	*(.glue_7)
	*(.glue_7t)

	/* I think these come from the ld docs: */	
	___CTOR_LIST__ = .;
	LONG((___CTOR_END__ - ___CTOR_LIST__) / 4 - 2)
	*(.ctors)
	LONG(0)
	___CTOR_END__ = .;
	___DTOR_LIST__ = .;
	LONG((___DTOR_END__ - ___DTOR_LIST__) / 4 - 2)
	*(.dtors)
	LONG(0)
	___DTOR_END__ = .;

	_etext = .;
	PROVIDE (etext = .);
    } > sdram  

    .fini      :
    {
        KEEP (*(.fini))
    } > sdram  /*=0*/

    .data :
    { 
        *(.data)
        *(.data.*)
        *(.gnu.linkonce.d*)
        *(.jcr)
        SORT(CONSTRUCTORS)
        _edata = .;
    } > sdram 

    .eh_frame : { *(.eh_frame) } > sdram
    .data1   : { *(.data1) } > sdram
    .eh_frame : { *(.eh_frame) } > sdram
    .gcc_except_table : { *(.gcc_except_table) } > sdram

    .rodata :
    {
      *(.rodata)
      *(.rodata.*)
      *(.gnu.linkonce.r*)
    } > sdram

    .bss       :
    {
	_bss_start_ = .;
	_clear_start = .;
	*(.bss)
	*(.bss.*)
	*(.gnu.linkonce.b.*)
	*(COMMON)
	. = ALIGN(64);
	_clear_end = .;

	. = ALIGN (256);
	_abt_stack = .;
	. += _abt_stack_size;

	. = ALIGN (256);
	_irq_stack = .;
	. += _irq_stack_size;

	. = ALIGN (256);
	_fiq_stack = .;
	. += _fiq_stack_size;

	. = ALIGN (256);
	_svc_stack = .;
	. += _svc_stack_size;

	_bss_end_ = .;
	_end = .;
	__end = .;

/* 
 * Ideally, the MMU's translation table would be in SRAM. But we need
 * 16K which is the size of SRAM. If we do the mapping right, the TLB
 * should be big enough that to hold all the translations that matter,
 * so keeping the table in SDRAM won't be a problem.
 */
	. = ALIGN (16 * 1024);
	  _ttbl_base = .;
	  . += (16 * 1024);


	. = ALIGN (1024);
	_bss_free_start = .;

    } > sdram


/* Debugging stuff follows? */

    /* 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) } 
/*    .stack 0x80000 : { _stack = .; *(.stack) }*/
  /* These must appear regardless of  .  */
}