1# Linker Script for National Semiconductor's CR16C-ELF32. 2 3test -z "$ENTRY" && ENTRY=_start 4cat <<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 15EXTERN(${ENTRY}) 16 17ENTRY(${ENTRY}) 18 19MEMORY 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 27SECTIONS 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 52EOF 53