/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * (C) Copyright 2000
 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 * (C) Copyright 2015
 * Angelo Dureghello, Sysam Firmware, angelo@sysam.it
 */

#include <config.h>

OUTPUT_ARCH(m68k)
ENTRY(_start)

#ifndef LDS_BOARD_TEXT
#define LDS_BOARD_TEXT
#endif

SECTIONS
{
	.text :
	{
		CPUDIR/start.o (.text*)
		LDS_BOARD_TEXT

		*(.text*)
	}
	_etext = .;
	PROVIDE (etext = .);
	.rodata :
	{
		*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
	}

	/* Read-write section, merged into data segment: */
	. = (. + 0x00FF) & 0xFFFFFF00;
	_erotext = .;
	PROVIDE (erotext = .);

	.reloc :
	{
		__got_start = .;
		KEEP(*(.got))
		__got_end = .;
		_GOT2_TABLE_ = .;
		KEEP(*(.got2))
		_FIXUP_TABLE_ = .;
		KEEP(*(.fixup))
	}
	__got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2;
	__fixup_entries = (. - _FIXUP_TABLE_)>>2;

	.data :
	{
		*(.data*)
		*(.sdata*)
	}
	_edata = .;
	PROVIDE (edata = .);

	. = .;

	. = ALIGN(4);
	__u_boot_list : {
		KEEP(*(SORT(__u_boot_list*)));
	}

	. = .;
	__start___ex_table = .;
	__ex_table : { *(__ex_table) }
	__stop___ex_table = .;

	. = ALIGN(4);
	__init_begin = .;
	.text.init : { *(.text.init) }
	.data.init : { *(.data.init) }
	. = ALIGN(4);
	__init_end = .;

	_end = .;

	__bss_start = .;
	.bss (NOLOAD)       :
	{
		_sbss = .;
		*(.bss*)
		*(.sbss*)
		*(COMMON)
		. = ALIGN(4);
		_ebss = .;
	}
	__bss_end = . ;
	PROVIDE (end = .);
}
