Commit | Line | Data |
---|---|---|
2f181e0b NP |
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | ||
3 | #ifdef CONFIG_HOTPLUG_CPU | |
4 | #define ARM_CPU_DISCARD(x) | |
5 | #define ARM_CPU_KEEP(x) x | |
6 | #else | |
7 | #define ARM_CPU_DISCARD(x) x | |
8 | #define ARM_CPU_KEEP(x) | |
9 | #endif | |
10 | ||
11 | #if (defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK)) || \ | |
12 | defined(CONFIG_GENERIC_BUG) || defined(CONFIG_JUMP_LABEL) | |
13 | #define ARM_EXIT_KEEP(x) x | |
14 | #define ARM_EXIT_DISCARD(x) | |
15 | #else | |
16 | #define ARM_EXIT_KEEP(x) | |
17 | #define ARM_EXIT_DISCARD(x) x | |
18 | #endif | |
19 | ||
ab42fad0 NP |
20 | #ifdef CONFIG_MMU |
21 | #define ARM_MMU_KEEP(x) x | |
22 | #define ARM_MMU_DISCARD(x) | |
23 | #else | |
24 | #define ARM_MMU_KEEP(x) | |
25 | #define ARM_MMU_DISCARD(x) x | |
26 | #endif | |
27 | ||
2f181e0b NP |
28 | #define PROC_INFO \ |
29 | . = ALIGN(4); \ | |
83d41fb9 | 30 | __proc_info_begin = .; \ |
2f181e0b | 31 | *(.proc.info.init) \ |
83d41fb9 | 32 | __proc_info_end = .; |
2f181e0b NP |
33 | |
34 | #define HYPERVISOR_TEXT \ | |
83d41fb9 | 35 | __hyp_text_start = .; \ |
2f181e0b | 36 | *(.hyp.text) \ |
83d41fb9 | 37 | __hyp_text_end = .; |
2f181e0b NP |
38 | |
39 | #define IDMAP_TEXT \ | |
40 | ALIGN_FUNCTION(); \ | |
83d41fb9 | 41 | __idmap_text_start = .; \ |
2f181e0b | 42 | *(.idmap.text) \ |
83d41fb9 | 43 | __idmap_text_end = .; \ |
2f181e0b | 44 | . = ALIGN(PAGE_SIZE); \ |
83d41fb9 | 45 | __hyp_idmap_text_start = .; \ |
2f181e0b | 46 | *(.hyp.idmap.text) \ |
83d41fb9 | 47 | __hyp_idmap_text_end = .; |
2f181e0b | 48 | |
ab42fad0 NP |
49 | #define ARM_DISCARD \ |
50 | *(.ARM.exidx.exit.text) \ | |
51 | *(.ARM.extab.exit.text) \ | |
8dcf86ca PO |
52 | *(.ARM.exidx.text.exit) \ |
53 | *(.ARM.extab.text.exit) \ | |
ab42fad0 NP |
54 | ARM_CPU_DISCARD(*(.ARM.exidx.cpuexit.text)) \ |
55 | ARM_CPU_DISCARD(*(.ARM.extab.cpuexit.text)) \ | |
56 | ARM_EXIT_DISCARD(EXIT_TEXT) \ | |
57 | ARM_EXIT_DISCARD(EXIT_DATA) \ | |
58 | EXIT_CALL \ | |
59 | ARM_MMU_DISCARD(*(.text.fixup)) \ | |
60 | ARM_MMU_DISCARD(*(__ex_table)) \ | |
61 | *(.discard) \ | |
62 | *(.discard.*) | |
47b4c77d NP |
63 | |
64 | #define ARM_TEXT \ | |
65 | IDMAP_TEXT \ | |
66 | __entry_text_start = .; \ | |
67 | *(.entry.text) \ | |
68 | __entry_text_end = .; \ | |
69 | IRQENTRY_TEXT \ | |
70 | SOFTIRQENTRY_TEXT \ | |
71 | TEXT_TEXT \ | |
72 | SCHED_TEXT \ | |
73 | CPUIDLE_TEXT \ | |
74 | LOCK_TEXT \ | |
75 | HYPERVISOR_TEXT \ | |
76 | KPROBES_TEXT \ | |
77 | *(.gnu.warning) \ | |
78 | *(.glue_7) \ | |
79 | *(.glue_7t) \ | |
80 | . = ALIGN(4); \ | |
81 | *(.got) /* Global offset table */ \ | |
82 | ARM_CPU_KEEP(PROC_INFO) | |
d9a46e6e NP |
83 | |
84 | /* Stack unwinding tables */ | |
85 | #define ARM_UNWIND_SECTIONS \ | |
86 | . = ALIGN(8); \ | |
87 | .ARM.unwind_idx : { \ | |
88 | __start_unwind_idx = .; \ | |
89 | *(.ARM.exidx*) \ | |
90 | __stop_unwind_idx = .; \ | |
91 | } \ | |
92 | .ARM.unwind_tab : { \ | |
93 | __start_unwind_tab = .; \ | |
94 | *(.ARM.extab*) \ | |
95 | __stop_unwind_tab = .; \ | |
96 | } | |
91470958 NP |
97 | |
98 | /* | |
99 | * The vectors and stubs are relocatable code, and the | |
100 | * only thing that matters is their relative offsets | |
101 | */ | |
102 | #define ARM_VECTORS \ | |
103 | __vectors_start = .; \ | |
104 | .vectors 0xffff0000 : AT(__vectors_start) { \ | |
105 | *(.vectors) \ | |
106 | } \ | |
107 | . = __vectors_start + SIZEOF(.vectors); \ | |
108 | __vectors_end = .; \ | |
109 | \ | |
110 | __stubs_start = .; \ | |
111 | .stubs ADDR(.vectors) + 0x1000 : AT(__stubs_start) { \ | |
112 | *(.stubs) \ | |
113 | } \ | |
114 | . = __stubs_start + SIZEOF(.stubs); \ | |
115 | __stubs_end = .; \ | |
116 | \ | |
117 | PROVIDE(vector_fiq_offset = vector_fiq - ADDR(.vectors)); | |
c3146c43 NP |
118 | |
119 | #define ARM_TCM \ | |
b54290e5 NP |
120 | __itcm_start = ALIGN(4); \ |
121 | .text_itcm ITCM_OFFSET : AT(__itcm_start - LOAD_OFFSET) { \ | |
c3146c43 NP |
122 | __sitcm_text = .; \ |
123 | *(.tcm.text) \ | |
124 | *(.tcm.rodata) \ | |
125 | . = ALIGN(4); \ | |
126 | __eitcm_text = .; \ | |
127 | } \ | |
b54290e5 | 128 | . = __itcm_start + SIZEOF(.text_itcm); \ |
c3146c43 | 129 | \ |
b54290e5 NP |
130 | __dtcm_start = .; \ |
131 | .data_dtcm DTCM_OFFSET : AT(__dtcm_start - LOAD_OFFSET) { \ | |
c3146c43 NP |
132 | __sdtcm_data = .; \ |
133 | *(.tcm.data) \ | |
134 | . = ALIGN(4); \ | |
135 | __edtcm_data = .; \ | |
136 | } \ | |
b54290e5 | 137 | . = __dtcm_start + SIZEOF(.data_dtcm); |