diff options
Diffstat (limited to 'include/asm-generic/vmlinux.lds.h')
| -rw-r--r-- | include/asm-generic/vmlinux.lds.h | 106 |
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 | } |
