Contents|Index|Previous|Next

Linker

The following documentation discusses the linker options for the NEC VR4300 family of processors.

VR4300-specific command-line linker options

For a list of available generic linker options, refer to Command Language in Using LD in GNUPro Utilities. In addition, the following VR4300-specific command-line options are supported:

-EL
Link objects for the processor in little endian mode.

-EB
Link objects for the processor in big-endian mode.

Linker script

The GNU Linker uses a linker script to determine how to process each section in an object file, and how to lay out the executable. The linker script is a declarative program consisting of a number of directives. For instance, the directive ‘ENTRY( )’ specifies which symbol in the executable will be designated the executable’s “entry point”. Since linker scripts can be complicated to write, the linker includes one built-in script that defines the default linking process.

This linker script (‘ddb.ld’) should be used when linking programs for the NEC DDB- VR4300 board. It can also be used to link programs for execution in the MIPS simulator.

/* The following TEXT start address leaves space for the monitor workspace. */

ENTRY(_start)
OUTPUT_ARCH("mips:4000")
OUTPUT_FORMAT("elf32-bigmips", "elf32-bigmips", "elf32-littlemips")
GROUP(-lc -lpmon -lgcc)
SEARCH_DIR(.)
__DYNAMIC  =  0;

/* Allocate the stack to be at the top of memory, since the stack grows down.
*/
PROVIDE (__stack = 0);
/* PROVIDE (__global = 0); */

/* Initialize some symbols to be zero so we can reference them in the crt0 without core dumping. These functions are all optional, but we do this so we can have our crt0 always use them if they exist. This is so BSPs work better when using the crt0 installed with gcc. We have to initialize them twice, so we multiple object file formats, as some prepend an underscore.
*/
PROVIDE (hardware_init_hook = 0);
PROVIDE (software_init_hook = 0);
SECTIONS

{
. = 0xA0100000;
  .text : {
     _ftext = . ;
    *(.init)
     eprol  =  .;
    *(.text)
    PROVIDE (__runtime_reloc_start = .);
    *(.rel.sdata)
    PROVIDE (__runtime_reloc_stop = .);
    *(.fini)
     etext  =  .;
     _etext  =  .;
  }
  . = .;
  .rdata : {
    *(.rdata)
  }
   _fdata = ALIGN(16);
  .data : {
    *(.data)
    CONSTRUCTORS
  }
  _gp = ALIGN(16) + 0x8000;
  __global = _gp;
  .lit8 : {
    *(.lit8)
  }
  .lit4 : {
    *(.lit4)
  }
  .sdata : {
    *(.sdata)
  }
   edata  =  .;
   _edata  =  .;
   _fbss = .;
  .sbss : {
    *(.sbss)
    *(.scommon)
  }
  .bss : {
    _bss_start = . ;
    *(.bss)
    *(COMMON)
  }
   end = .;
   _end = .;
}