Merge tag 'media/v5.15-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
[linux-2.6-microblaze.git] / arch / arm / include / asm / vmlinux.lds.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #include <asm-generic/vmlinux.lds.h>
3
4 #ifdef CONFIG_HOTPLUG_CPU
5 #define ARM_CPU_DISCARD(x)
6 #define ARM_CPU_KEEP(x)         x
7 #else
8 #define ARM_CPU_DISCARD(x)      x
9 #define ARM_CPU_KEEP(x)
10 #endif
11
12 #if (defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK)) || \
13         defined(CONFIG_GENERIC_BUG) || defined(CONFIG_JUMP_LABEL)
14 #define ARM_EXIT_KEEP(x)        x
15 #define ARM_EXIT_DISCARD(x)
16 #else
17 #define ARM_EXIT_KEEP(x)
18 #define ARM_EXIT_DISCARD(x)     x
19 #endif
20
21 #ifdef CONFIG_MMU
22 #define ARM_MMU_KEEP(x)         x
23 #define ARM_MMU_DISCARD(x)
24 #else
25 #define ARM_MMU_KEEP(x)
26 #define ARM_MMU_DISCARD(x)      x
27 #endif
28
29 #define PROC_INFO                                                       \
30                 . = ALIGN(4);                                           \
31                 __proc_info_begin = .;                                  \
32                 *(.proc.info.init)                                      \
33                 __proc_info_end = .;
34
35 #define IDMAP_TEXT                                                      \
36                 ALIGN_FUNCTION();                                       \
37                 __idmap_text_start = .;                                 \
38                 *(.idmap.text)                                          \
39                 __idmap_text_end = .;                                   \
40
41 #define ARM_DISCARD                                                     \
42                 *(.ARM.exidx.exit.text)                                 \
43                 *(.ARM.extab.exit.text)                                 \
44                 *(.ARM.exidx.text.exit)                                 \
45                 *(.ARM.extab.text.exit)                                 \
46                 ARM_CPU_DISCARD(*(.ARM.exidx.cpuexit.text))             \
47                 ARM_CPU_DISCARD(*(.ARM.extab.cpuexit.text))             \
48                 ARM_EXIT_DISCARD(EXIT_TEXT)                             \
49                 ARM_EXIT_DISCARD(EXIT_DATA)                             \
50                 EXIT_CALL                                               \
51                 ARM_MMU_DISCARD(*(.text.fixup))                         \
52                 ARM_MMU_DISCARD(*(__ex_table))                          \
53                 COMMON_DISCARDS
54
55 /*
56  * Sections that should stay zero sized, which is safer to explicitly
57  * check instead of blindly discarding.
58  */
59 #define ARM_ASSERTS                                                     \
60         .plt : {                                                        \
61                 *(.iplt) *(.rel.iplt) *(.iplt) *(.igot.plt)             \
62         }                                                               \
63         ASSERT(SIZEOF(.plt) == 0,                                       \
64                "Unexpected run-time procedure linkages detected!")
65
66 #define ARM_DETAILS                                                     \
67                 ELF_DETAILS                                             \
68                 .ARM.attributes 0 : { *(.ARM.attributes) }
69
70 #define ARM_STUBS_TEXT                                                  \
71                 *(.gnu.warning)                                         \
72                 *(.glue_7)                                              \
73                 *(.glue_7t)                                             \
74                 *(.vfp11_veneer)                                        \
75                 *(.v4_bx)
76
77 #define ARM_TEXT                                                        \
78                 IDMAP_TEXT                                              \
79                 __entry_text_start = .;                                 \
80                 *(.entry.text)                                          \
81                 __entry_text_end = .;                                   \
82                 IRQENTRY_TEXT                                           \
83                 SOFTIRQENTRY_TEXT                                       \
84                 TEXT_TEXT                                               \
85                 SCHED_TEXT                                              \
86                 CPUIDLE_TEXT                                            \
87                 LOCK_TEXT                                               \
88                 KPROBES_TEXT                                            \
89                 ARM_STUBS_TEXT                                          \
90                 . = ALIGN(4);                                           \
91                 *(.got)                 /* Global offset table */       \
92                 ARM_CPU_KEEP(PROC_INFO)
93
94 /* Stack unwinding tables */
95 #define ARM_UNWIND_SECTIONS                                             \
96         . = ALIGN(8);                                                   \
97         .ARM.unwind_idx : {                                             \
98                 __start_unwind_idx = .;                                 \
99                 *(.ARM.exidx*)                                          \
100                 __stop_unwind_idx = .;                                  \
101         }                                                               \
102         .ARM.unwind_tab : {                                             \
103                 __start_unwind_tab = .;                                 \
104                 *(.ARM.extab*)                                          \
105                 __stop_unwind_tab = .;                                  \
106         }
107
108 /*
109  * The vectors and stubs are relocatable code, and the
110  * only thing that matters is their relative offsets
111  */
112 #define ARM_VECTORS                                                     \
113         __vectors_start = .;                                            \
114         .vectors 0xffff0000 : AT(__vectors_start) {                     \
115                 *(.vectors)                                             \
116         }                                                               \
117         . = __vectors_start + SIZEOF(.vectors);                         \
118         __vectors_end = .;                                              \
119                                                                         \
120         __stubs_start = .;                                              \
121         .stubs ADDR(.vectors) + 0x1000 : AT(__stubs_start) {            \
122                 *(.stubs)                                               \
123         }                                                               \
124         . = __stubs_start + SIZEOF(.stubs);                             \
125         __stubs_end = .;                                                \
126                                                                         \
127         PROVIDE(vector_fiq_offset = vector_fiq - ADDR(.vectors));
128
129 #define ARM_TCM                                                         \
130         __itcm_start = ALIGN(4);                                        \
131         .text_itcm ITCM_OFFSET : AT(__itcm_start - LOAD_OFFSET) {       \
132                 __sitcm_text = .;                                       \
133                 *(.tcm.text)                                            \
134                 *(.tcm.rodata)                                          \
135                 . = ALIGN(4);                                           \
136                 __eitcm_text = .;                                       \
137         }                                                               \
138         . = __itcm_start + SIZEOF(.text_itcm);                          \
139                                                                         \
140         __dtcm_start = .;                                               \
141         .data_dtcm DTCM_OFFSET : AT(__dtcm_start - LOAD_OFFSET) {       \
142                 __sdtcm_data = .;                                       \
143                 *(.tcm.data)                                            \
144                 . = ALIGN(4);                                           \
145                 __edtcm_data = .;                                       \
146         }                                                               \
147         . = __dtcm_start + SIZEOF(.data_dtcm);