# Default linker script for c54x, TI COFF(1).
# patterned after description in TI Assembler Tools PDF, SPRU102C, 7-53
#
# Copyright (C) 2014-2016 Free Software Foundation, Inc.
# 
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved.

test -z "$ENTRY" && ENTRY=_c_int00

cat <<EOF
/* Copyright (C) 2014-2016 Free Software Foundation, Inc.

   Copying and distribution of this script, with or without modification,
   are permitted in any medium without royalty provided the copyright
   notice and this notice are preserved.  */

OUTPUT_FORMAT("${OUTPUT_FORMAT}")
OUTPUT_ARCH("${OUTPUT_ARCH}")

MEMORY
{
	/*PAGE 0 : */ prog (RXI) : ORIGIN = 0x00000080, LENGTH = 0xFF00
	/*PAGE 1 : */ data (W) : ORIGIN = 0x01000080, LENGTH = 0xFF80
}

${RELOCATING+ENTRY (${ENTRY})}

SECTIONS 				
{ 					
	.text : 
	{
		___text__ = .;
		*(.text)
		etext = .;
		___etext__ = .;
	} > prog
	.data : 
	{
		___data__ = .;
		__data = .;
		*(.data)
		__edata = .;
		edata = .;
		___edata__ = .;
	} > prog
	/* all other initialized sections should be allocated here */
	.cinit : 
	{
		*(.cinit)
	} > prog
	.bss : 
	{
		___bss__ = .;
		__bss = .;
		*(.bss)
		*(COMMON)
		__ebss = .;
		end = .;
		___end__ = .;
	} > data
	/* all other uninitialized sections should be allocated here */
}
EOF
