gas/
[external/binutils.git] / ld / scripttempl / elf32cr16c.sc
1 # Linker Script for National Semiconductor's CR16C-ELF32.
2
3 test -z "$ENTRY" && ENTRY=_start
4 cat <<EOF
5
6 /* Example Linker Script for linking NS CR16C or CR16CPlus
7    elf32 files, which were compiled with either the near data
8    model or the default data model.  */
9
10 /* Force the entry point to be entered in the output file as
11    an undefined symbol. This is needed in case the entry point
12    (which is not called explicitly) is in an archive (which is
13    the usual case).  */
14
15 EXTERN(${ENTRY})
16
17 ENTRY(${ENTRY})
18
19 MEMORY
20 {
21   near_rom  : ORIGIN = 0x4,     LENGTH = 512K - 4
22   near_ram  : ORIGIN = 512K,    LENGTH = 512K - 64K
23   rom       : ORIGIN = 1M,      LENGTH = 3M
24   ram       : ORIGIN = 4M,      LENGTH = 10M
25 }
26
27 SECTIONS
28 {
29 /* The heap is located in near memory, to suit both the near and
30    default data models.  The heap and stack are aligned to the bus
31    width, as a speed optimization for accessing  data located
32    there. The alignment to 4 bytes is compatible for both the CR16C
33    bus width (2 bytes) and CR16CPlus bus width (4 bytes).  */
34
35   .text          : { __TEXT_START = .;   *(.text)                                        __TEXT_END = .; } > rom        
36   .rdata         : { __RDATA_START = .;  *(.rdata_4) *(.rdata_2) *(.rdata_1)             __RDATA_END = .; } > near_rom
37   .ctor ALIGN(4) : { __CTOR_LIST = .;    *(.ctors)                                       __CTOR_END = .; } > near_rom
38   .dtor ALIGN(4) : { __DTOR_LIST = .;    *(.dtors)                                       __DTOR_END = .; } > near_rom
39   .data          : { __DATA_START = .;   *(.data_4) *(.data_2) *(.data_1) *(.data)       __DATA_END = .; } > ram AT > rom
40   .bss (NOLOAD)  : { __BSS_START = .;    *(.bss_4) *(.bss_2) *(.bss_1) *(.bss) *(COMMON) __BSS_END = .; } > ram
41   .nrdata        : { __NRDATA_START = .; *(.nrdat_4) *(.nrdat_2) *(.nrdat_1)             __NRDATA_END =  .; } > near_rom
42   .ndata         : { __NDATA_START = .;  *(.ndata_4) *(.ndata_2) *(.ndata_1)             __NDATA_END = .; } > near_ram AT > rom
43   .nbss (NOLOAD) : { __NBSS_START = .;   *(.nbss_4) *(.nbss_2) *(.nbss_1) *(.ncommon)    __NBSS_END = .; } > near_ram
44   .heap          : { . = ALIGN(4); __HEAP_START = .; . += 0x2000;                        __HEAP_MAX = .; } > near_ram
45   .stack         : { . = ALIGN(4); . += 0x6000; __STACK_START = .; } > ram
46   .istack        : { . = ALIGN(2); . += 0x100; __ISTACK_START = .; } > ram
47 }
48
49 __DATA_IMAGE_START = LOADADDR(.data);
50 __NDATA_IMAGE_START = LOADADDR(.ndata);
51
52 EOF