TORS=".tors :
  {
    ___ctors = . ;
    *(.ctors)
    ___ctors_end = . ;
    ___dtors = . ;
    *(.dtors)
    ___dtors_end = . ;
  } > ram"

cat <<EOF
OUTPUT_FORMAT("${OUTPUT_FORMAT}")
OUTPUT_ARCH(h8300h)
ENTRY("_start")

/* The memory size is 256KB to coincide with the simulator.
   Don't change either without considering the other.  */

MEMORY
{
        /* 0xc4 is a magic entry.  We should have the linker just
           skip over it one day... */
        vectors : o = 0x0000, l = 0xc4
        magicvectors : o = 0xc4, l = 0x3c
	/* We still only use 256k as the main ram size.  */
	ram    : o = 0x0100, l = 0x3fefc
	/* The stack starts at the top of main ram.  */
	topram : o = 0x3fffc, l = 0x4
	/* This holds variables in the "tiny" sections.  */
	tiny   : o = 0xff8000, l = 0x7f00
	/* At the very top of the address space is the 8-bit area.  */
	eight  : o = 0xffff00, l = 0x100
}

SECTIONS 				
{ 					
.vectors :
	{
	  /* Use something like this to place a specific
	     function's address into the vector table.

	     LONG (ABSOLUTE (_foobar)).  */

	  *(.vectors)
	} ${RELOCATING+ > vectors}
	
.text :
	{ 					
	  *(.rodata) 				
	  *(.text) 				
	  *(.strings)
   	  ${RELOCATING+ _etext = . ; }
	} ${RELOCATING+ > ram}
	
	${CONSTRUCTING+${TORS}}
	
.data :
	{
	  *(.data)
	  ${RELOCATING+ _edata = . ; }
	} ${RELOCATING+ > ram}
	
.bss :
	{
	  ${RELOCATING+ _bss_start = . ;}
	  *(.bss)
	  *(COMMON)
	  ${RELOCATING+ _end = . ;  }
	} ${RELOCATING+ >ram}
	
.stack :
	{
	  ${RELOCATING+ _stack = . ; }
	  *(.stack)
	} ${RELOCATING+ > topram}
	
.tiny :
	{
	  *(.tiny)
	} ${RELOCATING+ > tiny}
	
.eight :
	{
	  *(.eight)
	} ${RELOCATING+ > eight}
	
.stab 0 ${RELOCATING+(NOLOAD)} :
	{
	  [ .stab ]
	}
	
.stabstr 0 ${RELOCATING+(NOLOAD)} :
	{
	  [ .stabstr ]
	}
}
EOF
