diff options
Diffstat (limited to 'include/asm-generic/vmlinux.lds.h')
| -rw-r--r-- | include/asm-generic/vmlinux.lds.h | 43 |
1 files changed, 29 insertions, 14 deletions
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index fe77e3395b40..bd297a20ab98 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | * HEAD_TEXT_SECTION | 15 | * HEAD_TEXT_SECTION |
| 16 | * INIT_TEXT_SECTION(PAGE_SIZE) | 16 | * INIT_TEXT_SECTION(PAGE_SIZE) |
| 17 | * INIT_DATA_SECTION(...) | 17 | * INIT_DATA_SECTION(...) |
| 18 | * PERCPU(PAGE_SIZE) | 18 | * PERCPU(CACHELINE_SIZE, PAGE_SIZE) |
| 19 | * __init_end = .; | 19 | * __init_end = .; |
| 20 | * | 20 | * |
| 21 | * _stext = .; | 21 | * _stext = .; |
| @@ -424,6 +424,12 @@ | |||
| 424 | *(.kprobes.text) \ | 424 | *(.kprobes.text) \ |
| 425 | VMLINUX_SYMBOL(__kprobes_text_end) = .; | 425 | VMLINUX_SYMBOL(__kprobes_text_end) = .; |
| 426 | 426 | ||
| 427 | #define ENTRY_TEXT \ | ||
| 428 | ALIGN_FUNCTION(); \ | ||
| 429 | VMLINUX_SYMBOL(__entry_text_start) = .; \ | ||
| 430 | *(.entry.text) \ | ||
| 431 | VMLINUX_SYMBOL(__entry_text_end) = .; | ||
| 432 | |||
| 427 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | 433 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
| 428 | #define IRQENTRY_TEXT \ | 434 | #define IRQENTRY_TEXT \ |
| 429 | ALIGN_FUNCTION(); \ | 435 | ALIGN_FUNCTION(); \ |
| @@ -683,13 +689,18 @@ | |||
| 683 | 689 | ||
| 684 | /** | 690 | /** |
| 685 | * PERCPU_VADDR - define output section for percpu area | 691 | * PERCPU_VADDR - define output section for percpu area |
| 692 | * @cacheline: cacheline size | ||
| 686 | * @vaddr: explicit base address (optional) | 693 | * @vaddr: explicit base address (optional) |
| 687 | * @phdr: destination PHDR (optional) | 694 | * @phdr: destination PHDR (optional) |
| 688 | * | 695 | * |
| 689 | * Macro which expands to output section for percpu area. If @vaddr | 696 | * Macro which expands to output section for percpu area. |
| 690 | * is not blank, it specifies explicit base address and all percpu | 697 | * |
| 691 | * symbols will be offset from the given address. If blank, @vaddr | 698 | * @cacheline is used to align subsections to avoid false cacheline |
| 692 | * always equals @laddr + LOAD_OFFSET. | 699 | * sharing between subsections for different purposes. |
| 700 | * | ||
| 701 | * If @vaddr is not blank, it specifies explicit base address and all | ||
| 702 | * percpu symbols will be offset from the given address. If blank, | ||
| 703 | * @vaddr always equals @laddr + LOAD_OFFSET. | ||
| 693 | * | 704 | * |
| 694 | * @phdr defines the output PHDR to use if not blank. Be warned that | 705 | * @phdr defines the output PHDR to use if not blank. Be warned that |
| 695 | * output PHDR is sticky. If @phdr is specified, the next output | 706 | * output PHDR is sticky. If @phdr is specified, the next output |
| @@ -700,7 +711,7 @@ | |||
| 700 | * If there is no need to put the percpu section at a predetermined | 711 | * If there is no need to put the percpu section at a predetermined |
| 701 | * address, use PERCPU(). | 712 | * address, use PERCPU(). |
| 702 | */ | 713 | */ |
| 703 | #define PERCPU_VADDR(vaddr, phdr) \ | 714 | #define PERCPU_VADDR(cacheline, vaddr, phdr) \ |
| 704 | VMLINUX_SYMBOL(__per_cpu_load) = .; \ | 715 | VMLINUX_SYMBOL(__per_cpu_load) = .; \ |
| 705 | .data..percpu vaddr : AT(VMLINUX_SYMBOL(__per_cpu_load) \ | 716 | .data..percpu vaddr : AT(VMLINUX_SYMBOL(__per_cpu_load) \ |
| 706 | - LOAD_OFFSET) { \ | 717 | - LOAD_OFFSET) { \ |
| @@ -708,7 +719,9 @@ | |||
| 708 | *(.data..percpu..first) \ | 719 | *(.data..percpu..first) \ |
| 709 | . = ALIGN(PAGE_SIZE); \ | 720 | . = ALIGN(PAGE_SIZE); \ |
| 710 | *(.data..percpu..page_aligned) \ | 721 | *(.data..percpu..page_aligned) \ |
| 722 | . = ALIGN(cacheline); \ | ||
| 711 | *(.data..percpu..readmostly) \ | 723 | *(.data..percpu..readmostly) \ |
| 724 | . = ALIGN(cacheline); \ | ||
| 712 | *(.data..percpu) \ | 725 | *(.data..percpu) \ |
| 713 | *(.data..percpu..shared_aligned) \ | 726 | *(.data..percpu..shared_aligned) \ |
| 714 | VMLINUX_SYMBOL(__per_cpu_end) = .; \ | 727 | VMLINUX_SYMBOL(__per_cpu_end) = .; \ |
| @@ -717,18 +730,18 @@ | |||
| 717 | 730 | ||
| 718 | /** | 731 | /** |
| 719 | * PERCPU - define output section for percpu area, simple version | 732 | * PERCPU - define output section for percpu area, simple version |
| 733 | * @cacheline: cacheline size | ||
| 720 | * @align: required alignment | 734 | * @align: required alignment |
| 721 | * | 735 | * |
| 722 | * Align to @align and outputs output section for percpu area. This | 736 | * Align to @align and outputs output section for percpu area. This macro |
| 723 | * macro doesn't maniuplate @vaddr or @phdr and __per_cpu_load and | 737 | * doesn't manipulate @vaddr or @phdr and __per_cpu_load and |
| 724 | * __per_cpu_start will be identical. | 738 | * __per_cpu_start will be identical. |
| 725 | * | 739 | * |
| 726 | * This macro is equivalent to ALIGN(align); PERCPU_VADDR( , ) except | 740 | * This macro is equivalent to ALIGN(@align); PERCPU_VADDR(@cacheline,,) |
| 727 | * that __per_cpu_load is defined as a relative symbol against | 741 | * except that __per_cpu_load is defined as a relative symbol against |
| 728 | * .data..percpu which is required for relocatable x86_32 | 742 | * .data..percpu which is required for relocatable x86_32 configuration. |
| 729 | * configuration. | ||
| 730 | */ | 743 | */ |
| 731 | #define PERCPU(align) \ | 744 | #define PERCPU(cacheline, align) \ |
| 732 | . = ALIGN(align); \ | 745 | . = ALIGN(align); \ |
| 733 | .data..percpu : AT(ADDR(.data..percpu) - LOAD_OFFSET) { \ | 746 | .data..percpu : AT(ADDR(.data..percpu) - LOAD_OFFSET) { \ |
| 734 | VMLINUX_SYMBOL(__per_cpu_load) = .; \ | 747 | VMLINUX_SYMBOL(__per_cpu_load) = .; \ |
| @@ -736,7 +749,9 @@ | |||
| 736 | *(.data..percpu..first) \ | 749 | *(.data..percpu..first) \ |
| 737 | . = ALIGN(PAGE_SIZE); \ | 750 | . = ALIGN(PAGE_SIZE); \ |
| 738 | *(.data..percpu..page_aligned) \ | 751 | *(.data..percpu..page_aligned) \ |
| 752 | . = ALIGN(cacheline); \ | ||
| 739 | *(.data..percpu..readmostly) \ | 753 | *(.data..percpu..readmostly) \ |
| 754 | . = ALIGN(cacheline); \ | ||
| 740 | *(.data..percpu) \ | 755 | *(.data..percpu) \ |
| 741 | *(.data..percpu..shared_aligned) \ | 756 | *(.data..percpu..shared_aligned) \ |
| 742 | VMLINUX_SYMBOL(__per_cpu_end) = .; \ | 757 | VMLINUX_SYMBOL(__per_cpu_end) = .; \ |
| @@ -758,7 +773,7 @@ | |||
| 758 | * the sections that has this restriction (or similar) | 773 | * the sections that has this restriction (or similar) |
| 759 | * is located before the ones requiring PAGE_SIZE alignment. | 774 | * is located before the ones requiring PAGE_SIZE alignment. |
| 760 | * NOSAVE_DATA starts and ends with a PAGE_SIZE alignment which | 775 | * NOSAVE_DATA starts and ends with a PAGE_SIZE alignment which |
| 761 | * matches the requirment of PAGE_ALIGNED_DATA. | 776 | * matches the requirement of PAGE_ALIGNED_DATA. |
| 762 | * | 777 | * |
| 763 | * use 0 as page_align if page_aligned data is not used */ | 778 | * use 0 as page_align if page_aligned data is not used */ |
| 764 | #define RW_DATA_SECTION(cacheline, pagealigned, inittask) \ | 779 | #define RW_DATA_SECTION(cacheline, pagealigned, inittask) \ |
