OUTPUT_FORMAT(elf32-sparc)
OUTPUT_ARCH(sparc)

/* Qemu ELF loader can't handle very complex files, so we put ELFBoot
info to rodata and put initctx to data.*/

ENTRY(trap_table)

/* Initial load address
 */
BASE_ADDR = 0xffd00000;

/* 16KB stack */
STACK_SIZE = 16384;
/* 256k general alloc + 256k Forth dictionary + 128k Forth memory */
VMEM_SIZE = (256 + 256 + 128) * 1024;
IOMEM_SIZE = 256 * 1024 + 768 * 1024;

SECTIONS
{
    . = BASE_ADDR;

    /* Start of the program.
     * Now the version string is in the note, we must include it
     * in the program. Otherwise we lose the string after relocation. */
    _start = .;

    /* Normal sections */
    .text ALIGN(4096): {
        *(.text.vectors)
        *(.text)
        *(.text.*)
    }
    .rodata ALIGN(4096): {
        _rodata = .;
	sound_drivers_start = .;
	*(.rodata.sound_drivers)
	sound_drivers_end = .;
	*(.rodata)
	*(.rodata.*)
        *(.note.ELFBoot)
    }
    .data ALIGN(4096): {
        _data = .;
        *(.data)
        *(.data.*)
    }

    .bss ALIGN(4096): {
        _bss = .;
	*(.bss)
	*(.bss.*)
	*(COMMON)

	. = ALIGN(4096);
	_vmem = .;
	. += VMEM_SIZE;
        _evmem = .;

	_stack = .;
	. += STACK_SIZE;
	. = ALIGN(16);
	_estack = .;
    }

    . = ALIGN(4096);
    _end = .;
    _iomem = _end + IOMEM_SIZE;

    /* We discard .note sections other than .note.ELFBoot,
     * because some versions of GCC generates useless ones. */

    /DISCARD/ : { *(.comment*) *(.note.*) }
}
