Loading...
Note: File does not exist in v3.1.
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 VMLINUX_SYMBOL(__proc_info_begin) = .; \
31 *(.proc.info.init) \
32 VMLINUX_SYMBOL(__proc_info_end) = .;
33
34#define HYPERVISOR_TEXT \
35 VMLINUX_SYMBOL(__hyp_text_start) = .; \
36 *(.hyp.text) \
37 VMLINUX_SYMBOL(__hyp_text_end) = .;
38
39#define IDMAP_TEXT \
40 ALIGN_FUNCTION(); \
41 VMLINUX_SYMBOL(__idmap_text_start) = .; \
42 *(.idmap.text) \
43 VMLINUX_SYMBOL(__idmap_text_end) = .; \
44 . = ALIGN(PAGE_SIZE); \
45 VMLINUX_SYMBOL(__hyp_idmap_text_start) = .; \
46 *(.hyp.idmap.text) \
47 VMLINUX_SYMBOL(__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);