summaryrefslogblamecommitdiffstats
path: root/c/src/lib/libbsp/i960/rxgen960/startup/linkcmds.real
blob: 54be197fba0d5c774471b77e1883434b62ff7548 (plain) (tree)




























































































































































































                                                          
/*------------------------------------*/
/* rom.ld                             */
/* Last change : 19. 4.95             */
/*------------------------------------*
 * To build ROM based i960 image.
 *------------------------------------*/

/*
 *  $Id$
 */


MEMORY
{
  config : org = 0xFEFFFF30, len = 0xd0 
  eprom  : org = 0xFEC00000, len = 1024K
}


_bootAddr = 0xa0200000;
/*_HEAP = 0xA0100000 ; */
_rom_ibr_cksum = -(_romStart + _rom_prcb);

SECTIONS 
{
  prcb :
    {
      *(.prcb);  /* INPUT(rom_ibr.o) */
    } > config
    
    /* Only monitor start point and fault handler
     * will live in ROM as far as text is concerned.
     * Only fault table will live in ROM as far as data
     * is concerned.  
     */
  romCode :
    {
        /* Make sure that the monitor start point
         * is the first location in EPROM.
         */
      rxgen_romld.o(.text)
        /* Procedures to copy code and
         * initialize bss in RAM.
         */
      sctns.o(.text)   
        /* Make Sure Fault Table (and its handler's data)
         * live here so that they wouldn't get destroyed).
         */
      asmfault.o   
      ihandler.o
      . = ALIGN(16);
      flttbl.o 
        /* 16 byte aligned PRCB.
         */
      . = ALIGN(16);
	rom_prcb.o(.data)
      . = ALIGN(16);
	rom_cntrltbl.o(.data)
      . = ALIGN(16);
	intrtbl.o(.data)
      . = ALIGN(16);
	nulsystbl.o(.data)
      . = ALIGN(16);
        /* I need this symbol to know where code which is
         * to be copied reside in ROM. Align it on a 16
         * boundary.
         */        
      . = ALIGN(16);  
      _codeRomStart = .;   
    } > eprom 
    
    /* All the rest of the code will live in RAM.
     * Relocation are created as though code resides
     * in RAM, while code is placed right after romCode.
     * This is responsiblity of the ROM monitor to
     * copy code into ROM.
     */    
  ramCode : AT(ADDR(romCode) + SIZEOF(romCode)) 
    { 
        /* RAM-based code section start.
         * I need this symbol to know where to copy code
         * at initialization time .
         */
      _codeRamStart = .;
        /* RAM based fault recovery stuff.
         */
      _faultStart = .;
      asmstub.o
      fault.o
      _faultEnd = .;
        /* Check sum to gurantee that
         * the above section wasn't broken.
         */
      . = ALIGN(16); 
      _faultCheckSum = .;
      . += 4;
        /* Fault Buffer to keep the state of
         * the fauled procedure.
         */
      _faultBuffer = .;
      . += 256;   
        /* All the rest of the text goes here.
         */
      . = ALIGN(16);   
      *(.text)
/* NEW TEST TEST TEST TEST */
	        . = ALIGN (16);

        *(.eh_fram)
        . = ALIGN (16);

        /*
         * C++ constructors
         */
        __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 = ALIGN( 0x10 ) ;
/* END NEW TEST TEST TEST */
        /* 16 byte aligned PRCB.
         */
      . = ALIGN(16);
      prcb.o(.data)
        /* 16 byte aligned Control Table.
         */
      . = ALIGN(16);
      cntrltbl.o(.data)                 
      . = ALIGN(16);
	systbl.o(.data)
        /* All the rest of program defined data goes here.
         */
      *(.data) 
        /* RAM-based code section end.
         * I need this symbol to know where to copy code
         * at initialization time .
         */   
      _codeRamEnd = .;
    } > eprom
 
    /* RAM based uninitialized data.
     */   
  bss (NOLOAD) :
    {
        /* BSS section start. I need this symbol to
         * zero BSS on initialization.
         */
        /* Heap.  Aligned on a 64 boundary */
      /* . = ALIGN(64);
      _heap_initial = .;
      . += 64K;*/
        /* Supervisor Stack. Aligned on a 16 boundary.
         */
      . = ALIGN(16);
      _svrStackPtr = .;
      . += 16K;
        /* Interrupt Stack. Aligned on a 16 boundary.
         */
      . = ALIGN(16);
      _intStackPtr = .;
      . += 16K;
        /* Program defined BSS.
         */
      _bssStart = .;
      _bss_start = .;
      *(.bss)
        /* Program defined COMMON.
         */
      *(COMMON) 
      _end = .;
        /* BSS section end. I need this symbol to
         * zero BSS on initialization.
         */
      _bssEnd = .;
      _bssStart_1 = .;
      _bssEnd_1 = .;
    } > eprom

}

/*-------------*/
/* End of file */
/*-------------*/