/* 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 = .;

	. = ALIGN(4);
	__rel_dyn_start = .;
	.rela.dyn : {
		*(.rela.dyn)
	}
	__rel_dyn_end = .;

	. = ALIGN(4);
	__dyn_sym_start = .;
	.dynsym : {
		*(.dynsym)
	}
	__dyn_sym_end = .;

	_end = .;

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