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}
.tors : {
	___ctors = . ;
	*(.ctors)
	___ctors_end = . ;
	___dtors = . ;
	*(.dtors)
	___dtors_end = . ;
	} ${RELOCATING+ > ram}
.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
