Home | History | Annotate | Download | only in scripttempl
      1 # Linker Script for National Semiconductor's CR16-ELF32.
      2 #
      3 # Copyright (C) 2014 Free Software Foundation, Inc.
      4 # 
      5 # Copying and distribution of this file, with or without modification,
      6 # are permitted in any medium without royalty provided the copyright
      7 # notice and this notice are preserved.
      8 
      9 # The next line should be uncommented if it is desired to link
     10 # without libstart.o and directly enter main.
     11 
     12 # ENTRY=_main
     13 
     14 test -z "$ENTRY" && ENTRY=_start
     15 cat <<EOF
     16 
     17 /* Example Linker Script for linking NS CR16 elf32 files.
     18    Copyright (C) 2014 Free Software Foundation, Inc.
     19 
     20    Copying and distribution of this script, with or without modification,
     21    are permitted in any medium without royalty provided the copyright
     22    notice and this notice are preserved.  */
     23 
     24 OUTPUT_FORMAT("${OUTPUT_FORMAT}")
     25 OUTPUT_ARCH(${ARCH})
     26 ${RELOCATING+ENTRY(${ENTRY})}
     27 
     28 /* Define memory regions.  */
     29 MEMORY
     30 {
     31         rom         : ORIGIN = 0x2,         LENGTH = 3M
     32         ram         : ORIGIN = 4M,          LENGTH = 10M
     33 }
     34 
     35 /*  Many sections come in three flavours.  There is the 'real' section,
     36     like ".data".  Then there are the per-procedure or per-variable
     37     sections, generated by -ffunction-sections and -fdata-sections in GCC,
     38     and useful for --gc-sections, which for a variable "foo" might be
     39     ".data.foo".  Then there are the linkonce sections, for which the linker
     40     eliminates duplicates, which are named like ".gnu.linkonce.d.foo".
     41     The exact correspondences are:
     42 
     43     Section	Linkonce section
     44     .text	.gnu.linkonce.t.foo
     45     .rdata	.gnu.linkonce.r.foo
     46     .data	.gnu.linkonce.d.foo
     47     .bss	.gnu.linkonce.b.foo
     48     .debug_info	.gnu.linkonce.wi.foo  */
     49 
     50 SECTIONS
     51 {
     52   .init :
     53   { 
     54     __INIT_START = .; 
     55     KEEP (*(.init))
     56     __INIT_END = .; 
     57   } > rom
     58 
     59   .fini :
     60   { 
     61     __FINI_START = .; 
     62     KEEP (*(.fini))
     63     __FINI_END = .; 
     64   } > rom
     65 
     66   .jcr :
     67   { 
     68     KEEP (*(.jcr))
     69   } > rom
     70 
     71   .text : 
     72   {
     73     __TEXT_START = .;
     74     *(.text) *(.text.*) *(.gnu.linkonce.t.*)
     75     __TEXT_END = .;
     76   } > rom
     77 
     78   .rdata :
     79   {
     80     __RDATA_START = .;
     81     *(.rdata_4) *(.rdata_2) *(.rdata_1) *(.rdata.*) *(.gnu.linkonce.r.*) *(.rodata*)
     82     __RDATA_END = .;
     83   } > rom
     84 
     85   .ctor ALIGN(4) : 
     86   { 
     87     __CTOR_START = .; 
     88     /* The compiler uses crtbegin.o to find the start
     89        of the constructors, so we make sure it is
     90        first.  Because this is a wildcard, it
     91        doesn't matter if the user does not
     92        actually link against crtbegin.o; the
     93        linker won't look for a file to match a
     94        wildcard.  The wildcard also means that it
     95        doesn't matter which directory crtbegin.o
     96        is in.  */
     97 
     98     KEEP (*crtbegin*.o(.ctors))
     99 
    100     /* We don't want to include the .ctor section from
    101        the crtend.o file until after the sorted ctors.
    102        The .ctor section from the crtend file contains the
    103        end of ctors marker and it must be last */
    104 
    105     KEEP (*(EXCLUDE_FILE (*crtend*.o) .ctors))
    106     KEEP (*(SORT(.ctors.*)))
    107     KEEP (*(.ctors))
    108     __CTOR_END = .; 
    109   } > rom
    110 
    111   .dtor ALIGN(4) : 
    112   { 
    113     __DTOR_START = .; 
    114     KEEP (*crtbegin*.o(.dtors))
    115     KEEP (*(EXCLUDE_FILE (*crtend*.o) .dtors))
    116     KEEP (*(SORT(.dtors.*)))
    117     KEEP (*(.dtors))
    118     __DTOR_END = .; 
    119   } > rom
    120 
    121   .data :
    122   {
    123     __DATA_START = .;
    124     *(.data_4) *(.data_2) *(.data_1) *(.data) *(.data.*) *(.gnu.linkonce.d.*)
    125     __DATA_END = .;
    126   } > ram AT > rom
    127 
    128   .bss (NOLOAD) :
    129   {
    130     __BSS_START = .;
    131     *(.bss_4) *(.bss_2) *(.bss_1) *(.bss) *(COMMON) *(.bss.*) *(.gnu.linkonce.b.*)
    132     __BSS_END = .;
    133   } > ram
    134 
    135 /* You may change the sizes of the following sections to fit the actual
    136    size your program requires.
    137 
    138    The heap and stack are aligned to the bus width, as a speed optimization
    139    for accessing data located there.  */
    140 
    141   .heap (NOLOAD) :
    142   {
    143     . = ALIGN(4);
    144     __HEAP_START = .;
    145     . += 0x2000; __HEAP_MAX = .;
    146   } > ram
    147 
    148   .stack (NOLOAD) :
    149   {
    150     . = ALIGN(4);
    151     . += 0x6000;
    152     __STACK_START = .;
    153   } > ram
    154 
    155   .istack (NOLOAD) :
    156   {
    157     . = ALIGN(4);
    158     . += 0x100;
    159     __ISTACK_START = .;
    160   } > ram
    161 
    162   .comment        0 : { *(.comment) }
    163 
    164 EOF
    165 
    166 . $srcdir/scripttempl/DWARF.sc
    167 
    168 cat <<EOF
    169 }
    170 
    171 __DATA_IMAGE_START = LOADADDR(.data);
    172 EOF
    173