1# Linker Script for National Semiconductor's CR16C-ELF32.
2#
3# Copyright (C) 2014-2016 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
9test -z "$ENTRY" && ENTRY=_start
10cat <<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-2016 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
25MEMORY
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
33SECTIONS
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
58EOF
59