| 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 | |
| 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-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 | |
| 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 |