ENTRY(__start);

MEMORY {
	bios	: ORIGIN = 0x00000000, LENGTH = 528K /* 0x00000000 - 0x00084000: BIOS memory */
	bram	: ORIGIN = 0x00084000, LENGTH = 496K /* 0x00084000 - 0x00100000: BIOS unused memory */
	gram	: ORIGIN = 0x00100000, LENGTH =  31M /* 0x00100000 - 0x02000000: GAME memory */
}

REGION_ALIAS("MAIN_REGION", bram);

PHDRS {
  text PT_LOAD;
}

SECTIONS {
	.text : {
		*(.text)
	} >MAIN_REGION :text

	.reginfo : { *(.reginfo) } >MAIN_REGION

	.ctors ALIGN(16): {
		KEEP(*crtbegin*.o(.ctors))
		KEEP(*(EXCLUDE_FILE(*crtend*.o) .ctors))
		KEEP(*(SORT(.ctors.*)))
		KEEP(*(.ctors))
	} >MAIN_REGION

	.dtors ALIGN(16): {
		KEEP(*crtbegin*.o(.dtors))
		KEEP(*(EXCLUDE_FILE(*crtend*.o) .dtors))
		KEEP(*(SORT(.dtors.*)))
		KEEP(*(.dtors))
	} >MAIN_REGION

	.rodata ALIGN(128): {
		*(.rodata)
	} >MAIN_REGION

	.data ALIGN(128): {
		_fdata = . ;
		*(.data)
		SORT(CONSTRUCTORS)
	} >MAIN_REGION

	_gp = ALIGN(128) + 0x7ff0;
	.lit4 ALIGN(128): { *(.lit4) } >MAIN_REGION
	.lit8 ALIGN(128): { *(.lit8) } >MAIN_REGION

	.sdata ALIGN(128): {
		*(.sdata)
	} >MAIN_REGION

	.sbss ALIGN(128) : {
		_fbss = . ;
		*(.sbss)
	} >MAIN_REGION

	.bss ALIGN(128) : {
		*(.bss)
	} >MAIN_REGION

	/* Symbols needed by crt0.s.  */
	PROVIDE(_end = .);
	PROVIDE(_heap_size = -1);

	PROVIDE(_stack = .);
	PROVIDE(_stack_size = ORIGIN(MAIN_REGION) + LENGTH(MAIN_REGION) - _stack);
}
