1 |
6 |
jlechner |
# Linker Script for National Semiconductor's CR16C-ELF32.
|
2 |
|
|
|
3 |
|
|
test -z "$ENTRY" && ENTRY=_start
|
4 |
|
|
cat <
|
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 |
|
|
${RELOCATING+EXTERN(${ENTRY})}
|
16 |
|
|
${RELOCATING+ENTRY(${ENTRY})}
|
17 |
|
|
|
18 |
|
|
MEMORY
|
19 |
|
|
{
|
20 |
|
|
near_rom : ORIGIN = 0x4, LENGTH = 512K - 4
|
21 |
|
|
near_ram : ORIGIN = 512K, LENGTH = 512K - 64K
|
22 |
|
|
rom : ORIGIN = 1M, LENGTH = 3M
|
23 |
|
|
ram : ORIGIN = 4M, LENGTH = 10M
|
24 |
|
|
}
|
25 |
|
|
|
26 |
|
|
SECTIONS
|
27 |
|
|
{
|
28 |
|
|
/* The heap is located in near memory, to suit both the near and
|
29 |
|
|
default data models. The heap and stack are aligned to the bus
|
30 |
|
|
width, as a speed optimization for accessing data located
|
31 |
|
|
there. The alignment to 4 bytes is compatible for both the CR16C
|
32 |
|
|
bus width (2 bytes) and CR16CPlus bus width (4 bytes). */
|
33 |
|
|
|
34 |
|
|
.text : { __TEXT_START = .; *(.text) __TEXT_END = .; } > rom
|
35 |
|
|
.rdata : { __RDATA_START = .; *(.rdata_4) *(.rdata_2) *(.rdata_1) __RDATA_END = .; } > near_rom
|
36 |
|
|
.ctor ALIGN(4) : { __CTOR_LIST = .; *(.ctors) __CTOR_END = .; } > near_rom
|
37 |
|
|
.dtor ALIGN(4) : { __DTOR_LIST = .; *(.dtors) __DTOR_END = .; } > near_rom
|
38 |
|
|
.data : { __DATA_START = .; *(.data_4) *(.data_2) *(.data_1) *(.data) __DATA_END = .; } > ram AT > rom
|
39 |
|
|
.bss (NOLOAD) : { __BSS_START = .; *(.bss_4) *(.bss_2) *(.bss_1) *(.bss) *(COMMON) __BSS_END = .; } > ram
|
40 |
|
|
.nrdata : { __NRDATA_START = .; *(.nrdat_4) *(.nrdat_2) *(.nrdat_1) __NRDATA_END = .; } > near_rom
|
41 |
|
|
.ndata : { __NDATA_START = .; *(.ndata_4) *(.ndata_2) *(.ndata_1) __NDATA_END = .; } > near_ram AT > rom
|
42 |
|
|
.nbss (NOLOAD) : { __NBSS_START = .; *(.nbss_4) *(.nbss_2) *(.nbss_1) *(.ncommon) __NBSS_END = .; } > near_ram
|
43 |
|
|
.heap : { . = ALIGN(4); __HEAP_START = .; . += 0x2000; __HEAP_MAX = .; } > near_ram
|
44 |
|
|
.stack : { . = ALIGN(4); . += 0x6000; __STACK_START = .; } > ram
|
45 |
|
|
.istack : { . = ALIGN(2); . += 0x100; __ISTACK_START = .; } > ram
|
46 |
|
|
}
|
47 |
|
|
|
48 |
|
|
__DATA_IMAGE_START = LOADADDR(.data);
|
49 |
|
|
__NDATA_IMAGE_START = LOADADDR(.ndata);
|
50 |
|
|
|
51 |
|
|
EOF
|