Merge branch 'pcmcia-next' of git://git.kernel.org/pub/scm/linux/kernel/git/brodo...
[linux-block.git] / arch / arm / kernel / vmlinux.lds.h
CommitLineData
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);