/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * Copyright (C) 2016 Vladimir Zapolskiy <vz@mleia.com>
 * Copyright (C) 2008-2009 Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com>
 * Copyright (C) 2008 Mark Jonas <mark.jonas@de.bosch.com>
 * Copyright (C) 2007 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
 */

#include "config.h"

#ifdef CONFIG_SYS_BIG_ENDIAN
OUTPUT_FORMAT("elf32-shbig-linux", "elf32-shbig-linux", "elf32-sh-linux")
#else
OUTPUT_FORMAT("elf32-sh-linux", "elf32-sh-linux", "elf32-sh-linux")
#endif

OUTPUT_ARCH(sh)

MEMORY
{
	ram	: ORIGIN = CFG_SYS_SDRAM_BASE, LENGTH = CFG_SYS_SDRAM_SIZE
}

ENTRY(_start)

SECTIONS
{
	. = CONFIG_TEXT_BASE;
	reloc_dst = .;

	PROVIDE (_ftext = .);
	PROVIDE (_fcode = .);
	PROVIDE (_start = .);

	.text :
	{
		KEEP(*/start.o		(.text))
		KEEP(CFG_BOARDDIR/lowlevel_init.o	(.text .spiboot1.text))
		KEEP(*(.spiboot2.text))
		. = ALIGN(8192);
#ifdef CONFIG_ENV_IS_IN_FLASH
		env/embedded.o  (.doesnotexist)
		. = ALIGN(8192);
#endif
		*(.text)
		. = ALIGN(4);
	} >ram =0xFF
	PROVIDE (_ecode = .);
	.rodata :
	{
		*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
		. = ALIGN(4);
	} >ram
	PROVIDE (_etext = .);


	PROVIDE (_fdata = .);
	.data :
	{
		*(.data)
		. = ALIGN(4);
	} >ram
	PROVIDE (_edata = .);

	PROVIDE (_fgot = .);
	.got :
	{
		*(.got.plt) *(.got)
		. = ALIGN(4);
	} >ram
	PROVIDE (_egot = .);

	__u_boot_list : {
		KEEP(*(SORT(__u_boot_list*)));
	} >ram

	PROVIDE (__init_end = .);
	PROVIDE (reloc_dst_end = .);
	PROVIDE (_end = .);

	PROVIDE (bss_start = .);
	PROVIDE (__bss_start = .);
	.bss :
	{
		*(.bss)
		. = ALIGN(4);
	} >ram
	PROVIDE (bss_end = .);
	PROVIDE (__bss_end = .);
}
