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