/*
 * wakeup.ld
 *
 * Linker script for the real-mode wakeup code
 */
#undef i386
#include "wakeup.h"

OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
OUTPUT_ARCH(i386)
ENTRY(_start)

SECTIONS
{
	. = 0;
	.text : {
		 *(.text*)
	}

	. = ALIGN(16);
	.rodata : {
		*(.rodata*)
	}

	.videocards : {
		video_cards = .;
		*(.videocards)
		video_cards_end = .;
	}

	. = ALIGN(16);
	.data : {
		 *(.data*)
	}

	.signature : {
		end_signature = .;
		LONG(0x65a22c82)
	}

	. = ALIGN(16);
	.bss :	{
		__bss_start = .;
		*(.bss)
		__bss_end = .;
	}

	. = HEADER_OFFSET;
	.header : {
		*(.header)
	}

	. = ALIGN(16);
	_end = .;

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

	/*
	 * The ASSERT() sink to . is intentional, for binutils 2.14 compatibility:
	 */
	. = ASSERT(_end <= WAKEUP_SIZE, "Wakeup too big!");
}
