xref: /openbmc/linux/arch/sparc/kernel/vmlinux.lds.S (revision 1b1fbbcaad56ede1442e7074bd935a2c98b99596)
1*1b1fbbcaSSam Ravnborg/* ld script for sparc32/sparc64 kernel */
21da177e4SLinus Torvalds
31da177e4SLinus Torvalds#include <asm-generic/vmlinux.lds.h>
4bcbe40ebSSam Ravnborg#include <asm/page.h>
51da177e4SLinus Torvalds
6*1b1fbbcaSSam Ravnborg#ifdef CONFIG_SPARC32
7*1b1fbbcaSSam Ravnborg#define INITIAL_ADDRESS  0x10000 + SIZEOF_HEADERS
8*1b1fbbcaSSam Ravnborg#define TEXTSTART	0xf0004000
9*1b1fbbcaSSam Ravnborg
10*1b1fbbcaSSam Ravnborg#define SMP_CACHE_BYTES_SHIFT 5
11*1b1fbbcaSSam Ravnborg
12*1b1fbbcaSSam Ravnborg#else
13*1b1fbbcaSSam Ravnborg#define SMP_CACHE_BYTES_SHIFT 6
14*1b1fbbcaSSam Ravnborg#define INITIAL_ADDRESS 0x4000
15*1b1fbbcaSSam Ravnborg#define TEXTSTART      0x0000000000404000
16*1b1fbbcaSSam Ravnborg
17*1b1fbbcaSSam Ravnborg#endif
18*1b1fbbcaSSam Ravnborg
19*1b1fbbcaSSam Ravnborg#define SMP_CACHE_BYTES (1 << SMP_CACHE_BYTES_SHIFT)
20*1b1fbbcaSSam Ravnborg
21*1b1fbbcaSSam Ravnborg#ifdef CONFIG_SPARC32
221da177e4SLinus TorvaldsOUTPUT_FORMAT("elf32-sparc", "elf32-sparc", "elf32-sparc")
231da177e4SLinus TorvaldsOUTPUT_ARCH(sparc)
241da177e4SLinus TorvaldsENTRY(_start)
251da177e4SLinus Torvaldsjiffies = jiffies_64 + 4;
26*1b1fbbcaSSam Ravnborg#else
27*1b1fbbcaSSam Ravnborg/* sparc64 */
28*1b1fbbcaSSam RavnborgOUTPUT_FORMAT("elf64-sparc", "elf64-sparc", "elf64-sparc")
29*1b1fbbcaSSam RavnborgOUTPUT_ARCH(sparc:v9a)
30*1b1fbbcaSSam RavnborgENTRY(_start)
31*1b1fbbcaSSam Ravnborgjiffies = jiffies_64;
32*1b1fbbcaSSam Ravnborg#endif
33*1b1fbbcaSSam Ravnborg
341da177e4SLinus TorvaldsSECTIONS
351da177e4SLinus Torvalds{
36*1b1fbbcaSSam Ravnborg	/* swapper_low_pmd_dir is sparc64 only */
37*1b1fbbcaSSam Ravnborg	swapper_low_pmd_dir = 0x0000000000402000;
38*1b1fbbcaSSam Ravnborg	. = INITIAL_ADDRESS;
39*1b1fbbcaSSam Ravnborg	.text TEXTSTART :
401da177e4SLinus Torvalds	{
41fd593d12SEric W. Biederman		_text = .;
425bac287eSAl Viro		*(.text.head)
437664709bSSam Ravnborg		TEXT_TEXT
441da177e4SLinus Torvalds		SCHED_TEXT
451da177e4SLinus Torvalds		LOCK_TEXT
46*1b1fbbcaSSam Ravnborg		KPROBES_TEXT
471da177e4SLinus Torvalds		*(.gnu.warning)
481da177e4SLinus Torvalds	} = 0
491da177e4SLinus Torvalds	_etext = .;
501da177e4SLinus Torvalds	PROVIDE (etext = .);
51*1b1fbbcaSSam Ravnborg
52*1b1fbbcaSSam Ravnborg	RO_DATA(PAGE_SIZE)
53bcbe40ebSSam Ravnborg	.data :	{
54ca967258SSam Ravnborg		DATA_DATA
551da177e4SLinus Torvalds		CONSTRUCTORS
561da177e4SLinus Torvalds	}
57bcbe40ebSSam Ravnborg	.data1 : {
58bcbe40ebSSam Ravnborg		*(.data1)
59bcbe40ebSSam Ravnborg	}
60*1b1fbbcaSSam Ravnborg	. = ALIGN(SMP_CACHE_BYTES);
61*1b1fbbcaSSam Ravnborg	.data.cacheline_aligned : {
62*1b1fbbcaSSam Ravnborg		*(.data.cacheline_aligned)
63*1b1fbbcaSSam Ravnborg	}
64*1b1fbbcaSSam Ravnborg	. = ALIGN(SMP_CACHE_BYTES);
65*1b1fbbcaSSam Ravnborg	.data.read_mostly : {
66*1b1fbbcaSSam Ravnborg		*(.data.read_mostly)
67*1b1fbbcaSSam Ravnborg	}
681da177e4SLinus Torvalds	_edata = .;
691da177e4SLinus Torvalds	PROVIDE (edata = .);
70bcbe40ebSSam Ravnborg	.fixup : {
711da177e4SLinus Torvalds		__start___fixup = .;
72bcbe40ebSSam Ravnborg		*(.fixup)
731da177e4SLinus Torvalds		__stop___fixup = .;
74bcbe40ebSSam Ravnborg	}
75*1b1fbbcaSSam Ravnborg	. = ALIGN(16);
76bcbe40ebSSam Ravnborg	__ex_table : {
771da177e4SLinus Torvalds		__start___ex_table = .;
78bcbe40ebSSam Ravnborg		*(__ex_table)
791da177e4SLinus Torvalds		__stop___ex_table = .;
80bcbe40ebSSam Ravnborg	}
810c0d345eSDavid S. Miller	NOTES
820c0d345eSDavid S. Miller
83bcbe40ebSSam Ravnborg	. = ALIGN(PAGE_SIZE);
84ab5da288SMartin Habets	.init.text : {
85*1b1fbbcaSSam Ravnborg		__init_begin = .;
86bcbe40ebSSam Ravnborg		_sinittext = .;
8701ba2bdcSSam Ravnborg		INIT_TEXT
88ab5da288SMartin Habets		_einittext = .;
891da177e4SLinus Torvalds	}
90bcbe40ebSSam Ravnborg	__init_text_end = .;
91bcbe40ebSSam Ravnborg	.init.data : {
9201ba2bdcSSam Ravnborg		INIT_DATA
93bcbe40ebSSam Ravnborg	}
94bcbe40ebSSam Ravnborg	. = ALIGN(16);
95bcbe40ebSSam Ravnborg	.init.setup : {
96bcbe40ebSSam Ravnborg		__setup_start = .;
97bcbe40ebSSam Ravnborg		*(.init.setup)
98bcbe40ebSSam Ravnborg		__setup_end = .;
99bcbe40ebSSam Ravnborg	}
100bcbe40ebSSam Ravnborg	.initcall.init : {
101bcbe40ebSSam Ravnborg		__initcall_start = .;
102bcbe40ebSSam Ravnborg		INITCALLS
1031da177e4SLinus Torvalds		__initcall_end = .;
104bcbe40ebSSam Ravnborg	}
105bcbe40ebSSam Ravnborg	.con_initcall.init : {
1061da177e4SLinus Torvalds		__con_initcall_start = .;
107bcbe40ebSSam Ravnborg		*(.con_initcall.init)
1081da177e4SLinus Torvalds		__con_initcall_end = .;
109bcbe40ebSSam Ravnborg	}
1101da177e4SLinus Torvalds	SECURITY_INIT
11167d38229SJean-Paul Saman
112*1b1fbbcaSSam Ravnborg	. = ALIGN(4);
113*1b1fbbcaSSam Ravnborg	.tsb_ldquad_phys_patch : {
114*1b1fbbcaSSam Ravnborg		__tsb_ldquad_phys_patch = .;
115*1b1fbbcaSSam Ravnborg		*(.tsb_ldquad_phys_patch)
116*1b1fbbcaSSam Ravnborg		__tsb_ldquad_phys_patch_end = .;
117*1b1fbbcaSSam Ravnborg	}
118*1b1fbbcaSSam Ravnborg
119*1b1fbbcaSSam Ravnborg	.tsb_phys_patch : {
120*1b1fbbcaSSam Ravnborg		__tsb_phys_patch = .;
121*1b1fbbcaSSam Ravnborg		*(.tsb_phys_patch)
122*1b1fbbcaSSam Ravnborg		__tsb_phys_patch_end = .;
123*1b1fbbcaSSam Ravnborg	}
124*1b1fbbcaSSam Ravnborg
125*1b1fbbcaSSam Ravnborg	.cpuid_patch : {
126*1b1fbbcaSSam Ravnborg		__cpuid_patch = .;
127*1b1fbbcaSSam Ravnborg		*(.cpuid_patch)
128*1b1fbbcaSSam Ravnborg		__cpuid_patch_end = .;
129*1b1fbbcaSSam Ravnborg	}
130*1b1fbbcaSSam Ravnborg
131*1b1fbbcaSSam Ravnborg	.sun4v_1insn_patch : {
132*1b1fbbcaSSam Ravnborg		__sun4v_1insn_patch = .;
133*1b1fbbcaSSam Ravnborg		*(.sun4v_1insn_patch)
134*1b1fbbcaSSam Ravnborg		__sun4v_1insn_patch_end = .;
135*1b1fbbcaSSam Ravnborg	}
136*1b1fbbcaSSam Ravnborg	.sun4v_2insn_patch : {
137*1b1fbbcaSSam Ravnborg		__sun4v_2insn_patch = .;
138*1b1fbbcaSSam Ravnborg		*(.sun4v_2insn_patch)
139*1b1fbbcaSSam Ravnborg		__sun4v_2insn_patch_end = .;
140*1b1fbbcaSSam Ravnborg	}
141*1b1fbbcaSSam Ravnborg
14267d38229SJean-Paul Saman#ifdef CONFIG_BLK_DEV_INITRD
143bcbe40ebSSam Ravnborg	. = ALIGN(PAGE_SIZE);
144bcbe40ebSSam Ravnborg	.init.ramfs : {
1451da177e4SLinus Torvalds		__initramfs_start = .;
146bcbe40ebSSam Ravnborg		*(.init.ramfs)
1471da177e4SLinus Torvalds		__initramfs_end = .;
148bcbe40ebSSam Ravnborg	}
14967d38229SJean-Paul Saman#endif
15067d38229SJean-Paul Saman
151bcbe40ebSSam Ravnborg	PERCPU(PAGE_SIZE)
152*1b1fbbcaSSam Ravnborg
153bcbe40ebSSam Ravnborg	. = ALIGN(PAGE_SIZE);
1541da177e4SLinus Torvalds	__init_end = .;
1551da177e4SLinus Torvalds	__bss_start = .;
156bcbe40ebSSam Ravnborg	.sbss : {
157bcbe40ebSSam Ravnborg		*(.sbss)
158*1b1fbbcaSSam Ravnborg		*(.scommon)
159*1b1fbbcaSSam Ravnborg	}
160bcbe40ebSSam Ravnborg	.bss : {
1611da177e4SLinus Torvalds		*(.dynbss)
1621da177e4SLinus Torvalds		*(.bss)
1631da177e4SLinus Torvalds		*(COMMON)
1641da177e4SLinus Torvalds	}
1651da177e4SLinus Torvalds	_end = . ;
1661da177e4SLinus Torvalds	PROVIDE (end = .);
167*1b1fbbcaSSam Ravnborg
168bcbe40ebSSam Ravnborg	/DISCARD/ : {
16901ba2bdcSSam Ravnborg		EXIT_TEXT
17001ba2bdcSSam Ravnborg		EXIT_DATA
171bcbe40ebSSam Ravnborg		*(.exitcall.exit)
172bcbe40ebSSam Ravnborg	}
173d5784b57SDavid S. Miller
174d5784b57SDavid S. Miller	STABS_DEBUG
175d5784b57SDavid S. Miller	DWARF_DEBUG
1761da177e4SLinus Torvalds}
177