xref: /OK3568_Linux_fs/kernel/arch/sparc/kernel/vmlinux.lds.S (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun/* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun/* ld script for sparc32/sparc64 kernel */
3*4882a593Smuzhiyun
4*4882a593Smuzhiyun#include <asm-generic/vmlinux.lds.h>
5*4882a593Smuzhiyun
6*4882a593Smuzhiyun#include <asm/page.h>
7*4882a593Smuzhiyun#include <asm/thread_info.h>
8*4882a593Smuzhiyun
9*4882a593Smuzhiyun#ifdef CONFIG_SPARC32
10*4882a593Smuzhiyun#define INITIAL_ADDRESS  0x10000 + SIZEOF_HEADERS
11*4882a593Smuzhiyun#define TEXTSTART	0xf0004000
12*4882a593Smuzhiyun
13*4882a593Smuzhiyun#define SMP_CACHE_BYTES_SHIFT 5
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun#else
16*4882a593Smuzhiyun#define SMP_CACHE_BYTES_SHIFT 6
17*4882a593Smuzhiyun#define INITIAL_ADDRESS 0x4000
18*4882a593Smuzhiyun#define TEXTSTART      0x0000000000404000
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun#endif
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun#define SMP_CACHE_BYTES (1 << SMP_CACHE_BYTES_SHIFT)
23*4882a593Smuzhiyun
24*4882a593Smuzhiyun#ifdef CONFIG_SPARC32
25*4882a593SmuzhiyunOUTPUT_FORMAT("elf32-sparc", "elf32-sparc", "elf32-sparc")
26*4882a593SmuzhiyunOUTPUT_ARCH(sparc)
27*4882a593SmuzhiyunENTRY(_start)
28*4882a593Smuzhiyunjiffies = jiffies_64 + 4;
29*4882a593Smuzhiyun#else
30*4882a593Smuzhiyun/* sparc64 */
31*4882a593SmuzhiyunOUTPUT_FORMAT("elf64-sparc", "elf64-sparc", "elf64-sparc")
32*4882a593SmuzhiyunOUTPUT_ARCH(sparc:v9a)
33*4882a593SmuzhiyunENTRY(_start)
34*4882a593Smuzhiyunjiffies = jiffies_64;
35*4882a593Smuzhiyun#endif
36*4882a593Smuzhiyun
37*4882a593Smuzhiyun#ifdef CONFIG_SPARC64
38*4882a593SmuzhiyunASSERT((swapper_tsb == 0x0000000000408000), "Error: sparc64 early assembler too large")
39*4882a593Smuzhiyun#endif
40*4882a593Smuzhiyun
41*4882a593SmuzhiyunSECTIONS
42*4882a593Smuzhiyun{
43*4882a593Smuzhiyun#ifdef CONFIG_SPARC64
44*4882a593Smuzhiyun	swapper_pg_dir = 0x0000000000402000;
45*4882a593Smuzhiyun#endif
46*4882a593Smuzhiyun	. = INITIAL_ADDRESS;
47*4882a593Smuzhiyun	.text TEXTSTART :
48*4882a593Smuzhiyun	{
49*4882a593Smuzhiyun		_text = .;
50*4882a593Smuzhiyun		HEAD_TEXT
51*4882a593Smuzhiyun		TEXT_TEXT
52*4882a593Smuzhiyun		SCHED_TEXT
53*4882a593Smuzhiyun		CPUIDLE_TEXT
54*4882a593Smuzhiyun		LOCK_TEXT
55*4882a593Smuzhiyun		KPROBES_TEXT
56*4882a593Smuzhiyun		IRQENTRY_TEXT
57*4882a593Smuzhiyun		SOFTIRQENTRY_TEXT
58*4882a593Smuzhiyun		*(.gnu.warning)
59*4882a593Smuzhiyun	} = 0
60*4882a593Smuzhiyun	_etext = .;
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun	RO_DATA(PAGE_SIZE)
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun	/* Start of data section */
65*4882a593Smuzhiyun	_sdata = .;
66*4882a593Smuzhiyun
67*4882a593Smuzhiyun	.data1 : {
68*4882a593Smuzhiyun		*(.data1)
69*4882a593Smuzhiyun	}
70*4882a593Smuzhiyun	RW_DATA(SMP_CACHE_BYTES, 0, THREAD_SIZE)
71*4882a593Smuzhiyun
72*4882a593Smuzhiyun	/* End of data section */
73*4882a593Smuzhiyun	_edata = .;
74*4882a593Smuzhiyun
75*4882a593Smuzhiyun	.fixup : {
76*4882a593Smuzhiyun		__start___fixup = .;
77*4882a593Smuzhiyun		*(.fixup)
78*4882a593Smuzhiyun		__stop___fixup = .;
79*4882a593Smuzhiyun	}
80*4882a593Smuzhiyun	EXCEPTION_TABLE(16)
81*4882a593Smuzhiyun
82*4882a593Smuzhiyun	. = ALIGN(PAGE_SIZE);
83*4882a593Smuzhiyun	__init_begin = ALIGN(PAGE_SIZE);
84*4882a593Smuzhiyun	INIT_TEXT_SECTION(PAGE_SIZE)
85*4882a593Smuzhiyun	__init_text_end = .;
86*4882a593Smuzhiyun	INIT_DATA_SECTION(16)
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun	. = ALIGN(4);
89*4882a593Smuzhiyun	.tsb_ldquad_phys_patch : {
90*4882a593Smuzhiyun		__tsb_ldquad_phys_patch = .;
91*4882a593Smuzhiyun		*(.tsb_ldquad_phys_patch)
92*4882a593Smuzhiyun		__tsb_ldquad_phys_patch_end = .;
93*4882a593Smuzhiyun	}
94*4882a593Smuzhiyun
95*4882a593Smuzhiyun	.tsb_phys_patch : {
96*4882a593Smuzhiyun		__tsb_phys_patch = .;
97*4882a593Smuzhiyun		*(.tsb_phys_patch)
98*4882a593Smuzhiyun		__tsb_phys_patch_end = .;
99*4882a593Smuzhiyun	}
100*4882a593Smuzhiyun
101*4882a593Smuzhiyun	.cpuid_patch : {
102*4882a593Smuzhiyun		__cpuid_patch = .;
103*4882a593Smuzhiyun		*(.cpuid_patch)
104*4882a593Smuzhiyun		__cpuid_patch_end = .;
105*4882a593Smuzhiyun	}
106*4882a593Smuzhiyun
107*4882a593Smuzhiyun	.sun4v_1insn_patch : {
108*4882a593Smuzhiyun		__sun4v_1insn_patch = .;
109*4882a593Smuzhiyun		*(.sun4v_1insn_patch)
110*4882a593Smuzhiyun		__sun4v_1insn_patch_end = .;
111*4882a593Smuzhiyun	}
112*4882a593Smuzhiyun	.sun4v_2insn_patch : {
113*4882a593Smuzhiyun		__sun4v_2insn_patch = .;
114*4882a593Smuzhiyun		*(.sun4v_2insn_patch)
115*4882a593Smuzhiyun		__sun4v_2insn_patch_end = .;
116*4882a593Smuzhiyun	}
117*4882a593Smuzhiyun	.leon_1insn_patch : {
118*4882a593Smuzhiyun		__leon_1insn_patch = .;
119*4882a593Smuzhiyun		*(.leon_1insn_patch)
120*4882a593Smuzhiyun		__leon_1insn_patch_end = .;
121*4882a593Smuzhiyun	}
122*4882a593Smuzhiyun	.swapper_tsb_phys_patch : {
123*4882a593Smuzhiyun		__swapper_tsb_phys_patch = .;
124*4882a593Smuzhiyun		*(.swapper_tsb_phys_patch)
125*4882a593Smuzhiyun		__swapper_tsb_phys_patch_end = .;
126*4882a593Smuzhiyun	}
127*4882a593Smuzhiyun	.swapper_4m_tsb_phys_patch : {
128*4882a593Smuzhiyun		__swapper_4m_tsb_phys_patch = .;
129*4882a593Smuzhiyun		*(.swapper_4m_tsb_phys_patch)
130*4882a593Smuzhiyun		__swapper_4m_tsb_phys_patch_end = .;
131*4882a593Smuzhiyun	}
132*4882a593Smuzhiyun	.popc_3insn_patch : {
133*4882a593Smuzhiyun		__popc_3insn_patch = .;
134*4882a593Smuzhiyun		*(.popc_3insn_patch)
135*4882a593Smuzhiyun		__popc_3insn_patch_end = .;
136*4882a593Smuzhiyun	}
137*4882a593Smuzhiyun	.popc_6insn_patch : {
138*4882a593Smuzhiyun		__popc_6insn_patch = .;
139*4882a593Smuzhiyun		*(.popc_6insn_patch)
140*4882a593Smuzhiyun		__popc_6insn_patch_end = .;
141*4882a593Smuzhiyun	}
142*4882a593Smuzhiyun	.pause_3insn_patch : {
143*4882a593Smuzhiyun		__pause_3insn_patch = .;
144*4882a593Smuzhiyun		*(.pause_3insn_patch)
145*4882a593Smuzhiyun		__pause_3insn_patch_end = .;
146*4882a593Smuzhiyun	}
147*4882a593Smuzhiyun	.sun_m7_1insn_patch : {
148*4882a593Smuzhiyun		__sun_m7_1insn_patch = .;
149*4882a593Smuzhiyun		*(.sun_m7_1insn_patch)
150*4882a593Smuzhiyun		__sun_m7_1insn_patch_end = .;
151*4882a593Smuzhiyun	}
152*4882a593Smuzhiyun	.sun_m7_2insn_patch : {
153*4882a593Smuzhiyun		__sun_m7_2insn_patch = .;
154*4882a593Smuzhiyun		*(.sun_m7_2insn_patch)
155*4882a593Smuzhiyun		__sun_m7_2insn_patch_end = .;
156*4882a593Smuzhiyun	}
157*4882a593Smuzhiyun	.get_tick_patch : {
158*4882a593Smuzhiyun		__get_tick_patch = .;
159*4882a593Smuzhiyun		*(.get_tick_patch)
160*4882a593Smuzhiyun		__get_tick_patch_end = .;
161*4882a593Smuzhiyun	}
162*4882a593Smuzhiyun	.pud_huge_patch : {
163*4882a593Smuzhiyun		__pud_huge_patch = .;
164*4882a593Smuzhiyun		*(.pud_huge_patch)
165*4882a593Smuzhiyun		__pud_huge_patch_end = .;
166*4882a593Smuzhiyun	}
167*4882a593Smuzhiyun	.fast_win_ctrl_1insn_patch : {
168*4882a593Smuzhiyun		__fast_win_ctrl_1insn_patch = .;
169*4882a593Smuzhiyun		*(.fast_win_ctrl_1insn_patch)
170*4882a593Smuzhiyun		__fast_win_ctrl_1insn_patch_end = .;
171*4882a593Smuzhiyun	}
172*4882a593Smuzhiyun	PERCPU_SECTION(SMP_CACHE_BYTES)
173*4882a593Smuzhiyun
174*4882a593Smuzhiyun	. = ALIGN(PAGE_SIZE);
175*4882a593Smuzhiyun	.exit.text : {
176*4882a593Smuzhiyun		EXIT_TEXT
177*4882a593Smuzhiyun	}
178*4882a593Smuzhiyun
179*4882a593Smuzhiyun	.exit.data : {
180*4882a593Smuzhiyun		EXIT_DATA
181*4882a593Smuzhiyun	}
182*4882a593Smuzhiyun
183*4882a593Smuzhiyun	. = ALIGN(PAGE_SIZE);
184*4882a593Smuzhiyun	__init_end = .;
185*4882a593Smuzhiyun	BSS_SECTION(0, 0, 0)
186*4882a593Smuzhiyun	_end = . ;
187*4882a593Smuzhiyun
188*4882a593Smuzhiyun	STABS_DEBUG
189*4882a593Smuzhiyun	DWARF_DEBUG
190*4882a593Smuzhiyun	ELF_DETAILS
191*4882a593Smuzhiyun
192*4882a593Smuzhiyun	DISCARDS
193*4882a593Smuzhiyun}
194