aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-generic/vmlinux.lds.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-generic/vmlinux.lds.h')
-rw-r--r--include/asm-generic/vmlinux.lds.h106
1 files changed, 88 insertions, 18 deletions
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index c61fab1dd2f8..89853bcd27a6 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -1,3 +1,5 @@
1#include <linux/section-names.h>
2
1#ifndef LOAD_OFFSET 3#ifndef LOAD_OFFSET
2#define LOAD_OFFSET 0 4#define LOAD_OFFSET 0
3#endif 5#endif
@@ -61,10 +63,33 @@
61#define BRANCH_PROFILE() 63#define BRANCH_PROFILE()
62#endif 64#endif
63 65
66#ifdef CONFIG_EVENT_TRACER
67#define FTRACE_EVENTS() VMLINUX_SYMBOL(__start_ftrace_events) = .; \
68 *(_ftrace_events) \
69 VMLINUX_SYMBOL(__stop_ftrace_events) = .;
70#else
71#define FTRACE_EVENTS()
72#endif
73
74#ifdef CONFIG_TRACING
75#define TRACE_PRINTKS() VMLINUX_SYMBOL(__start___trace_bprintk_fmt) = .; \
76 *(__trace_printk_fmt) /* Trace_printk fmt' pointer */ \
77 VMLINUX_SYMBOL(__stop___trace_bprintk_fmt) = .;
78#else
79#define TRACE_PRINTKS()
80#endif
81
82#ifdef CONFIG_FTRACE_SYSCALLS
83#define TRACE_SYSCALLS() VMLINUX_SYMBOL(__start_syscalls_metadata) = .; \
84 *(__syscalls_metadata) \
85 VMLINUX_SYMBOL(__stop_syscalls_metadata) = .;
86#else
87#define TRACE_SYSCALLS()
88#endif
89
64/* .data section */ 90/* .data section */
65#define DATA_DATA \ 91#define DATA_DATA \
66 *(.data) \ 92 *(.data) \
67 *(.data.init.refok) \
68 *(.ref.data) \ 93 *(.ref.data) \
69 DEV_KEEP(init.data) \ 94 DEV_KEEP(init.data) \
70 DEV_KEEP(exit.data) \ 95 DEV_KEEP(exit.data) \
@@ -80,8 +105,16 @@
80 VMLINUX_SYMBOL(__start___tracepoints) = .; \ 105 VMLINUX_SYMBOL(__start___tracepoints) = .; \
81 *(__tracepoints) \ 106 *(__tracepoints) \
82 VMLINUX_SYMBOL(__stop___tracepoints) = .; \ 107 VMLINUX_SYMBOL(__stop___tracepoints) = .; \
108 /* implement dynamic printk debug */ \
109 . = ALIGN(8); \
110 VMLINUX_SYMBOL(__start___verbose) = .; \
111 *(__verbose) \
112 VMLINUX_SYMBOL(__stop___verbose) = .; \
83 LIKELY_PROFILE() \ 113 LIKELY_PROFILE() \
84 BRANCH_PROFILE() 114 BRANCH_PROFILE() \
115 TRACE_PRINTKS() \
116 FTRACE_EVENTS() \
117 TRACE_SYSCALLS()
85 118
86#define RO_DATA(align) \ 119#define RO_DATA(align) \
87 . = ALIGN((align)); \ 120 . = ALIGN((align)); \
@@ -255,8 +288,6 @@
255 *(.text.hot) \ 288 *(.text.hot) \
256 *(.text) \ 289 *(.text) \
257 *(.ref.text) \ 290 *(.ref.text) \
258 *(.text.init.refok) \
259 *(.exit.text.refok) \
260 DEV_KEEP(init.text) \ 291 DEV_KEEP(init.text) \
261 DEV_KEEP(exit.text) \ 292 DEV_KEEP(exit.text) \
262 CPU_KEEP(init.text) \ 293 CPU_KEEP(init.text) \
@@ -299,7 +330,7 @@
299#endif 330#endif
300 331
301/* Section used for early init (in .S files) */ 332/* Section used for early init (in .S files) */
302#define HEAD_TEXT *(.head.text) 333#define HEAD_TEXT *(HEAD_TEXT_SECTION)
303 334
304/* init and exit section handling */ 335/* init and exit section handling */
305#define INIT_DATA \ 336#define INIT_DATA \
@@ -309,15 +340,7 @@
309 CPU_DISCARD(init.data) \ 340 CPU_DISCARD(init.data) \
310 CPU_DISCARD(init.rodata) \ 341 CPU_DISCARD(init.rodata) \
311 MEM_DISCARD(init.data) \ 342 MEM_DISCARD(init.data) \
312 MEM_DISCARD(init.rodata) \ 343 MEM_DISCARD(init.rodata)
313 /* implement dynamic printk debug */ \
314 VMLINUX_SYMBOL(__start___verbose_strings) = .; \
315 *(__verbose_strings) \
316 VMLINUX_SYMBOL(__stop___verbose_strings) = .; \
317 . = ALIGN(8); \
318 VMLINUX_SYMBOL(__start___verbose) = .; \
319 *(__verbose) \
320 VMLINUX_SYMBOL(__stop___verbose) = .;
321 344
322#define INIT_TEXT \ 345#define INIT_TEXT \
323 *(.init.text) \ 346 *(.init.text) \
@@ -430,12 +453,59 @@
430 *(.initcall7.init) \ 453 *(.initcall7.init) \
431 *(.initcall7s.init) 454 *(.initcall7s.init)
432 455
456/**
457 * PERCPU_VADDR - define output section for percpu area
458 * @vaddr: explicit base address (optional)
459 * @phdr: destination PHDR (optional)
460 *
461 * Macro which expands to output section for percpu area. If @vaddr
462 * is not blank, it specifies explicit base address and all percpu
463 * symbols will be offset from the given address. If blank, @vaddr
464 * always equals @laddr + LOAD_OFFSET.
465 *
466 * @phdr defines the output PHDR to use if not blank. Be warned that
467 * output PHDR is sticky. If @phdr is specified, the next output
468 * section in the linker script will go there too. @phdr should have
469 * a leading colon.
470 *
471 * Note that this macros defines __per_cpu_load as an absolute symbol.
472 * If there is no need to put the percpu section at a predetermined
473 * address, use PERCPU().
474 */
475#define PERCPU_VADDR(vaddr, phdr) \
476 VMLINUX_SYMBOL(__per_cpu_load) = .; \
477 .data.percpu vaddr : AT(VMLINUX_SYMBOL(__per_cpu_load) \
478 - LOAD_OFFSET) { \
479 VMLINUX_SYMBOL(__per_cpu_start) = .; \
480 *(.data.percpu.first) \
481 *(.data.percpu.page_aligned) \
482 *(.data.percpu) \
483 *(.data.percpu.shared_aligned) \
484 VMLINUX_SYMBOL(__per_cpu_end) = .; \
485 } phdr \
486 . = VMLINUX_SYMBOL(__per_cpu_load) + SIZEOF(.data.percpu);
487
488/**
489 * PERCPU - define output section for percpu area, simple version
490 * @align: required alignment
491 *
492 * Align to @align and outputs output section for percpu area. This
493 * macro doesn't maniuplate @vaddr or @phdr and __per_cpu_load and
494 * __per_cpu_start will be identical.
495 *
496 * This macro is equivalent to ALIGN(align); PERCPU_VADDR( , ) except
497 * that __per_cpu_load is defined as a relative symbol against
498 * .data.percpu which is required for relocatable x86_32
499 * configuration.
500 */
433#define PERCPU(align) \ 501#define PERCPU(align) \
434 . = ALIGN(align); \ 502 . = ALIGN(align); \
435 VMLINUX_SYMBOL(__per_cpu_start) = .; \ 503 .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) { \
436 .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) { \ 504 VMLINUX_SYMBOL(__per_cpu_load) = .; \
505 VMLINUX_SYMBOL(__per_cpu_start) = .; \
506 *(.data.percpu.first) \
437 *(.data.percpu.page_aligned) \ 507 *(.data.percpu.page_aligned) \
438 *(.data.percpu) \ 508 *(.data.percpu) \
439 *(.data.percpu.shared_aligned) \ 509 *(.data.percpu.shared_aligned) \
440 } \ 510 VMLINUX_SYMBOL(__per_cpu_end) = .; \
441 VMLINUX_SYMBOL(__per_cpu_end) = .; 511 }