Merge branch 'ras-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[sfrench/cifs-2.6.git] / arch / arm / kernel / vmlinux.lds.h
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
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
28 #define PROC_INFO                                                       \
29                 . = ALIGN(4);                                           \
30                 __proc_info_begin = .;                                  \
31                 *(.proc.info.init)                                      \
32                 __proc_info_end = .;
33
34 #define HYPERVISOR_TEXT                                                 \
35                 __hyp_text_start = .;                                   \
36                 *(.hyp.text)                                            \
37                 __hyp_text_end = .;
38
39 #define IDMAP_TEXT                                                      \
40                 ALIGN_FUNCTION();                                       \
41                 __idmap_text_start = .;                                 \
42                 *(.idmap.text)                                          \
43                 __idmap_text_end = .;                                   \
44                 . = ALIGN(PAGE_SIZE);                                   \
45                 __hyp_idmap_text_start = .;                             \
46                 *(.hyp.idmap.text)                                      \
47                 __hyp_idmap_text_end = .;
48
49 #define ARM_DISCARD                                                     \
50                 *(.ARM.exidx.exit.text)                                 \
51                 *(.ARM.extab.exit.text)                                 \
52                 ARM_CPU_DISCARD(*(.ARM.exidx.cpuexit.text))             \
53                 ARM_CPU_DISCARD(*(.ARM.extab.cpuexit.text))             \
54                 ARM_EXIT_DISCARD(EXIT_TEXT)                             \
55                 ARM_EXIT_DISCARD(EXIT_DATA)                             \
56                 EXIT_CALL                                               \
57                 ARM_MMU_DISCARD(*(.text.fixup))                         \
58                 ARM_MMU_DISCARD(*(__ex_table))                          \
59                 *(.discard)                                             \
60                 *(.discard.*)
61
62 #define ARM_TEXT                                                        \
63                 IDMAP_TEXT                                              \
64                 __entry_text_start = .;                                 \
65                 *(.entry.text)                                          \
66                 __entry_text_end = .;                                   \
67                 IRQENTRY_TEXT                                           \
68                 SOFTIRQENTRY_TEXT                                       \
69                 TEXT_TEXT                                               \
70                 SCHED_TEXT                                              \
71                 CPUIDLE_TEXT                                            \
72                 LOCK_TEXT                                               \
73                 HYPERVISOR_TEXT                                         \
74                 KPROBES_TEXT                                            \
75                 *(.gnu.warning)                                         \
76                 *(.glue_7)                                              \
77                 *(.glue_7t)                                             \
78                 . = ALIGN(4);                                           \
79                 *(.got)                 /* Global offset table */       \
80                 ARM_CPU_KEEP(PROC_INFO)
81
82 /* Stack unwinding tables */
83 #define ARM_UNWIND_SECTIONS                                             \
84         . = ALIGN(8);                                                   \
85         .ARM.unwind_idx : {                                             \
86                 __start_unwind_idx = .;                                 \
87                 *(.ARM.exidx*)                                          \
88                 __stop_unwind_idx = .;                                  \
89         }                                                               \
90         .ARM.unwind_tab : {                                             \
91                 __start_unwind_tab = .;                                 \
92                 *(.ARM.extab*)                                          \
93                 __stop_unwind_tab = .;                                  \
94         }
95
96 /*
97  * The vectors and stubs are relocatable code, and the
98  * only thing that matters is their relative offsets
99  */
100 #define ARM_VECTORS                                                     \
101         __vectors_start = .;                                            \
102         .vectors 0xffff0000 : AT(__vectors_start) {                     \
103                 *(.vectors)                                             \
104         }                                                               \
105         . = __vectors_start + SIZEOF(.vectors);                         \
106         __vectors_end = .;                                              \
107                                                                         \
108         __stubs_start = .;                                              \
109         .stubs ADDR(.vectors) + 0x1000 : AT(__stubs_start) {            \
110                 *(.stubs)                                               \
111         }                                                               \
112         . = __stubs_start + SIZEOF(.stubs);                             \
113         __stubs_end = .;                                                \
114                                                                         \
115         PROVIDE(vector_fiq_offset = vector_fiq - ADDR(.vectors));
116
117 #define ARM_TCM                                                         \
118         __itcm_start = ALIGN(4);                                        \
119         .text_itcm ITCM_OFFSET : AT(__itcm_start - LOAD_OFFSET) {       \
120                 __sitcm_text = .;                                       \
121                 *(.tcm.text)                                            \
122                 *(.tcm.rodata)                                          \
123                 . = ALIGN(4);                                           \
124                 __eitcm_text = .;                                       \
125         }                                                               \
126         . = __itcm_start + SIZEOF(.text_itcm);                          \
127                                                                         \
128         __dtcm_start = .;                                               \
129         .data_dtcm DTCM_OFFSET : AT(__dtcm_start - LOAD_OFFSET) {       \
130                 __sdtcm_data = .;                                       \
131                 *(.tcm.data)                                            \
132                 . = ALIGN(4);                                           \
133                 __edtcm_data = .;                                       \
134         }                                                               \
135         . = __dtcm_start + SIZEOF(.data_dtcm);