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.h70
1 files changed, 57 insertions, 13 deletions
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index c61fab1dd2f8..a654d724d3b0 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -80,6 +80,11 @@
80 VMLINUX_SYMBOL(__start___tracepoints) = .; \ 80 VMLINUX_SYMBOL(__start___tracepoints) = .; \
81 *(__tracepoints) \ 81 *(__tracepoints) \
82 VMLINUX_SYMBOL(__stop___tracepoints) = .; \ 82 VMLINUX_SYMBOL(__stop___tracepoints) = .; \
83 /* implement dynamic printk debug */ \
84 . = ALIGN(8); \
85 VMLINUX_SYMBOL(__start___verbose) = .; \
86 *(__verbose) \
87 VMLINUX_SYMBOL(__stop___verbose) = .; \
83 LIKELY_PROFILE() \ 88 LIKELY_PROFILE() \
84 BRANCH_PROFILE() 89 BRANCH_PROFILE()
85 90
@@ -309,15 +314,7 @@
309 CPU_DISCARD(init.data) \ 314 CPU_DISCARD(init.data) \
310 CPU_DISCARD(init.rodata) \ 315 CPU_DISCARD(init.rodata) \
311 MEM_DISCARD(init.data) \ 316 MEM_DISCARD(init.data) \
312 MEM_DISCARD(init.rodata) \ 317 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 318
322#define INIT_TEXT \ 319#define INIT_TEXT \
323 *(.init.text) \ 320 *(.init.text) \
@@ -430,12 +427,59 @@
430 *(.initcall7.init) \ 427 *(.initcall7.init) \
431 *(.initcall7s.init) 428 *(.initcall7s.init)
432 429
430/**
431 * PERCPU_VADDR - define output section for percpu area
432 * @vaddr: explicit base address (optional)
433 * @phdr: destination PHDR (optional)
434 *
435 * Macro which expands to output section for percpu area. If @vaddr
436 * is not blank, it specifies explicit base address and all percpu
437 * symbols will be offset from the given address. If blank, @vaddr
438 * always equals @laddr + LOAD_OFFSET.
439 *
440 * @phdr defines the output PHDR to use if not blank. Be warned that
441 * output PHDR is sticky. If @phdr is specified, the next output
442 * section in the linker script will go there too. @phdr should have
443 * a leading colon.
444 *
445 * Note that this macros defines __per_cpu_load as an absolute symbol.
446 * If there is no need to put the percpu section at a predetermined
447 * address, use PERCPU().
448 */
449#define PERCPU_VADDR(vaddr, phdr) \
450 VMLINUX_SYMBOL(__per_cpu_load) = .; \
451 .data.percpu vaddr : AT(VMLINUX_SYMBOL(__per_cpu_load) \
452 - LOAD_OFFSET) { \
453 VMLINUX_SYMBOL(__per_cpu_start) = .; \
454 *(.data.percpu.first) \
455 *(.data.percpu.page_aligned) \
456 *(.data.percpu) \
457 *(.data.percpu.shared_aligned) \
458 VMLINUX_SYMBOL(__per_cpu_end) = .; \
459 } phdr \
460 . = VMLINUX_SYMBOL(__per_cpu_load) + SIZEOF(.data.percpu);
461
462/**
463 * PERCPU - define output section for percpu area, simple version
464 * @align: required alignment
465 *
466 * Align to @align and outputs output section for percpu area. This
467 * macro doesn't maniuplate @vaddr or @phdr and __per_cpu_load and
468 * __per_cpu_start will be identical.
469 *
470 * This macro is equivalent to ALIGN(align); PERCPU_VADDR( , ) except
471 * that __per_cpu_load is defined as a relative symbol against
472 * .data.percpu which is required for relocatable x86_32
473 * configuration.
474 */
433#define PERCPU(align) \ 475#define PERCPU(align) \
434 . = ALIGN(align); \ 476 . = ALIGN(align); \
435 VMLINUX_SYMBOL(__per_cpu_start) = .; \ 477 .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) { \
436 .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) { \ 478 VMLINUX_SYMBOL(__per_cpu_load) = .; \
479 VMLINUX_SYMBOL(__per_cpu_start) = .; \
480 *(.data.percpu.first) \
437 *(.data.percpu.page_aligned) \ 481 *(.data.percpu.page_aligned) \
438 *(.data.percpu) \ 482 *(.data.percpu) \
439 *(.data.percpu.shared_aligned) \ 483 *(.data.percpu.shared_aligned) \
440 } \ 484 VMLINUX_SYMBOL(__per_cpu_end) = .; \
441 VMLINUX_SYMBOL(__per_cpu_end) = .; 485 }