Home | History | Annotate | Download | only in scripttempl
      1 # Linker Script for National Semiconductor's CR16C-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 test -z "$ENTRY" && ENTRY=_start
     10 cat <<EOF
     11 
     12 /* Example Linker Script for linking NS CR16C or CR16CPlus
     13    elf32 files, which were compiled with either the near data
     14    model or the default data model.
     15 
     16    Copyright (C) 2014 Free Software Foundation, Inc.
     17 
     18    Copying and distribution of this script, with or without modification,
     19    are permitted in any medium without royalty provided the copyright
     20    notice and this notice are preserved.  */
     21 
     22 
     23 ${RELOCATING+ENTRY(${ENTRY})}
     24 
     25 MEMORY
     26 {
     27   near_rom  : ORIGIN = 0x4,     LENGTH = 512K - 4
     28   near_ram  : ORIGIN = 512K,    LENGTH = 512K - 64K
     29   rom  	    : ORIGIN = 1M,      LENGTH = 3M
     30   ram 	    : ORIGIN = 4M,      LENGTH = 10M
     31 }
     32 
     33 SECTIONS
     34 {
     35 /* The heap is located in near memory, to suit both the near and
     36    default data models.  The heap and stack are aligned to the bus
     37    width, as a speed optimization for accessing  data located
     38    there. The alignment to 4 bytes is compatible for both the CR16C
     39    bus width (2 bytes) and CR16CPlus bus width (4 bytes).  */
     40 
     41   .text            : { __TEXT_START = .;   *(.text)                                        __TEXT_END = .; } > rom	
     42   .rdata           : { __RDATA_START = .;  *(.rdata_4) *(.rdata_2) *(.rdata_1)             __RDATA_END = .; } > near_rom
     43   .ctor ALIGN(4)   : { __CTOR_LIST = .;    *(.ctors)                                       __CTOR_END = .; } > near_rom
     44   .dtor ALIGN(4)   : { __DTOR_LIST = .;    *(.dtors)                                       __DTOR_END = .; } > near_rom
     45   .data            : { __DATA_START = .;   *(.data_4) *(.data_2) *(.data_1) *(.data)       __DATA_END = .; } > ram AT > rom
     46   .bss (NOLOAD)    : { __BSS_START = .;    *(.bss_4) *(.bss_2) *(.bss_1) *(.bss) *(COMMON) __BSS_END = .; } > ram
     47   .nrdata          : { __NRDATA_START = .; *(.nrdat_4) *(.nrdat_2) *(.nrdat_1)             __NRDATA_END =  .; } > near_rom
     48   .ndata           : { __NDATA_START = .;  *(.ndata_4) *(.ndata_2) *(.ndata_1)             __NDATA_END = .; } > near_ram AT > rom
     49   .nbss (NOLOAD)   : { __NBSS_START = .;   *(.nbss_4) *(.nbss_2) *(.nbss_1) *(.ncommon)    __NBSS_END = .; } > near_ram
     50   .heap (NOLOAD)   : { . = ALIGN(4); __HEAP_START = .; . += 0x2000;                        __HEAP_MAX = .; } > near_ram
     51   .stack (NOLOAD)  : { . = ALIGN(4); . += 0x6000; __STACK_START = .; } > ram
     52   .istack (NOLOAD) : { . = ALIGN(2); . += 0x100; __ISTACK_START = .; } > ram
     53 }
     54 
     55 __DATA_IMAGE_START = LOADADDR(.data);
     56 __NDATA_IMAGE_START = LOADADDR(.ndata);
     57 
     58 EOF
     59