xref: /openbmc/linux/arch/mips/kernel/vmlinux.lds.S (revision 96de0e252cedffad61b3cb5e05662c591898e69a)
1#include <asm/asm-offsets.h>
2#include <asm-generic/vmlinux.lds.h>
3
4#undef mips
5#define mips mips
6OUTPUT_ARCH(mips)
7ENTRY(kernel_entry)
8PHDRS {
9	text PT_LOAD FLAGS(7);	/* RWX */
10	note PT_NOTE FLAGS(4);	/* R__ */
11}
12jiffies = JIFFIES;
13
14SECTIONS
15{
16#ifdef CONFIG_BOOT_ELF64
17	/* Read-only sections, merged into text segment: */
18	/* . = 0xc000000000000000; */
19
20	/* This is the value for an Origin kernel, taken from an IRIX kernel.  */
21	/* . = 0xc00000000001c000; */
22
23	/* Set the vaddr for the text segment to a value
24	 *   >= 0xa800 0000 0001 9000 if no symmon is going to configured
25	 *   >= 0xa800 0000 0030 0000 otherwise
26	 */
27
28	/* . = 0xa800000000300000; */
29	. = 0xffffffff80300000;
30#endif
31	. = LOADADDR;
32	/* read-only */
33	_text = .;	/* Text and read-only data */
34	.text : {
35		TEXT_TEXT
36		SCHED_TEXT
37		LOCK_TEXT
38		KPROBES_TEXT
39		*(.fixup)
40		*(.gnu.warning)
41	} :text = 0
42	_etext = .;	/* End of text section */
43
44	/* Exception table */
45	. = ALIGN(16);
46	__ex_table : {
47		__start___ex_table = .;
48		*(__ex_table)
49		__stop___ex_table = .;
50	}
51
52	/* Exception table for data bus errors */
53	__dbe_table : {
54		__start___dbe_table = .;
55		*(__dbe_table)
56		__stop___dbe_table = .;
57	}
58
59	NOTES :text :note
60	.dummy : { *(.dummy) } :text
61
62	RODATA
63
64	/* writeable */
65	.data : {	/* Data */
66	  . = . + DATAOFFSET;		/* for CONFIG_MAPPED_KERNEL */
67	  /*
68	   * This ALIGN is needed as a workaround for a bug a gcc bug upto 4.1 which
69	   * limits the maximum alignment to at most 32kB and results in the following
70	   * warning:
71	   *
72	   *  CC      arch/mips/kernel/init_task.o
73	   * arch/mips/kernel/init_task.c:30: warning: alignment of ‘init_thread_union’
74	   * is greater than maximum object file alignment.  Using 32768
75	   */
76	  . = ALIGN(_PAGE_SIZE);
77	  *(.data.init_task)
78
79	  DATA_DATA
80	  CONSTRUCTORS
81	}
82	_gp = . + 0x8000;
83	.lit8 : {
84		*(.lit8)
85	}
86	.lit4 : {
87		*(.lit4)
88	}
89	/* We want the small data sections together, so single-instruction offsets
90	   can access them all, and initialized data all before uninitialized, so
91	   we can shorten the on-disk segment size.  */
92	.sdata : {
93		*(.sdata)
94	}
95
96	. = ALIGN(_PAGE_SIZE);
97	.data_nosave : {
98		__nosave_begin = .;
99		*(.data.nosave)
100	}
101	. = ALIGN(_PAGE_SIZE);
102	__nosave_end = .;
103
104	. = ALIGN(32);
105	.data.cacheline_aligned : {
106		*(.data.cacheline_aligned)
107	}
108	_edata =  .;			/* End of data section */
109
110	/* will be freed after init */
111	. = ALIGN(_PAGE_SIZE);		/* Init code and data */
112	__init_begin = .;
113	.init.text : {
114		_sinittext = .;
115		*(.init.text)
116		_einittext = .;
117	}
118	.init.data : {
119		*(.init.data)
120	}
121	. = ALIGN(16);
122	.init.setup : {
123		__setup_start = .;
124		*(.init.setup)
125		__setup_end = .;
126	}
127
128	.initcall.init : {
129		__initcall_start = .;
130		INITCALLS
131		__initcall_end = .;
132	}
133
134	.con_initcall.init : {
135		__con_initcall_start = .;
136		*(.con_initcall.init)
137		__con_initcall_end = .;
138	}
139	SECURITY_INIT
140
141	/* .exit.text is discarded at runtime, not link time, to deal with
142	 * references from .rodata
143	 */
144	.exit.text : {
145		*(.exit.text)
146	}
147	.exit.data : {
148		*(.exit.data)
149	}
150#if defined(CONFIG_BLK_DEV_INITRD)
151	. = ALIGN(_PAGE_SIZE);
152	.init.ramfs : {
153		__initramfs_start = .;
154		*(.init.ramfs)
155		__initramfs_end = .;
156	}
157#endif
158	PERCPU(_PAGE_SIZE)
159	. = ALIGN(_PAGE_SIZE);
160	__init_end = .;
161	/* freed after init ends here */
162
163	__bss_start = .;	/* BSS */
164	.sbss  : {
165		*(.sbss)
166		*(.scommon)
167	}
168	.bss : {
169		*(.bss)
170		*(COMMON)
171	}
172	__bss_stop = .;
173
174	_end = . ;
175
176	/* Sections to be discarded */
177	/DISCARD/ : {
178		*(.exitcall.exit)
179
180		/* ABI crap starts here */
181		*(.MIPS.options)
182		*(.options)
183		*(.pdr)
184		*(.reginfo)
185	}
186
187	/* These mark the ABI of the kernel for debuggers.  */
188	.mdebug.abi32 : {
189		KEEP(*(.mdebug.abi32))
190	}
191	.mdebug.abi64 : {
192		KEEP(*(.mdebug.abi64))
193	}
194
195	/* This is the MIPS specific mdebug section.  */
196	.mdebug : {
197		*(.mdebug)
198	}
199
200	STABS_DEBUG
201	DWARF_DEBUG
202
203	/* These must appear regardless of  .  */
204	.gptab.sdata : {
205		*(.gptab.data)
206		*(.gptab.sdata)
207	}
208	.gptab.sbss : {
209		*(.gptab.bss)
210		*(.gptab.sbss)
211	}
212}
213