/*
 * ld.script for compressed kernel support of MIPS
 *
 * Copyright (C) 2009 Lemote Inc.
 * Author: Wu Zhangjin <wuzhanjing@gmail.com>
 * Copyright (C) 2010 "Wu Zhangjin" <wuzhanjing@gmail.com>
 */

OUTPUT_ARCH(mips)
ENTRY(start)
SECTIONS
{
	/* Text and read-only data */
	/* . = VMLINUZ_LOAD_ADDRESS; */
	.text : {
		*(.text)
		*(.rodata)
	}
	/* End of text section */

	/* Writable data */
	.data : {
		*(.data)
		/* Put the compressed image here */
		__image_begin = .;
		*(.image)
		__image_end = .;
		CONSTRUCTORS
	}
	. = ALIGN(16);
	_edata = .;
	/* End of data section */

	/* BSS */
	.bss : {
		*(.bss)
	}
	. = ALIGN(16);
	_end = .;

	/* Sections to be discarded */
	/DISCARD/ : {
		*(.MIPS.options)
		*(.options)
		*(.pdr)
		*(.reginfo)
		*(.comment)
		*(.note)
	}
}
