# Copyright (C) 2014-2021 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.

cat <<EOF
/* Copyright (C) 2014-2021 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(${ARCH})
EOF

test -n "${RELOCATING}" && cat <<EOF
ENTRY ("_start")
MEMORY
{
	vectarea : o =0xc00000, l = 0x0300

	introm    : o = 0xc00300, l = 0x16000
	/* The stack starts at the top of main ram.  */

	dram   : o = 0x8000 , l = 0xffff
	/* At the very top of the address space is the 8-bit area.  */

	ldata	: o =0x4000 ,l = 0x0200
}
EOF

cat <<EOF
SECTIONS
{
/*.vects :
	{
	  *(.vects)
	} ${RELOCATING+ > vectarea} */
.init :
	{
	  KEEP (*(SORT_NONE(.init)))
	  ${RELOCATING+KEEP (*(SORT_NONE(.fini)))}
	} ${RELOCATING+ >introm}

.text :
	{
	  ${RELOCATING+*(.rodata)}
	  ${RELOCATING+*(.text.*)}
	  *(.text)
	  ${RELOCATING+ _etext = . ; }
	} ${RELOCATING+ > introm}
.data :
	{
	  *(.data)
	  ${RELOCATING+*(.data.*)}

	  ${RELOCATING+ _edata = . ; }
	} ${RELOCATING+ > dram}

.bss :
	{
	  ${RELOCATING+ _bss_start = . ;}
	  *(.bss)
	  ${RELOCATING+*(COMMON)}
	  ${RELOCATING+ _end = . ;  }
	} ${RELOCATING+ > dram}

.ldata :
	{
	  *(.ldata)
	} ${RELOCATING+ > ldata}

.vects :
	{
	  *(.vects)
	} ${RELOCATING+ > vectarea}
}
EOF
