1 # Linker Script for National Semiconductor's CR16C-ELF32. 2 # 3 # Copyright (C) 2014 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 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 59