Blame view

include/asm-generic/vmlinux.lds.h 23.7 KB
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  /*
   * Helper macros to support writing architecture specific
   * linker scripts.
   *
   * A minimal linker scripts has following content:
   * [This is a sample, architectures may have special requiriements]
   *
   * OUTPUT_FORMAT(...)
   * OUTPUT_ARCH(...)
   * ENTRY(...)
   * SECTIONS
   * {
   *	. = START;
   *	__init_begin = .;
7923f90ff   Sam Ravnborg   vmlinux.lds.h update
15
   *	HEAD_TEXT_SECTION
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
16
17
   *	INIT_TEXT_SECTION(PAGE_SIZE)
   *	INIT_DATA_SECTION(...)
0415b00d1   Tejun Heo   percpu: Always al...
18
   *	PERCPU_SECTION(CACHELINE_SIZE)
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
19
20
21
22
23
24
25
26
27
28
29
30
31
32
   *	__init_end = .;
   *
   *	_stext = .;
   *	TEXT_SECTION = 0
   *	_etext = .;
   *
   *      _sdata = .;
   *	RO_DATA_SECTION(PAGE_SIZE)
   *	RW_DATA_SECTION(...)
   *	_edata = .;
   *
   *	EXCEPTION_TABLE(...)
   *	NOTES
   *
04e448d9a   Tim Abbott   vmlinux.lds.h: re...
33
   *	BSS_SECTION(0, 0, 0)
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
34
35
   *	_end = .;
   *
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
36
37
   *	STABS_DEBUG
   *	DWARF_DEBUG
023bf6f1b   Tejun Heo   linker script: un...
38
39
   *
   *	DISCARDS		// must be the last
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
40
41
42
43
44
45
46
47
48
49
   * }
   *
   * [__init_begin, __init_end] is the init section that may be freed after init
   * [_stext, _etext] is the text section
   * [_sdata, _edata] is the data section
   *
   * Some of the included output section have their own set of constants.
   * Examples are: [__initramfs_start, __initramfs_end] for initramfs and
   *               [__nosave_begin, __nosave_end] for the nosave data
   */
c80d471a4   Tim Abbott   Add new HEAD_TEXT...
50

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
51
52
53
  #ifndef LOAD_OFFSET
  #define LOAD_OFFSET 0
  #endif
9e1b9b807   Alan Jenkins   module: make MODU...
54
55
56
57
58
59
  #ifndef SYMBOL_PREFIX
  #define VMLINUX_SYMBOL(sym) sym
  #else
  #define PASTE2(x,y) x##y
  #define PASTE(x,y) PASTE2(x,y)
  #define VMLINUX_SYMBOL(sym) PASTE(SYMBOL_PREFIX, sym)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
60
  #endif
6d30e3a89   Sam Ravnborg   kbuild: Avoid inc...
61
62
  /* Align . to a 8 byte boundary equals to maximum function alignment. */
  #define ALIGN_FUNCTION()  . = ALIGN(8)
07fca0e57   Sam Ravnborg   tracing: Properly...
63
64
65
66
  /*
   * Align to a 32 byte boundary equal to the
   * alignment gcc 4.5 uses for a struct
   */
aab94339c   Dirk Brandewie   of: Add support f...
67
68
  #define STRUCT_ALIGNMENT 32
  #define STRUCT_ALIGN() . = ALIGN(STRUCT_ALIGNMENT)
07fca0e57   Sam Ravnborg   tracing: Properly...
69

eb8f68904   Sam Ravnborg   Use separate sect...
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
  /* The actual configuration determine if the init/exit sections
   * are handled as text/data or they can be discarded (which
   * often happens at runtime)
   */
  #ifdef CONFIG_HOTPLUG
  #define DEV_KEEP(sec)    *(.dev##sec)
  #define DEV_DISCARD(sec)
  #else
  #define DEV_KEEP(sec)
  #define DEV_DISCARD(sec) *(.dev##sec)
  #endif
  
  #ifdef CONFIG_HOTPLUG_CPU
  #define CPU_KEEP(sec)    *(.cpu##sec)
  #define CPU_DISCARD(sec)
  #else
  #define CPU_KEEP(sec)
  #define CPU_DISCARD(sec) *(.cpu##sec)
  #endif
1a3fb6d48   Adrian Bunk   asm-generic/vmlix...
89
  #if defined(CONFIG_MEMORY_HOTPLUG)
eb8f68904   Sam Ravnborg   Use separate sect...
90
91
92
93
94
95
  #define MEM_KEEP(sec)    *(.mem##sec)
  #define MEM_DISCARD(sec)
  #else
  #define MEM_KEEP(sec)
  #define MEM_DISCARD(sec) *(.mem##sec)
  #endif
8da3821ba   Steven Rostedt   ftrace: create __...
96
  #ifdef CONFIG_FTRACE_MCOUNT_RECORD
4b3b4c5e6   John Reiser   ftrace: __start_m...
97
98
  #define MCOUNT_REC()	. = ALIGN(8);				\
  			VMLINUX_SYMBOL(__start_mcount_loc) = .; \
8da3821ba   Steven Rostedt   ftrace: create __...
99
100
101
102
103
  			*(__mcount_loc)				\
  			VMLINUX_SYMBOL(__stop_mcount_loc) = .;
  #else
  #define MCOUNT_REC()
  #endif
eb8f68904   Sam Ravnborg   Use separate sect...
104

2ed84eeb8   Steven Rostedt   trace: rename unl...
105
  #ifdef CONFIG_TRACE_BRANCH_PROFILING
45b797492   Steven Rostedt   trace: consolidat...
106
107
108
  #define LIKELY_PROFILE()	VMLINUX_SYMBOL(__start_annotated_branch_profile) = .; \
  				*(_ftrace_annotated_branch)			      \
  				VMLINUX_SYMBOL(__stop_annotated_branch_profile) = .;
1f0d69a9f   Steven Rostedt   tracing: profile ...
109
110
111
  #else
  #define LIKELY_PROFILE()
  #endif
2bcd521a6   Steven Rostedt   trace: profile al...
112
113
114
115
116
117
118
  #ifdef CONFIG_PROFILE_ALL_BRANCHES
  #define BRANCH_PROFILE()	VMLINUX_SYMBOL(__start_branch_profile) = .;   \
  				*(_ftrace_branch)			      \
  				VMLINUX_SYMBOL(__stop_branch_profile) = .;
  #else
  #define BRANCH_PROFILE()
  #endif
5f77a88b3   Tom Zanussi   tracing/infrastru...
119
  #ifdef CONFIG_EVENT_TRACING
e4a9ea5ee   Steven Rostedt   tracing: Replace ...
120
121
  #define FTRACE_EVENTS()	. = ALIGN(8);					\
  			VMLINUX_SYMBOL(__start_ftrace_events) = .;	\
b77e38aa2   Steven Rostedt   tracing: add even...
122
123
124
125
126
  			*(_ftrace_events)				\
  			VMLINUX_SYMBOL(__stop_ftrace_events) = .;
  #else
  #define FTRACE_EVENTS()
  #endif
1ba28e02a   Lai Jiangshan   tracing: add trac...
127
128
129
130
131
132
133
  #ifdef CONFIG_TRACING
  #define TRACE_PRINTKS() VMLINUX_SYMBOL(__start___trace_bprintk_fmt) = .;      \
  			 *(__trace_printk_fmt) /* Trace_printk fmt' pointer */ \
  			 VMLINUX_SYMBOL(__stop___trace_bprintk_fmt) = .;
  #else
  #define TRACE_PRINTKS()
  #endif
bed1ffca0   Frederic Weisbecker   tracing/syscalls:...
134
  #ifdef CONFIG_FTRACE_SYSCALLS
3d56e331b   Steven Rostedt   tracing: Replace ...
135
136
  #define TRACE_SYSCALLS() . = ALIGN(8);					\
  			 VMLINUX_SYMBOL(__start_syscalls_metadata) = .;	\
bed1ffca0   Frederic Weisbecker   tracing/syscalls:...
137
138
139
140
141
  			 *(__syscalls_metadata)				\
  			 VMLINUX_SYMBOL(__stop_syscalls_metadata) = .;
  #else
  #define TRACE_SYSCALLS()
  #endif
aab94339c   Dirk Brandewie   of: Add support f...
142
143
144
145
146
147
  
  #define KERNEL_DTB()							\
  	STRUCT_ALIGN();							\
  	VMLINUX_SYMBOL(__dtb_start) = .;				\
  	*(.dtb.init.rodata)						\
  	VMLINUX_SYMBOL(__dtb_end) = .;
ca967258b   Sam Ravnborg   all-archs: consol...
148
149
  /* .data section */
  #define DATA_DATA							\
0e0d314e6   Sam Ravnborg   kbuild: introduce...
150
  	*(.data)							\
312b1485f   Sam Ravnborg   Introduce new sec...
151
  	*(.ref.data)							\
d356c0b68   Mike Frysinger   vmlinux.lds.h: ga...
152
  	*(.data..shared_aligned) /* percpu related */			\
eb8f68904   Sam Ravnborg   Use separate sect...
153
154
155
156
157
158
  	DEV_KEEP(init.data)						\
  	DEV_KEEP(exit.data)						\
  	CPU_KEEP(init.data)						\
  	CPU_KEEP(exit.data)						\
  	MEM_KEEP(init.data)						\
  	MEM_KEEP(exit.data)						\
654986462   Mathieu Desnoyers   tracepoints: Fix ...
159
  	STRUCT_ALIGN();							\
97e1c18e8   Mathieu Desnoyers   tracing: Kernel T...
160
  	*(__tracepoints)						\
e9d376f0f   Jason Baron   dynamic debug: co...
161
  	/* implement dynamic printk debug */				\
d430d3d7e   Jason Baron   jump label: Intro...
162
163
164
165
  	. = ALIGN(8);                                                   \
  	VMLINUX_SYMBOL(__start___jump_table) = .;                       \
  	*(__jump_table)                                                 \
  	VMLINUX_SYMBOL(__stop___jump_table) = .;                        \
e9d376f0f   Jason Baron   dynamic debug: co...
166
167
168
169
  	. = ALIGN(8);							\
  	VMLINUX_SYMBOL(__start___verbose) = .;                          \
  	*(__verbose)                                                    \
  	VMLINUX_SYMBOL(__stop___verbose) = .;				\
2bcd521a6   Steven Rostedt   trace: profile al...
170
  	LIKELY_PROFILE()		       				\
b77e38aa2   Steven Rostedt   tracing: add even...
171
  	BRANCH_PROFILE()						\
3d56e331b   Steven Rostedt   tracing: Replace ...
172
  	TRACE_PRINTKS()
ca967258b   Sam Ravnborg   all-archs: consol...
173

ef53dae86   Sam Ravnborg   Improve vmlinux.l...
174
175
176
177
178
179
  /*
   * Data section helpers
   */
  #define NOSAVE_DATA							\
  	. = ALIGN(PAGE_SIZE);						\
  	VMLINUX_SYMBOL(__nosave_begin) = .;				\
07b3bb1ef   Denys Vlasenko   Rename .data.nosa...
180
  	*(.data..nosave)						\
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
181
182
183
184
185
  	. = ALIGN(PAGE_SIZE);						\
  	VMLINUX_SYMBOL(__nosave_end) = .;
  
  #define PAGE_ALIGNED_DATA(page_align)					\
  	. = ALIGN(page_align);						\
75b134837   Tim Abbott   Rename .data.page...
186
  	*(.data..page_aligned)
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
187
188
189
  
  #define READ_MOSTLY_DATA(align)						\
  	. = ALIGN(align);						\
8369744fc   Shaohua Li   include/asm-gener...
190
191
  	*(.data..read_mostly)						\
  	. = ALIGN(align);
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
192
193
194
  
  #define CACHELINE_ALIGNED_DATA(align)					\
  	. = ALIGN(align);						\
4af57b787   Tim Abbott   Rename .data.cach...
195
  	*(.data..cacheline_aligned)
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
196

39a449d96   Tim Abbott   asm-generic/vmlin...
197
  #define INIT_TASK_DATA(align)						\
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
198
  	. = ALIGN(align);						\
2af7687f1   Tim Abbott   Rename .data.init...
199
  	*(.data..init_task)
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
200
201
202
203
204
  
  /*
   * Read only Data
   */
  #define RO_DATA_SECTION(align)						\
4096b46f0   Sam Ravnborg   sparc64: fix alig...
205
  	. = ALIGN((align));						\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
206
  	.rodata           : AT(ADDR(.rodata) - LOAD_OFFSET) {		\
6569580de   Vivek Goyal   [PATCH] i386: Dis...
207
  		VMLINUX_SYMBOL(__start_rodata) = .;			\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
208
209
  		*(.rodata) *(.rodata.*)					\
  		*(__vermagic)		/* Kernel version magic */	\
654986462   Mathieu Desnoyers   tracepoints: Fix ...
210
211
212
213
  		. = ALIGN(8);						\
  		VMLINUX_SYMBOL(__start___tracepoints_ptrs) = .;		\
  		*(__tracepoints_ptrs)	/* Tracepoints: pointer array */\
  		VMLINUX_SYMBOL(__stop___tracepoints_ptrs) = .;		\
97e1c18e8   Mathieu Desnoyers   tracing: Kernel T...
214
  		*(__tracepoints_strings)/* Tracepoints: strings */	\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
215
216
217
218
219
220
  	}								\
  									\
  	.rodata1          : AT(ADDR(.rodata1) - LOAD_OFFSET) {		\
  		*(.rodata1)						\
  	}								\
  									\
6360b1fbb   Jan Beulich   move BUG_TABLE in...
221
222
  	BUG_TABLE							\
  									\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
223
224
225
226
227
228
229
230
231
232
233
234
235
236
  	/* PCI quirks */						\
  	.pci_fixup        : AT(ADDR(.pci_fixup) - LOAD_OFFSET) {	\
  		VMLINUX_SYMBOL(__start_pci_fixups_early) = .;		\
  		*(.pci_fixup_early)					\
  		VMLINUX_SYMBOL(__end_pci_fixups_early) = .;		\
  		VMLINUX_SYMBOL(__start_pci_fixups_header) = .;		\
  		*(.pci_fixup_header)					\
  		VMLINUX_SYMBOL(__end_pci_fixups_header) = .;		\
  		VMLINUX_SYMBOL(__start_pci_fixups_final) = .;		\
  		*(.pci_fixup_final)					\
  		VMLINUX_SYMBOL(__end_pci_fixups_final) = .;		\
  		VMLINUX_SYMBOL(__start_pci_fixups_enable) = .;		\
  		*(.pci_fixup_enable)					\
  		VMLINUX_SYMBOL(__end_pci_fixups_enable) = .;		\
1597cacbe   Alan Cox   PCI: Fix multiple...
237
238
239
  		VMLINUX_SYMBOL(__start_pci_fixups_resume) = .;		\
  		*(.pci_fixup_resume)					\
  		VMLINUX_SYMBOL(__end_pci_fixups_resume) = .;		\
e1a2a51e6   Rafael J. Wysocki   Suspend/Resume bu...
240
241
242
243
244
245
  		VMLINUX_SYMBOL(__start_pci_fixups_resume_early) = .;	\
  		*(.pci_fixup_resume_early)				\
  		VMLINUX_SYMBOL(__end_pci_fixups_resume_early) = .;	\
  		VMLINUX_SYMBOL(__start_pci_fixups_suspend) = .;		\
  		*(.pci_fixup_suspend)					\
  		VMLINUX_SYMBOL(__end_pci_fixups_suspend) = .;		\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
246
247
  	}								\
  									\
5658c7694   David Woodhouse   firmware: allow f...
248
249
250
251
252
253
254
  	/* Built-in firmware blobs */					\
  	.builtin_fw        : AT(ADDR(.builtin_fw) - LOAD_OFFSET) {	\
  		VMLINUX_SYMBOL(__start_builtin_fw) = .;			\
  		*(.builtin_fw)						\
  		VMLINUX_SYMBOL(__end_builtin_fw) = .;			\
  	}								\
  									\
394b701ce   Matt Porter   [PATCH] RapidIO s...
255
  	/* RapidIO route ops */						\
e5cabeb3d   Alexandre Bounine   rapidio: add Port...
256
  	.rio_ops        : AT(ADDR(.rio_ops) - LOAD_OFFSET) {		\
058f88d67   Alexandre Bounine   rapidio: modify i...
257
258
259
  		VMLINUX_SYMBOL(__start_rio_switch_ops) = .;		\
  		*(.rio_switch_ops)					\
  		VMLINUX_SYMBOL(__end_rio_switch_ops) = .;		\
394b701ce   Matt Porter   [PATCH] RapidIO s...
260
261
  	}								\
  									\
63687a528   Jan Beulich   x86: move traceda...
262
263
  	TRACEDATA							\
  									\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
264
265
266
  	/* Kernel symbol table: Normal symbols */			\
  	__ksymtab         : AT(ADDR(__ksymtab) - LOAD_OFFSET) {		\
  		VMLINUX_SYMBOL(__start___ksymtab) = .;			\
f02e8a659   Alessio Igor Bogani   module: Sort expo...
267
  		*(SORT(___ksymtab+*))					\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
268
269
270
271
272
273
  		VMLINUX_SYMBOL(__stop___ksymtab) = .;			\
  	}								\
  									\
  	/* Kernel symbol table: GPL-only symbols */			\
  	__ksymtab_gpl     : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) {	\
  		VMLINUX_SYMBOL(__start___ksymtab_gpl) = .;		\
f02e8a659   Alessio Igor Bogani   module: Sort expo...
274
  		*(SORT(___ksymtab_gpl+*))				\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
275
276
277
  		VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .;		\
  	}								\
  									\
f71d20e96   Arjan van de Ven   [PATCH] Add EXPOR...
278
279
280
  	/* Kernel symbol table: Normal unused symbols */		\
  	__ksymtab_unused  : AT(ADDR(__ksymtab_unused) - LOAD_OFFSET) {	\
  		VMLINUX_SYMBOL(__start___ksymtab_unused) = .;		\
f02e8a659   Alessio Igor Bogani   module: Sort expo...
281
  		*(SORT(___ksymtab_unused+*))				\
f71d20e96   Arjan van de Ven   [PATCH] Add EXPOR...
282
283
284
285
286
287
  		VMLINUX_SYMBOL(__stop___ksymtab_unused) = .;		\
  	}								\
  									\
  	/* Kernel symbol table: GPL-only unused symbols */		\
  	__ksymtab_unused_gpl : AT(ADDR(__ksymtab_unused_gpl) - LOAD_OFFSET) { \
  		VMLINUX_SYMBOL(__start___ksymtab_unused_gpl) = .;	\
f02e8a659   Alessio Igor Bogani   module: Sort expo...
288
  		*(SORT(___ksymtab_unused_gpl+*))			\
f71d20e96   Arjan van de Ven   [PATCH] Add EXPOR...
289
290
291
  		VMLINUX_SYMBOL(__stop___ksymtab_unused_gpl) = .;	\
  	}								\
  									\
9f28bb7e1   Greg Kroah-Hartman   [PATCH] add EXPOR...
292
293
294
  	/* Kernel symbol table: GPL-future-only symbols */		\
  	__ksymtab_gpl_future : AT(ADDR(__ksymtab_gpl_future) - LOAD_OFFSET) { \
  		VMLINUX_SYMBOL(__start___ksymtab_gpl_future) = .;	\
f02e8a659   Alessio Igor Bogani   module: Sort expo...
295
  		*(SORT(___ksymtab_gpl_future+*))			\
9f28bb7e1   Greg Kroah-Hartman   [PATCH] add EXPOR...
296
297
298
  		VMLINUX_SYMBOL(__stop___ksymtab_gpl_future) = .;	\
  	}								\
  									\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
299
300
301
  	/* Kernel symbol table: Normal symbols */			\
  	__kcrctab         : AT(ADDR(__kcrctab) - LOAD_OFFSET) {		\
  		VMLINUX_SYMBOL(__start___kcrctab) = .;			\
f02e8a659   Alessio Igor Bogani   module: Sort expo...
302
  		*(SORT(___kcrctab+*))					\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
303
304
305
306
307
308
  		VMLINUX_SYMBOL(__stop___kcrctab) = .;			\
  	}								\
  									\
  	/* Kernel symbol table: GPL-only symbols */			\
  	__kcrctab_gpl     : AT(ADDR(__kcrctab_gpl) - LOAD_OFFSET) {	\
  		VMLINUX_SYMBOL(__start___kcrctab_gpl) = .;		\
f02e8a659   Alessio Igor Bogani   module: Sort expo...
309
  		*(SORT(___kcrctab_gpl+*))				\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
310
311
312
  		VMLINUX_SYMBOL(__stop___kcrctab_gpl) = .;		\
  	}								\
  									\
f71d20e96   Arjan van de Ven   [PATCH] Add EXPOR...
313
314
315
  	/* Kernel symbol table: Normal unused symbols */		\
  	__kcrctab_unused  : AT(ADDR(__kcrctab_unused) - LOAD_OFFSET) {	\
  		VMLINUX_SYMBOL(__start___kcrctab_unused) = .;		\
f02e8a659   Alessio Igor Bogani   module: Sort expo...
316
  		*(SORT(___kcrctab_unused+*))				\
f71d20e96   Arjan van de Ven   [PATCH] Add EXPOR...
317
318
319
320
321
322
  		VMLINUX_SYMBOL(__stop___kcrctab_unused) = .;		\
  	}								\
  									\
  	/* Kernel symbol table: GPL-only unused symbols */		\
  	__kcrctab_unused_gpl : AT(ADDR(__kcrctab_unused_gpl) - LOAD_OFFSET) { \
  		VMLINUX_SYMBOL(__start___kcrctab_unused_gpl) = .;	\
f02e8a659   Alessio Igor Bogani   module: Sort expo...
323
  		*(SORT(___kcrctab_unused_gpl+*))			\
f71d20e96   Arjan van de Ven   [PATCH] Add EXPOR...
324
325
326
  		VMLINUX_SYMBOL(__stop___kcrctab_unused_gpl) = .;	\
  	}								\
  									\
9f28bb7e1   Greg Kroah-Hartman   [PATCH] add EXPOR...
327
328
329
  	/* Kernel symbol table: GPL-future-only symbols */		\
  	__kcrctab_gpl_future : AT(ADDR(__kcrctab_gpl_future) - LOAD_OFFSET) { \
  		VMLINUX_SYMBOL(__start___kcrctab_gpl_future) = .;	\
f02e8a659   Alessio Igor Bogani   module: Sort expo...
330
  		*(SORT(___kcrctab_gpl_future+*))			\
9f28bb7e1   Greg Kroah-Hartman   [PATCH] add EXPOR...
331
332
333
  		VMLINUX_SYMBOL(__stop___kcrctab_gpl_future) = .;	\
  	}								\
  									\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
334
335
336
337
338
  	/* Kernel symbol table: strings */				\
          __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) {	\
  		*(__ksymtab_strings)					\
  	}								\
  									\
eb8f68904   Sam Ravnborg   Use separate sect...
339
340
  	/* __*init sections */						\
  	__init_rodata : AT(ADDR(__init_rodata) - LOAD_OFFSET) {		\
312b1485f   Sam Ravnborg   Introduce new sec...
341
  		*(.ref.rodata)						\
eb8f68904   Sam Ravnborg   Use separate sect...
342
343
344
345
346
347
348
349
  		DEV_KEEP(init.rodata)					\
  		DEV_KEEP(exit.rodata)					\
  		CPU_KEEP(init.rodata)					\
  		CPU_KEEP(exit.rodata)					\
  		MEM_KEEP(init.rodata)					\
  		MEM_KEEP(exit.rodata)					\
  	}								\
  									\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
350
351
352
353
354
  	/* Built-in module parameters. */				\
  	__param : AT(ADDR(__param) - LOAD_OFFSET) {			\
  		VMLINUX_SYMBOL(__start___param) = .;			\
  		*(__param)						\
  		VMLINUX_SYMBOL(__stop___param) = .;			\
e94965ed5   Dmitry Torokhov   module: show vers...
355
356
357
358
359
360
361
  	}								\
  									\
  	/* Built-in module versions. */					\
  	__modver : AT(ADDR(__modver) - LOAD_OFFSET) {			\
  		VMLINUX_SYMBOL(__start___modver) = .;			\
  		*(__modver)						\
  		VMLINUX_SYMBOL(__stop___modver) = .;			\
edeed3058   Arjan van de Ven   x86: add testcase...
362
  		. = ALIGN((align));					\
6569580de   Vivek Goyal   [PATCH] i386: Dis...
363
  		VMLINUX_SYMBOL(__end_rodata) = .;			\
7583ddfd3   Marcelo Tosatti   [PATCH] Include _...
364
  	}								\
4096b46f0   Sam Ravnborg   sparc64: fix alig...
365
  	. = ALIGN((align));
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
366
  /* RODATA & RO_DATA provided for backward compatibility.
4096b46f0   Sam Ravnborg   sparc64: fix alig...
367
   * All archs are supposed to use RO_DATA() */
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
368
369
  #define RODATA          RO_DATA_SECTION(4096)
  #define RO_DATA(align)  RO_DATA_SECTION(align)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
370
371
  
  #define SECURITY_INIT							\
60bad7fad   Eric W. Biederman   [PATCH] kexec: vm...
372
  	.security_initcall.init : AT(ADDR(.security_initcall.init) - LOAD_OFFSET) { \
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
373
374
375
376
  		VMLINUX_SYMBOL(__security_initcall_start) = .;		\
  		*(.security_initcall.init) 				\
  		VMLINUX_SYMBOL(__security_initcall_end) = .;		\
  	}
7664709b4   Sam Ravnborg   all-archs: consol...
377
378
379
380
  /* .text section. Map to function alignment to avoid address changes
   * during second ld run in second ld pass when generating System.map */
  #define TEXT_TEXT							\
  		ALIGN_FUNCTION();					\
fb5e2b379   Jan Beulich   vmlinux.lds: move...
381
  		*(.text.hot)						\
0e0d314e6   Sam Ravnborg   kbuild: introduce...
382
  		*(.text)						\
312b1485f   Sam Ravnborg   Introduce new sec...
383
  		*(.ref.text)						\
eb8f68904   Sam Ravnborg   Use separate sect...
384
385
386
387
388
  	DEV_KEEP(init.text)						\
  	DEV_KEEP(exit.text)						\
  	CPU_KEEP(init.text)						\
  	CPU_KEEP(exit.text)						\
  	MEM_KEEP(init.text)						\
fb5e2b379   Jan Beulich   vmlinux.lds: move...
389
390
  	MEM_KEEP(exit.text)						\
  		*(.text.unlikely)
eb8f68904   Sam Ravnborg   Use separate sect...
391

7664709b4   Sam Ravnborg   all-archs: consol...
392

6d30e3a89   Sam Ravnborg   kbuild: Avoid inc...
393
394
  /* sched.text is aling to function alignment to secure we have same
   * address even at second ld pass when generating System.map */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
395
  #define SCHED_TEXT							\
6d30e3a89   Sam Ravnborg   kbuild: Avoid inc...
396
  		ALIGN_FUNCTION();					\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
397
398
399
  		VMLINUX_SYMBOL(__sched_text_start) = .;			\
  		*(.sched.text)						\
  		VMLINUX_SYMBOL(__sched_text_end) = .;
6d30e3a89   Sam Ravnborg   kbuild: Avoid inc...
400
401
  /* spinlock.text is aling to function alignment to secure we have same
   * address even at second ld pass when generating System.map */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
402
  #define LOCK_TEXT							\
6d30e3a89   Sam Ravnborg   kbuild: Avoid inc...
403
  		ALIGN_FUNCTION();					\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
404
405
406
  		VMLINUX_SYMBOL(__lock_text_start) = .;			\
  		*(.spinlock.text)					\
  		VMLINUX_SYMBOL(__lock_text_end) = .;
d0aaff979   Prasanna S Panchamukhi   [PATCH] Kprobes: ...
407
408
409
410
411
412
  
  #define KPROBES_TEXT							\
  		ALIGN_FUNCTION();					\
  		VMLINUX_SYMBOL(__kprobes_text_start) = .;		\
  		*(.kprobes.text)					\
  		VMLINUX_SYMBOL(__kprobes_text_end) = .;
a7d0c2103   Paolo 'Blaisorblade' Giarrusso   [PATCH] i386 / um...
413

ea7145477   Jiri Olsa   x86: Separate out...
414
415
416
417
418
  #define ENTRY_TEXT							\
  		ALIGN_FUNCTION();					\
  		VMLINUX_SYMBOL(__entry_text_start) = .;			\
  		*(.entry.text)						\
  		VMLINUX_SYMBOL(__entry_text_end) = .;
a0343e823   Frederic Weisbecker   tracing/function-...
419
420
421
422
423
424
425
426
427
  #ifdef CONFIG_FUNCTION_GRAPH_TRACER
  #define IRQENTRY_TEXT							\
  		ALIGN_FUNCTION();					\
  		VMLINUX_SYMBOL(__irqentry_text_start) = .;		\
  		*(.irqentry.text)					\
  		VMLINUX_SYMBOL(__irqentry_text_end) = .;
  #else
  #define IRQENTRY_TEXT
  #endif
37c514e3d   Sam Ravnborg   Add missing init ...
428
  /* Section used for early init (in .S files) */
7923f90ff   Sam Ravnborg   vmlinux.lds.h update
429
  #define HEAD_TEXT  *(.head.text)
37c514e3d   Sam Ravnborg   Add missing init ...
430

7923f90ff   Sam Ravnborg   vmlinux.lds.h update
431
  #define HEAD_TEXT_SECTION							\
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
  	.head.text : AT(ADDR(.head.text) - LOAD_OFFSET) {		\
  		HEAD_TEXT						\
  	}
  
  /*
   * Exception table
   */
  #define EXCEPTION_TABLE(align)						\
  	. = ALIGN(align);						\
  	__ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) {		\
  		VMLINUX_SYMBOL(__start___ex_table) = .;			\
  		*(__ex_table)						\
  		VMLINUX_SYMBOL(__stop___ex_table) = .;			\
  	}
  
  /*
   * Init task
   */
39a449d96   Tim Abbott   asm-generic/vmlin...
450
  #define INIT_TASK_DATA_SECTION(align)					\
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
451
  	. = ALIGN(align);						\
da5e37efe   Sam Ravnborg   vmlinux.lds: fix ...
452
  	.data..init_task :  AT(ADDR(.data..init_task) - LOAD_OFFSET) {	\
39a449d96   Tim Abbott   asm-generic/vmlin...
453
  		INIT_TASK_DATA(align)					\
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
454
  	}
37c514e3d   Sam Ravnborg   Add missing init ...
455

b99b87f70   Peter Oberparleiter   kernel: construct...
456
  #ifdef CONFIG_CONSTRUCTORS
2a2325e6e   Heiko Carstens   gcov: fix __ctors...
457
458
  #define KERNEL_CTORS()	. = ALIGN(8);			   \
  			VMLINUX_SYMBOL(__ctors_start) = .; \
b99b87f70   Peter Oberparleiter   kernel: construct...
459
460
461
462
463
  			*(.ctors)			   \
  			VMLINUX_SYMBOL(__ctors_end) = .;
  #else
  #define KERNEL_CTORS()
  #endif
01ba2bdc6   Sam Ravnborg   all archs: consol...
464
  /* init and exit section handling */
eb8f68904   Sam Ravnborg   Use separate sect...
465
466
467
  #define INIT_DATA							\
  	*(.init.data)							\
  	DEV_DISCARD(init.data)						\
eb8f68904   Sam Ravnborg   Use separate sect...
468
  	CPU_DISCARD(init.data)						\
eb8f68904   Sam Ravnborg   Use separate sect...
469
  	MEM_DISCARD(init.data)						\
b99b87f70   Peter Oberparleiter   kernel: construct...
470
  	KERNEL_CTORS()							\
fd6c3a8dc   Jan Beulich   initconst adjustm...
471
  	*(.init.rodata)							\
4b3b4c5e6   John Reiser   ftrace: __start_m...
472
  	MCOUNT_REC()							\
e4a9ea5ee   Steven Rostedt   tracing: Replace ...
473
  	FTRACE_EVENTS()							\
3d56e331b   Steven Rostedt   tracing: Replace ...
474
  	TRACE_SYSCALLS()						\
fd6c3a8dc   Jan Beulich   initconst adjustm...
475
476
  	DEV_DISCARD(init.rodata)					\
  	CPU_DISCARD(init.rodata)					\
aab94339c   Dirk Brandewie   of: Add support f...
477
478
  	MEM_DISCARD(init.rodata)					\
  	KERNEL_DTB()
eb8f68904   Sam Ravnborg   Use separate sect...
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
  
  #define INIT_TEXT							\
  	*(.init.text)							\
  	DEV_DISCARD(init.text)						\
  	CPU_DISCARD(init.text)						\
  	MEM_DISCARD(init.text)
  
  #define EXIT_DATA							\
  	*(.exit.data)							\
  	DEV_DISCARD(exit.data)						\
  	DEV_DISCARD(exit.rodata)					\
  	CPU_DISCARD(exit.data)						\
  	CPU_DISCARD(exit.rodata)					\
  	MEM_DISCARD(exit.data)						\
  	MEM_DISCARD(exit.rodata)
01ba2bdc6   Sam Ravnborg   all archs: consol...
494

eb8f68904   Sam Ravnborg   Use separate sect...
495
496
497
498
499
  #define EXIT_TEXT							\
  	*(.exit.text)							\
  	DEV_DISCARD(exit.text)						\
  	CPU_DISCARD(exit.text)						\
  	MEM_DISCARD(exit.text)
01ba2bdc6   Sam Ravnborg   all archs: consol...
500

7923f90ff   Sam Ravnborg   vmlinux.lds.h update
501
502
  #define EXIT_CALL							\
  	*(.exitcall.exit)
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
503
504
505
506
  /*
   * bss (Block Started by Symbol) - uninitialized data
   * zeroed during startup
   */
04e448d9a   Tim Abbott   vmlinux.lds.h: re...
507
508
  #define SBSS(sbss_align)						\
  	. = ALIGN(sbss_align);						\
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
509
510
511
512
513
514
515
516
  	.sbss : AT(ADDR(.sbss) - LOAD_OFFSET) {				\
  		*(.sbss)						\
  		*(.scommon)						\
  	}
  
  #define BSS(bss_align)							\
  	. = ALIGN(bss_align);						\
  	.bss : AT(ADDR(.bss) - LOAD_OFFSET) {				\
7c74df07f   Tim Abbott   Rename .bss.page_...
517
  		*(.bss..page_aligned)					\
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
518
519
520
  		*(.dynbss)						\
  		*(.bss)							\
  		*(COMMON)						\
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
521
522
523
524
525
526
527
  	}
  
  /*
   * DWARF debug sections.
   * Symbols in the DWARF debugging sections are relative to
   * the beginning of the section so we begin them at 0.
   */
a7d0c2103   Paolo 'Blaisorblade' Giarrusso   [PATCH] i386 / um...
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
  #define DWARF_DEBUG							\
  		/* DWARF 1 */						\
  		.debug          0 : { *(.debug) }			\
  		.line           0 : { *(.line) }			\
  		/* GNU DWARF 1 extensions */				\
  		.debug_srcinfo  0 : { *(.debug_srcinfo) }		\
  		.debug_sfnames  0 : { *(.debug_sfnames) }		\
  		/* DWARF 1.1 and DWARF 2 */				\
  		.debug_aranges  0 : { *(.debug_aranges) }		\
  		.debug_pubnames 0 : { *(.debug_pubnames) }		\
  		/* DWARF 2 */						\
  		.debug_info     0 : { *(.debug_info			\
  				.gnu.linkonce.wi.*) }			\
  		.debug_abbrev   0 : { *(.debug_abbrev) }		\
  		.debug_line     0 : { *(.debug_line) }			\
  		.debug_frame    0 : { *(.debug_frame) }			\
  		.debug_str      0 : { *(.debug_str) }			\
  		.debug_loc      0 : { *(.debug_loc) }			\
  		.debug_macinfo  0 : { *(.debug_macinfo) }		\
  		/* SGI/MIPS DWARF 2 extensions */			\
  		.debug_weaknames 0 : { *(.debug_weaknames) }		\
  		.debug_funcnames 0 : { *(.debug_funcnames) }		\
  		.debug_typenames 0 : { *(.debug_typenames) }		\
  		.debug_varnames  0 : { *(.debug_varnames) }		\
  
  		/* Stabs debugging sections.  */
  #define STABS_DEBUG							\
  		.stab 0 : { *(.stab) }					\
  		.stabstr 0 : { *(.stabstr) }				\
  		.stab.excl 0 : { *(.stab.excl) }			\
  		.stab.exclstr 0 : { *(.stab.exclstr) }			\
  		.stab.index 0 : { *(.stab.index) }			\
  		.stab.indexstr 0 : { *(.stab.indexstr) }		\
  		.comment 0 : { *(.comment) }
9c9b8b388   Jeremy Fitzhardinge   [PATCH] x86: put ...
562

6360b1fbb   Jan Beulich   move BUG_TABLE in...
563
  #ifdef CONFIG_GENERIC_BUG
7664c5a1d   Jeremy Fitzhardinge   [PATCH] Generic B...
564
565
566
  #define BUG_TABLE							\
  	. = ALIGN(8);							\
  	__bug_table : AT(ADDR(__bug_table) - LOAD_OFFSET) {		\
c6de00261   Yoshinori Sato   Missing symbol pr...
567
  		VMLINUX_SYMBOL(__start___bug_table) = .;		\
7664c5a1d   Jeremy Fitzhardinge   [PATCH] Generic B...
568
  		*(__bug_table)						\
c6de00261   Yoshinori Sato   Missing symbol pr...
569
  		VMLINUX_SYMBOL(__stop___bug_table) = .;			\
7664c5a1d   Jeremy Fitzhardinge   [PATCH] Generic B...
570
  	}
6360b1fbb   Jan Beulich   move BUG_TABLE in...
571
572
573
  #else
  #define BUG_TABLE
  #endif
7664c5a1d   Jeremy Fitzhardinge   [PATCH] Generic B...
574

63687a528   Jan Beulich   x86: move traceda...
575
576
577
578
  #ifdef CONFIG_PM_TRACE
  #define TRACEDATA							\
  	. = ALIGN(4);							\
  	.tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) {		\
c6de00261   Yoshinori Sato   Missing symbol pr...
579
  		VMLINUX_SYMBOL(__tracedata_start) = .;			\
63687a528   Jan Beulich   x86: move traceda...
580
  		*(.tracedata)						\
c6de00261   Yoshinori Sato   Missing symbol pr...
581
  		VMLINUX_SYMBOL(__tracedata_end) = .;			\
63687a528   Jan Beulich   x86: move traceda...
582
583
584
585
  	}
  #else
  #define TRACEDATA
  #endif
9c9b8b388   Jeremy Fitzhardinge   [PATCH] x86: put ...
586
  #define NOTES								\
cbe87121f   Roland McGrath   i386: Put allocat...
587
588
589
590
591
  	.notes : AT(ADDR(.notes) - LOAD_OFFSET) {			\
  		VMLINUX_SYMBOL(__start_notes) = .;			\
  		*(.note.*)						\
  		VMLINUX_SYMBOL(__stop_notes) = .;			\
  	}
61ce1efe6   Andrew Morton   [PATCH] vmlinux.l...
592

ef53dae86   Sam Ravnborg   Improve vmlinux.l...
593
594
595
596
597
  #define INIT_SETUP(initsetup_align)					\
  		. = ALIGN(initsetup_align);				\
  		VMLINUX_SYMBOL(__setup_start) = .;			\
  		*(.init.setup)						\
  		VMLINUX_SYMBOL(__setup_end) = .;
61ce1efe6   Andrew Morton   [PATCH] vmlinux.l...
598
  #define INITCALLS							\
c2147a509   Eduard - Gabriel Munteanu   Better interface ...
599
  	*(.initcallearly.init)						\
c6de00261   Yoshinori Sato   Missing symbol pr...
600
  	VMLINUX_SYMBOL(__early_initcall_end) = .;			\
b3438f826   Linus Torvalds   Add "pure_initcal...
601
602
    	*(.initcall0.init)						\
    	*(.initcall0s.init)						\
61ce1efe6   Andrew Morton   [PATCH] vmlinux.l...
603
    	*(.initcall1.init)						\
735a7ffb7   Andrew Morton   [PATCH] drivers: ...
604
    	*(.initcall1s.init)						\
61ce1efe6   Andrew Morton   [PATCH] vmlinux.l...
605
    	*(.initcall2.init)						\
735a7ffb7   Andrew Morton   [PATCH] drivers: ...
606
    	*(.initcall2s.init)						\
61ce1efe6   Andrew Morton   [PATCH] vmlinux.l...
607
    	*(.initcall3.init)						\
735a7ffb7   Andrew Morton   [PATCH] drivers: ...
608
    	*(.initcall3s.init)						\
61ce1efe6   Andrew Morton   [PATCH] vmlinux.l...
609
    	*(.initcall4.init)						\
735a7ffb7   Andrew Morton   [PATCH] drivers: ...
610
    	*(.initcall4s.init)						\
61ce1efe6   Andrew Morton   [PATCH] vmlinux.l...
611
    	*(.initcall5.init)						\
735a7ffb7   Andrew Morton   [PATCH] drivers: ...
612
    	*(.initcall5s.init)						\
8d610dd52   Linus Torvalds   Make sure we popu...
613
  	*(.initcallrootfs.init)						\
61ce1efe6   Andrew Morton   [PATCH] vmlinux.l...
614
    	*(.initcall6.init)						\
735a7ffb7   Andrew Morton   [PATCH] drivers: ...
615
616
617
    	*(.initcall6s.init)						\
    	*(.initcall7.init)						\
    	*(.initcall7s.init)
61ce1efe6   Andrew Morton   [PATCH] vmlinux.l...
618

ef53dae86   Sam Ravnborg   Improve vmlinux.l...
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
  #define INIT_CALLS							\
  		VMLINUX_SYMBOL(__initcall_start) = .;			\
  		INITCALLS						\
  		VMLINUX_SYMBOL(__initcall_end) = .;
  
  #define CON_INITCALL							\
  		VMLINUX_SYMBOL(__con_initcall_start) = .;		\
  		*(.con_initcall.init)					\
  		VMLINUX_SYMBOL(__con_initcall_end) = .;
  
  #define SECURITY_INITCALL						\
  		VMLINUX_SYMBOL(__security_initcall_start) = .;		\
  		*(.security_initcall.init)				\
  		VMLINUX_SYMBOL(__security_initcall_end) = .;
  
  #ifdef CONFIG_BLK_DEV_INITRD
  #define INIT_RAM_FS							\
d88262623   Mike Frysinger   vmlinux.lds.h: lo...
636
  	. = ALIGN(4);							\
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
637
638
  	VMLINUX_SYMBOL(__initramfs_start) = .;				\
  	*(.init.ramfs)							\
ffe8018c3   Hendrik Brueckner   initramfs: fix in...
639
640
  	. = ALIGN(8);							\
  	*(.init.ramfs.info)
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
641
  #else
eadfe2198   David Howells   LDSCRIPT: Name IN...
642
  #define INIT_RAM_FS
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
643
  #endif
023bf6f1b   Tejun Heo   linker script: un...
644
645
646
647
648
649
650
651
652
  /*
   * Default discarded sections.
   *
   * Some archs want to discard exit text/data at runtime rather than
   * link time due to cross-section references such as alt instructions,
   * bug table, eh_frame, etc.  DISCARDS must be the last of output
   * section definitions so that such archs put those in earlier section
   * definitions.
   */
405d967dc   Tejun Heo   linker script: th...
653
654
655
656
  #define DISCARDS							\
  	/DISCARD/ : {							\
  	EXIT_TEXT							\
  	EXIT_DATA							\
023bf6f1b   Tejun Heo   linker script: un...
657
  	EXIT_CALL							\
405d967dc   Tejun Heo   linker script: th...
658
  	*(.discard)							\
c7f52cdc2   Jeremy Fitzhardinge   support multiple ...
659
  	*(.discard.*)							\
405d967dc   Tejun Heo   linker script: th...
660
  	}
3e5d8f978   Tejun Heo   x86: make percpu ...
661
  /**
6ea0c34da   Mike Frysinger   percpu: Unify inp...
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
   * PERCPU_INPUT - the percpu input sections
   * @cacheline: cacheline size
   *
   * The core percpu section names and core symbols which do not rely
   * directly upon load addresses.
   *
   * @cacheline is used to align subsections to avoid false cacheline
   * sharing between subsections for different purposes.
   */
  #define PERCPU_INPUT(cacheline)						\
  	VMLINUX_SYMBOL(__per_cpu_start) = .;				\
  	*(.data..percpu..first)						\
  	. = ALIGN(PAGE_SIZE);						\
  	*(.data..percpu..page_aligned)					\
  	. = ALIGN(cacheline);						\
  	*(.data..percpu..readmostly)					\
  	. = ALIGN(cacheline);						\
  	*(.data..percpu)						\
  	*(.data..percpu..shared_aligned)				\
  	VMLINUX_SYMBOL(__per_cpu_end) = .;
  
  /**
6b7c38d55   Tejun Heo   linker script: ki...
684
   * PERCPU_VADDR - define output section for percpu area
19df0c2fe   Tejun Heo   percpu: align per...
685
   * @cacheline: cacheline size
3e5d8f978   Tejun Heo   x86: make percpu ...
686
687
688
   * @vaddr: explicit base address (optional)
   * @phdr: destination PHDR (optional)
   *
19df0c2fe   Tejun Heo   percpu: align per...
689
690
691
692
693
694
695
696
   * Macro which expands to output section for percpu area.
   *
   * @cacheline is used to align subsections to avoid false cacheline
   * sharing between subsections for different purposes.
   *
   * If @vaddr is not blank, it specifies explicit base address and all
   * percpu symbols will be offset from the given address.  If blank,
   * @vaddr always equals @laddr + LOAD_OFFSET.
3e5d8f978   Tejun Heo   x86: make percpu ...
697
698
699
700
701
702
   *
   * @phdr defines the output PHDR to use if not blank.  Be warned that
   * output PHDR is sticky.  If @phdr is specified, the next output
   * section in the linker script will go there too.  @phdr should have
   * a leading colon.
   *
3ac6cffea   Tejun Heo   linker script: us...
703
704
   * Note that this macros defines __per_cpu_load as an absolute symbol.
   * If there is no need to put the percpu section at a predetermined
0415b00d1   Tejun Heo   percpu: Always al...
705
   * address, use PERCPU_SECTION.
3e5d8f978   Tejun Heo   x86: make percpu ...
706
   */
19df0c2fe   Tejun Heo   percpu: align per...
707
  #define PERCPU_VADDR(cacheline, vaddr, phdr)				\
dba3d36b2   Ingo Molnar   Revert "generic, ...
708
  	VMLINUX_SYMBOL(__per_cpu_load) = .;				\
3d9a854c2   Denys Vlasenko   Rename .data[.per...
709
  	.data..percpu vaddr : AT(VMLINUX_SYMBOL(__per_cpu_load)		\
6b7c38d55   Tejun Heo   linker script: ki...
710
  				- LOAD_OFFSET) {			\
6ea0c34da   Mike Frysinger   percpu: Unify inp...
711
  		PERCPU_INPUT(cacheline)					\
6b7c38d55   Tejun Heo   linker script: ki...
712
  	} phdr								\
3d9a854c2   Denys Vlasenko   Rename .data[.per...
713
  	. = VMLINUX_SYMBOL(__per_cpu_load) + SIZEOF(.data..percpu);
3e5d8f978   Tejun Heo   x86: make percpu ...
714
715
  
  /**
0415b00d1   Tejun Heo   percpu: Always al...
716
   * PERCPU_SECTION - define output section for percpu area, simple version
19df0c2fe   Tejun Heo   percpu: align per...
717
   * @cacheline: cacheline size
3e5d8f978   Tejun Heo   x86: make percpu ...
718
   *
0415b00d1   Tejun Heo   percpu: Always al...
719
720
   * Align to PAGE_SIZE and outputs output section for percpu area.  This
   * macro doesn't manipulate @vaddr or @phdr and __per_cpu_load and
3e5d8f978   Tejun Heo   x86: make percpu ...
721
   * __per_cpu_start will be identical.
3ac6cffea   Tejun Heo   linker script: us...
722
   *
0415b00d1   Tejun Heo   percpu: Always al...
723
   * This macro is equivalent to ALIGN(PAGE_SIZE); PERCPU_VADDR(@cacheline,,)
19df0c2fe   Tejun Heo   percpu: align per...
724
725
   * except that __per_cpu_load is defined as a relative symbol against
   * .data..percpu which is required for relocatable x86_32 configuration.
3e5d8f978   Tejun Heo   x86: make percpu ...
726
   */
0415b00d1   Tejun Heo   percpu: Always al...
727
728
  #define PERCPU_SECTION(cacheline)					\
  	. = ALIGN(PAGE_SIZE);						\
3d9a854c2   Denys Vlasenko   Rename .data[.per...
729
  	.data..percpu	: AT(ADDR(.data..percpu) - LOAD_OFFSET) {	\
3ac6cffea   Tejun Heo   linker script: us...
730
  		VMLINUX_SYMBOL(__per_cpu_load) = .;			\
6ea0c34da   Mike Frysinger   percpu: Unify inp...
731
  		PERCPU_INPUT(cacheline)					\
3ac6cffea   Tejun Heo   linker script: us...
732
  	}
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
  
  
  /*
   * Definition of the high level *_SECTION macros
   * They will fit only a subset of the architectures
   */
  
  
  /*
   * Writeable data.
   * All sections are combined in a single .data section.
   * The sections following CONSTRUCTORS are arranged so their
   * typical alignment matches.
   * A cacheline is typical/always less than a PAGE_SIZE so
   * the sections that has this restriction (or similar)
   * is located before the ones requiring PAGE_SIZE alignment.
   * NOSAVE_DATA starts and ends with a PAGE_SIZE alignment which
25985edce   Lucas De Marchi   Fix common misspe...
750
   * matches the requirement of PAGE_ALIGNED_DATA.
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
751
   *
7923f90ff   Sam Ravnborg   vmlinux.lds.h update
752
   * use 0 as page_align if page_aligned data is not used */
73f1d9391   Paul Mundt   asm-generic/vmlin...
753
  #define RW_DATA_SECTION(cacheline, pagealigned, inittask)		\
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
754
755
  	. = ALIGN(PAGE_SIZE);						\
  	.data : AT(ADDR(.data) - LOAD_OFFSET) {				\
39a449d96   Tim Abbott   asm-generic/vmlin...
756
  		INIT_TASK_DATA(inittask)				\
1b2086227   Tim Abbott   Optimize the orde...
757
758
  		NOSAVE_DATA						\
  		PAGE_ALIGNED_DATA(pagealigned)				\
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
759
760
761
762
  		CACHELINE_ALIGNED_DATA(cacheline)			\
  		READ_MOSTLY_DATA(cacheline)				\
  		DATA_DATA						\
  		CONSTRUCTORS						\
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
  	}
  
  #define INIT_TEXT_SECTION(inittext_align)				\
  	. = ALIGN(inittext_align);					\
  	.init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {		\
  		VMLINUX_SYMBOL(_sinittext) = .;				\
  		INIT_TEXT						\
  		VMLINUX_SYMBOL(_einittext) = .;				\
  	}
  
  #define INIT_DATA_SECTION(initsetup_align)				\
  	.init.data : AT(ADDR(.init.data) - LOAD_OFFSET) {		\
  		INIT_DATA						\
  		INIT_SETUP(initsetup_align)				\
  		INIT_CALLS						\
  		CON_INITCALL						\
  		SECURITY_INITCALL					\
  		INIT_RAM_FS						\
  	}
04e448d9a   Tim Abbott   vmlinux.lds.h: re...
782
783
784
785
  #define BSS_SECTION(sbss_align, bss_align, stop_align)			\
  	. = ALIGN(sbss_align);						\
  	VMLINUX_SYMBOL(__bss_start) = .;				\
  	SBSS(sbss_align)						\
ef53dae86   Sam Ravnborg   Improve vmlinux.l...
786
  	BSS(bss_align)							\
04e448d9a   Tim Abbott   vmlinux.lds.h: re...
787
788
  	. = ALIGN(stop_align);						\
  	VMLINUX_SYMBOL(__bss_stop) = .;