OUTPUT_FORMAT(elf32-i386)
OUTPUT_ARCH(i386)

ENTRY(entry)

/* Initial load address
 * To be loaded by GRUB, this must be >= 1MB
 */
BASE_ADDR = 0x100000;

/* 16KB heap and stack */
HEAP_SIZE = 16384;
STACK_SIZE = 16384;

SECTIONS
{
    . = BASE_ADDR;

    /* Put Multiboot header near beginning of file, if any. */
    .hdr : { *(.hdr) *(.hdr.*) }

    /* 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. */
    . = ALIGN(16);
    _start = .;

    /* Putting ELF notes near beginning of file might help bootloaders.
     * We discard .note sections other than .note.ELFBoot,
     * because some versions of GCC generates useless ones. */
    .note : { *(.note.ELFBoot) }

    /* Normal sections */
    .text : { *(.text) *(.text.*) }
    .rodata : {
	. = ALIGN(4);
	sound_drivers_start = .;
	*(.rodata.sound_drivers)
	sound_drivers_end = .;
	*(.rodata)
	*(.rodata.*)
    }
    .data : { *(.data) *(.data.*) }

    .bss : {
	*(.bss)
	*(.bss.*)
	*(COMMON)

	/* Put heap and stack here, so they are included in PT_LOAD segment
	 * and the bootloader is aware of it. */

	. = ALIGN(16);
	_heap = .;
	. += HEAP_SIZE;
	. = ALIGN(16);
	_eheap = .;

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

    .initctx : {
	/* Initial contents of stack. This MUST BE just after the stack. */
	*(.initctx)
    }

    _end = .;

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