1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * ld script for the c6x kernel
4 *
5 *  Copyright (C) 2010, 2011 Texas Instruments Incorporated
6 *  Mark Salter <msalter@redhat.com>
7 */
8#include <asm-generic/vmlinux.lds.h>
9#include <asm/thread_info.h>
10#include <asm/page.h>
11
12ENTRY(_c_int00)
13
14#if defined(CONFIG_CPU_BIG_ENDIAN)
15jiffies = jiffies_64 + 4;
16#else
17jiffies = jiffies_64;
18#endif
19
20#define	READONLY_SEGMENT_START	\
21	. = PAGE_OFFSET;
22#define	READWRITE_SEGMENT_START	\
23	. = ALIGN(128);		\
24	_data_lma = .;
25
26SECTIONS
27{
28	/*
29	 * Start kernel read only segment
30	 */
31	READONLY_SEGMENT_START
32
33	.vectors :
34	{
35		_vectors_start = .;
36		*(.vectors)
37		. = ALIGN(0x400);
38		_vectors_end = .;
39	}
40
41	/*
42	 * This section contains data which may be shared with other
43	 * cores. It needs to be a fixed offset from PAGE_OFFSET
44	 * regardless of kernel configuration.
45	 */
46	.virtio_ipc_dev :
47	{
48		*(.virtio_ipc_dev)
49	}
50
51	. = ALIGN(PAGE_SIZE);
52	__init_begin = .;
53	.init :
54	{
55		_sinittext = .;
56		HEAD_TEXT
57		INIT_TEXT
58		_einittext = .;
59	}
60
61	INIT_DATA_SECTION(16)
62
63	PERCPU_SECTION(128)
64
65	. = ALIGN(PAGE_SIZE);
66	__init_end = .;
67
68	.text :
69	{
70		_text = .;
71		_stext = .;
72		TEXT_TEXT
73		SCHED_TEXT
74		CPUIDLE_TEXT
75		LOCK_TEXT
76		IRQENTRY_TEXT
77		SOFTIRQENTRY_TEXT
78		KPROBES_TEXT
79		*(.fixup)
80		*(.gnu.warning)
81	}
82
83	EXCEPTION_TABLE(16)
84	NOTES
85
86	RO_DATA_SECTION(PAGE_SIZE)
87	.const :
88	{
89		*(.const .const.* .gnu.linkonce.r.*)
90		*(.switch)
91	}
92
93	_etext = .;
94
95	/*
96	 * Start kernel read-write segment.
97	 */
98	READWRITE_SEGMENT_START
99	_sdata = .;
100
101	.fardata : AT(ADDR(.fardata) - LOAD_OFFSET)
102	{
103		INIT_TASK_DATA(THREAD_SIZE)
104		NOSAVE_DATA
105		PAGE_ALIGNED_DATA(PAGE_SIZE)
106		CACHELINE_ALIGNED_DATA(128)
107		READ_MOSTLY_DATA(128)
108		DATA_DATA
109		CONSTRUCTORS
110		*(.data1)
111		*(.fardata .fardata.*)
112		*(.data.debug_bpt)
113	}
114
115	.neardata ALIGN(8) : AT(ADDR(.neardata) - LOAD_OFFSET)
116	{
117		*(.neardata2 .neardata2.* .gnu.linkonce.s2.*)
118		*(.neardata .neardata.* .gnu.linkonce.s.*)
119		. = ALIGN(8);
120	}
121
122	BUG_TABLE
123
124	_edata = .;
125
126	__bss_start = .;
127	SBSS(8)
128	BSS(8)
129	.far :
130	{
131		. = ALIGN(8);
132		*(.dynfar)
133		*(.far .far.* .gnu.linkonce.b.*)
134		. = ALIGN(8);
135	}
136	__bss_stop = .;
137
138	_end = .;
139
140	DWARF_DEBUG
141
142	/DISCARD/ :
143	{
144		  EXIT_TEXT
145		  EXIT_DATA
146		  EXIT_CALL
147		  *(.discard)
148		  *(.discard.*)
149		  *(.interp)
150	}
151}
152