/* 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 = CONFIG_SYS_SDRAM_BASE, LENGTH = CONFIG_SYS_SDRAM_SIZE
}

ENTRY(_start)

SECTIONS
{
	. = CONFIG_SYS_TEXT_BASE;
	reloc_dst = .;

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

	.text :
	{
		KEEP(*/start.o		(.text))
		KEEP(CONFIG_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 = .);
}
