OpenCores
URL https://opencores.org/ocsvn/ion/ion/trunk

Subversion Repositories ion

[/] [ion/] [trunk/] [src/] [ion_noxram.lds] - Rev 2

Go to most recent revision | Compare with Previous | Blame | View Log

/**
* ion_noxram.lds -- Linker script file for ION project (with no RAM or cache)
*
* The ion cpu has separate buses for code and data (Harvard architecture) but
* does not have caches by default. This linker script targets that 'bare' 
* system configuration. It is meant for early testing and debugging.
*
* This script will split the object file in two areas so that they can be put 
* in separate memory blocks:
* 1.- Code area (text output section)
* 2.- Data area (sdata, data and bss output sections)
*
* Since data constants can't be reached from the code bus, constant data 
* (usually in section rodata) needs to be put in the same space as other data.
* This is the main purpose of this file.
* Alternatively, we might jus implement a 3-port memory and leave all sections
* adjacent, but that would be too expensive (3-port memory would take about 
* twice as many memory blocks for the same memory size).
*
* FIXME code and data RAM block sizes hardcoded
* FIXME code and data start addresses hardcoded
*/

/* Make sure the first linked file is ths startup code from boot.s */
/* (We might put boot.o in the ld command line, BEFORE all other files) */
STARTUP(boot.o)

/* Default object output format is ELF big endian */
OUTPUT_FORMAT(elf32-big)



SECTIONS {
    /* Put all code at CODE area */
    .text 0x00000000 : {
        _ftext = . ;
        * (.text);

        
    } = 0 /* fill gaps with zeros */
    
    /* Mark end of executable code */
    _ecode = .;
    /* mark end of read-only code */
    _etext = .;
    PROVIDE (etext = .);
    
    
    /**** Put all data, including read-only, at DATA area */
    
    .data 0x00010000 : {
        _fdata = . ;
        * (.data);
        * (.data.*);
        
        /* Conventionally, symbol _gp points to the middle of a 64K area at the 
           start of the sdata section ('small data section'). Register $gp is 
           loaded with _gp at program startup (in boot.s) so that data in that 
           area can be reached with just one instruction.
           Note that the compiler/assembler will put data in the sdata section 
           only if it is small enough (see as/gcc docs, -G option and others).
           FIXME this feature has not been tested.
        */
        _gp = . + 0x7ff0; /* 0x7ff0 -> middle of 64K area */
        *(.lit8);
        *(.lit4);
        *(.sdata);
        *(.sbss);
        *(.gnu.linkonce.s*);
        *(.rodata);
        *(.rodata.*);
        /* mark end of initialised data */
        _edata  =  .;
        PROVIDE (edata = .);
        
        /* start bss on dword boundary for easier clearing */
        . = ALIGN(8);
        
    }
    
    /* start bss on dword boundary for easier clearing */
    . = ALIGN(8);
    
    /* mark start of uninitialised data */
    __bss_start = .;
    _fbss = __bss_start;
    
    .bss : {
        /* *(.sbss); */
        *(.dynbss);
        *(COMMON);
        * (.bss);
        _end = . ; 
    } 
    /* mark end of uninitialised data */
    _end = . ;
    PROVIDE (end = .);
}

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.