/* SPDX-License-Identifier: GPL-2.0 */
/*
 * ld script for the c6x kernel
 *
 *  Copyright (C) 2010, 2011 Texas Instruments Incorporated
 *  Mark Salter <msalter@redhat.com>
 */

#define RO_EXCEPTION_TABLE_ALIGN	16

#include <asm-generic/vmlinux.lds.h>
#include <asm/thread_info.h>
#include <asm/page.h>

ENTRY(_c_int00)

#if defined(CONFIG_CPU_BIG_ENDIAN)
jiffies = jiffies_64 + 4;
#else
jiffies = jiffies_64;
#endif

#define	READONLY_SEGMENT_START	\
	. = PAGE_OFFSET;
#define	READWRITE_SEGMENT_START	\
	. = ALIGN(128);		\
	_data_lma = .;

SECTIONS
{
	/*
	 * Start kernel read only segment
	 */
	READONLY_SEGMENT_START

	.vectors :
	{
		_vectors_start = .;
		*(.vectors)
		. = ALIGN(0x400);
		_vectors_end = .;
	}

	/*
	 * This section contains data which may be shared with other
	 * cores. It needs to be a fixed offset from PAGE_OFFSET
	 * regardless of kernel configuration.
	 */
	.virtio_ipc_dev :
	{
		*(.virtio_ipc_dev)
	}

	. = ALIGN(PAGE_SIZE);
	__init_begin = .;
	.init :
	{
		_sinittext = .;
		HEAD_TEXT
		INIT_TEXT
		_einittext = .;
	}

	INIT_DATA_SECTION(16)

	PERCPU_SECTION(128)

	. = ALIGN(PAGE_SIZE);
	__init_end = .;

	.text :
	{
		_text = .;
		_stext = .;
		TEXT_TEXT
		SCHED_TEXT
		CPUIDLE_TEXT
		LOCK_TEXT
		IRQENTRY_TEXT
		SOFTIRQENTRY_TEXT
		KPROBES_TEXT
		*(.fixup)
		*(.gnu.warning)
	}

	RO_DATA(PAGE_SIZE)
	.const :
	{
		*(.const .const.* .gnu.linkonce.r.*)
		*(.switch)
	}

	_etext = .;

	/*
	 * Start kernel read-write segment.
	 */
	READWRITE_SEGMENT_START
	_sdata = .;

	.fardata : AT(ADDR(.fardata) - LOAD_OFFSET)
	{
		INIT_TASK_DATA(THREAD_SIZE)
		NOSAVE_DATA
		PAGE_ALIGNED_DATA(PAGE_SIZE)
		CACHELINE_ALIGNED_DATA(128)
		READ_MOSTLY_DATA(128)
		DATA_DATA
		CONSTRUCTORS
		*(.data1)
		*(.fardata .fardata.*)
		*(.data.debug_bpt)
	}

	.neardata ALIGN(8) : AT(ADDR(.neardata) - LOAD_OFFSET)
	{
		*(.neardata2 .neardata2.* .gnu.linkonce.s2.*)
		*(.neardata .neardata.* .gnu.linkonce.s.*)
		. = ALIGN(8);
	}

	BUG_TABLE

	_edata = .;

	__bss_start = .;
	SBSS(8)
	BSS(8)
	.far :
	{
		. = ALIGN(8);
		*(.dynfar)
		*(.far .far.* .gnu.linkonce.b.*)
		. = ALIGN(8);
	}
	__bss_stop = .;

	_end = .;

	DWARF_DEBUG

	/DISCARD/ :
	{
		  EXIT_TEXT
		  EXIT_DATA
		  EXIT_CALL
		  *(.discard)
		  *(.discard.*)
		  *(.interp)
	}
}
