1 /* SPDX-License-Identifier: GPL-2.0-only */
3 * Linker script variables to be set after section resolution, as
4 * ld.lld does not like variables assigned before SECTIONS is processed.
6 #ifndef __ARM64_KERNEL_IMAGE_VARS_H
7 #define __ARM64_KERNEL_IMAGE_VARS_H
10 #error This file should only be included in vmlinux.lds.S
13 PROVIDE(__efistub_primary_entry
= primary_entry
);
16 * The EFI stub has its own symbol namespace prefixed by __efistub_, to
17 * isolate it from the kernel proper. The following symbols are legally
18 * accessed by the stub, so provide some aliases to make them accessible.
19 * Only include data symbols here, or text symbols of functions that are
20 * guaranteed to be safe when executed at another offset than they were
21 * linked at. The routines below are all implemented in assembler in a
22 * position independent manner
24 PROVIDE(__efistub_caches_clean_inval_pou
= __pi_caches_clean_inval_pou
);
26 PROVIDE(__efistub__text
= _text
);
27 PROVIDE(__efistub__end
= _end
);
28 PROVIDE(__efistub___inittext_end
= __inittext_end
);
29 PROVIDE(__efistub__edata
= _edata
);
30 #if defined(CONFIG_EFI_EARLYCON) || defined(CONFIG_SYSFB)
31 PROVIDE(__efistub_screen_info
= screen_info
);
33 PROVIDE(__efistub__ctype
= _ctype
);
35 PROVIDE(__pi___memcpy
= __pi_memcpy
);
36 PROVIDE(__pi___memmove
= __pi_memmove
);
37 PROVIDE(__pi___memset
= __pi_memset
);
39 PROVIDE(__pi_id_aa64isar1_override
= id_aa64isar1_override
);
40 PROVIDE(__pi_id_aa64isar2_override
= id_aa64isar2_override
);
41 PROVIDE(__pi_id_aa64mmfr0_override
= id_aa64mmfr0_override
);
42 PROVIDE(__pi_id_aa64mmfr1_override
= id_aa64mmfr1_override
);
43 PROVIDE(__pi_id_aa64mmfr2_override
= id_aa64mmfr2_override
);
44 PROVIDE(__pi_id_aa64pfr0_override
= id_aa64pfr0_override
);
45 PROVIDE(__pi_id_aa64pfr1_override
= id_aa64pfr1_override
);
46 PROVIDE(__pi_id_aa64smfr0_override
= id_aa64smfr0_override
);
47 PROVIDE(__pi_id_aa64zfr0_override
= id_aa64zfr0_override
);
48 PROVIDE(__pi_arm64_sw_feature_override
= arm64_sw_feature_override
);
49 PROVIDE(__pi_arm64_use_ng_mappings
= arm64_use_ng_mappings
);
50 #ifdef CONFIG_CAVIUM_ERRATUM_27456
51 PROVIDE(__pi_cavium_erratum_27456_cpus
= cavium_erratum_27456_cpus
);
53 PROVIDE(__pi__ctype
= _ctype
);
54 PROVIDE(__pi_memstart_offset_seed
= memstart_offset_seed
);
56 PROVIDE(__pi_init_idmap_pg_dir
= init_idmap_pg_dir
);
57 PROVIDE(__pi_init_idmap_pg_end
= init_idmap_pg_end
);
58 PROVIDE(__pi_init_pg_dir
= init_pg_dir
);
59 PROVIDE(__pi_init_pg_end
= init_pg_end
);
60 PROVIDE(__pi_swapper_pg_dir
= swapper_pg_dir
);
62 PROVIDE(__pi__text
= _text
);
63 PROVIDE(__pi__stext
= _stext
);
64 PROVIDE(__pi__etext
= _etext
);
65 PROVIDE(__pi___start_rodata
= __start_rodata
);
66 PROVIDE(__pi___inittext_begin
= __inittext_begin
);
67 PROVIDE(__pi___inittext_end
= __inittext_end
);
68 PROVIDE(__pi___initdata_begin
= __initdata_begin
);
69 PROVIDE(__pi___initdata_end
= __initdata_end
);
70 PROVIDE(__pi__data
= _data
);
71 PROVIDE(__pi___bss_start
= __bss_start
);
72 PROVIDE(__pi__end
= _end
);
77 * KVM nVHE code has its own symbol namespace prefixed with __kvm_nvhe_, to
78 * separate it from the kernel proper. The following symbols are legally
79 * accessed by it, therefore provide aliases to make them linkable.
80 * Do not include symbols which may not be safely accessed under hypervisor
84 /* Alternative callbacks for init-time patching of nVHE hyp code. */
85 KVM_NVHE_ALIAS(kvm_patch_vector_branch
);
86 KVM_NVHE_ALIAS(kvm_update_va_mask
);
87 KVM_NVHE_ALIAS(kvm_get_kimage_voffset
);
88 KVM_NVHE_ALIAS(kvm_compute_final_ctr_el0
);
89 KVM_NVHE_ALIAS(spectre_bhb_patch_loop_iter
);
90 KVM_NVHE_ALIAS(spectre_bhb_patch_loop_mitigation_enable
);
91 KVM_NVHE_ALIAS(spectre_bhb_patch_wa3
);
92 KVM_NVHE_ALIAS(spectre_bhb_patch_clearbhb
);
93 KVM_NVHE_ALIAS(alt_cb_patch_nops
);
95 /* Global kernel state accessed by nVHE hyp code. */
96 KVM_NVHE_ALIAS(kvm_vgic_global_state
);
98 /* Kernel symbols used to call panic() from nVHE hyp code (via ERET). */
99 KVM_NVHE_ALIAS(nvhe_hyp_panic_handler
);
101 /* Vectors installed by hyp-init on reset HVC. */
102 KVM_NVHE_ALIAS(__hyp_stub_vectors
);
104 /* Static keys which are set if a vGIC trap should be handled in hyp. */
105 KVM_NVHE_ALIAS(vgic_v2_cpuif_trap
);
106 KVM_NVHE_ALIAS(vgic_v3_cpuif_trap
);
108 /* EL2 exception handling */
109 KVM_NVHE_ALIAS(__start___kvm_ex_table
);
110 KVM_NVHE_ALIAS(__stop___kvm_ex_table
);
112 /* PMU available static key */
113 #ifdef CONFIG_HW_PERF_EVENTS
114 KVM_NVHE_ALIAS(kvm_arm_pmu_available
);
117 /* Position-independent library routines */
118 KVM_NVHE_ALIAS_HYP(clear_page
, __pi_clear_page
);
119 KVM_NVHE_ALIAS_HYP(copy_page
, __pi_copy_page
);
120 KVM_NVHE_ALIAS_HYP(memcpy
, __pi_memcpy
);
121 KVM_NVHE_ALIAS_HYP(memset
, __pi_memset
);
124 KVM_NVHE_ALIAS_HYP(__memcpy
, __pi_memcpy
);
125 KVM_NVHE_ALIAS_HYP(__memset
, __pi_memset
);
128 /* Hyp memory sections */
129 KVM_NVHE_ALIAS(__hyp_idmap_text_start
);
130 KVM_NVHE_ALIAS(__hyp_idmap_text_end
);
131 KVM_NVHE_ALIAS(__hyp_text_start
);
132 KVM_NVHE_ALIAS(__hyp_text_end
);
133 KVM_NVHE_ALIAS(__hyp_bss_start
);
134 KVM_NVHE_ALIAS(__hyp_bss_end
);
135 KVM_NVHE_ALIAS(__hyp_rodata_start
);
136 KVM_NVHE_ALIAS(__hyp_rodata_end
);
138 /* pKVM static key */
139 KVM_NVHE_ALIAS(kvm_protected_mode_initialized
);
141 #endif /* CONFIG_KVM */
143 #ifdef CONFIG_EFI_ZBOOT
144 _kernel_codesize
= ABSOLUTE(__inittext_end
- _text
);
147 #endif /* __ARM64_KERNEL_IMAGE_VARS_H */