1 // SPDX-License-Identifier: GPL-2.0-only
3 * Based on arch/arm/kernel/asm-offsets.c
5 * Copyright (C) 1995-2003 Russell King
6 * 2001-2002 Keith Owens
7 * Copyright (C) 2012 ARM Ltd.
10 #include <linux/arm_sdei.h>
11 #include <linux/sched.h>
12 #include <linux/ftrace.h>
13 #include <linux/kexec.h>
15 #include <linux/kvm_host.h>
16 #include <linux/suspend.h>
17 #include <asm/cpufeature.h>
18 #include <asm/fixmap.h>
19 #include <asm/thread_info.h>
20 #include <asm/memory.h>
21 #include <asm/smp_plat.h>
22 #include <asm/suspend.h>
23 #include <linux/kbuild.h>
24 #include <linux/arm-smccc.h>
28 DEFINE(TSK_TI_CPU
, offsetof(struct task_struct
, thread_info
.cpu
));
29 DEFINE(TSK_TI_FLAGS
, offsetof(struct task_struct
, thread_info
.flags
));
30 DEFINE(TSK_TI_PREEMPT
, offsetof(struct task_struct
, thread_info
.preempt_count
));
31 #ifdef CONFIG_ARM64_SW_TTBR0_PAN
32 DEFINE(TSK_TI_TTBR0
, offsetof(struct task_struct
, thread_info
.ttbr0
));
34 #ifdef CONFIG_SHADOW_CALL_STACK
35 DEFINE(TSK_TI_SCS_BASE
, offsetof(struct task_struct
, thread_info
.scs_base
));
36 DEFINE(TSK_TI_SCS_SP
, offsetof(struct task_struct
, thread_info
.scs_sp
));
38 DEFINE(TSK_STACK
, offsetof(struct task_struct
, stack
));
39 #ifdef CONFIG_STACKPROTECTOR
40 DEFINE(TSK_STACK_CANARY
, offsetof(struct task_struct
, stack_canary
));
43 DEFINE(THREAD_CPU_CONTEXT
, offsetof(struct task_struct
, thread
.cpu_context
));
44 DEFINE(THREAD_SCTLR_USER
, offsetof(struct task_struct
, thread
.sctlr_user
));
45 #ifdef CONFIG_ARM64_PTR_AUTH
46 DEFINE(THREAD_KEYS_USER
, offsetof(struct task_struct
, thread
.keys_user
));
48 #ifdef CONFIG_ARM64_PTR_AUTH_KERNEL
49 DEFINE(THREAD_KEYS_KERNEL
, offsetof(struct task_struct
, thread
.keys_kernel
));
51 #ifdef CONFIG_ARM64_MTE
52 DEFINE(THREAD_MTE_CTRL
, offsetof(struct task_struct
, thread
.mte_ctrl
));
55 DEFINE(S_X0
, offsetof(struct pt_regs
, regs
[0]));
56 DEFINE(S_X2
, offsetof(struct pt_regs
, regs
[2]));
57 DEFINE(S_X4
, offsetof(struct pt_regs
, regs
[4]));
58 DEFINE(S_X6
, offsetof(struct pt_regs
, regs
[6]));
59 DEFINE(S_X8
, offsetof(struct pt_regs
, regs
[8]));
60 DEFINE(S_X10
, offsetof(struct pt_regs
, regs
[10]));
61 DEFINE(S_X12
, offsetof(struct pt_regs
, regs
[12]));
62 DEFINE(S_X14
, offsetof(struct pt_regs
, regs
[14]));
63 DEFINE(S_X16
, offsetof(struct pt_regs
, regs
[16]));
64 DEFINE(S_X18
, offsetof(struct pt_regs
, regs
[18]));
65 DEFINE(S_X20
, offsetof(struct pt_regs
, regs
[20]));
66 DEFINE(S_X22
, offsetof(struct pt_regs
, regs
[22]));
67 DEFINE(S_X24
, offsetof(struct pt_regs
, regs
[24]));
68 DEFINE(S_X26
, offsetof(struct pt_regs
, regs
[26]));
69 DEFINE(S_X28
, offsetof(struct pt_regs
, regs
[28]));
70 DEFINE(S_FP
, offsetof(struct pt_regs
, regs
[29]));
71 DEFINE(S_LR
, offsetof(struct pt_regs
, regs
[30]));
72 DEFINE(S_SP
, offsetof(struct pt_regs
, sp
));
73 DEFINE(S_PC
, offsetof(struct pt_regs
, pc
));
74 DEFINE(S_PSTATE
, offsetof(struct pt_regs
, pstate
));
75 DEFINE(S_SYSCALLNO
, offsetof(struct pt_regs
, syscallno
));
76 DEFINE(S_SDEI_TTBR1
, offsetof(struct pt_regs
, sdei_ttbr1
));
77 DEFINE(S_PMR
, offsetof(struct pt_regs
, pmr
));
78 DEFINE(S_STACKFRAME
, offsetof(struct pt_regs
, stackframe
));
79 DEFINE(S_STACKFRAME_TYPE
, offsetof(struct pt_regs
, stackframe
.type
));
80 DEFINE(PT_REGS_SIZE
, sizeof(struct pt_regs
));
82 #ifdef CONFIG_DYNAMIC_FTRACE_WITH_ARGS
83 DEFINE(FREGS_X0
, offsetof(struct __arch_ftrace_regs
, regs
[0]));
84 DEFINE(FREGS_X2
, offsetof(struct __arch_ftrace_regs
, regs
[2]));
85 DEFINE(FREGS_X4
, offsetof(struct __arch_ftrace_regs
, regs
[4]));
86 DEFINE(FREGS_X6
, offsetof(struct __arch_ftrace_regs
, regs
[6]));
87 DEFINE(FREGS_X8
, offsetof(struct __arch_ftrace_regs
, regs
[8]));
88 DEFINE(FREGS_FP
, offsetof(struct __arch_ftrace_regs
, fp
));
89 DEFINE(FREGS_LR
, offsetof(struct __arch_ftrace_regs
, lr
));
90 DEFINE(FREGS_SP
, offsetof(struct __arch_ftrace_regs
, sp
));
91 DEFINE(FREGS_PC
, offsetof(struct __arch_ftrace_regs
, pc
));
92 #ifdef CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS
93 DEFINE(FREGS_DIRECT_TRAMP
, offsetof(struct __arch_ftrace_regs
, direct_tramp
));
95 DEFINE(FREGS_SIZE
, sizeof(struct __arch_ftrace_regs
));
98 DEFINE(CPU_BOOT_TASK
, offsetof(struct secondary_data
, task
));
100 DEFINE(FTR_OVR_VAL_OFFSET
, offsetof(struct arm64_ftr_override
, val
));
101 DEFINE(FTR_OVR_MASK_OFFSET
, offsetof(struct arm64_ftr_override
, mask
));
104 DEFINE(VCPU_CONTEXT
, offsetof(struct kvm_vcpu
, arch
.ctxt
));
105 DEFINE(VCPU_FAULT_DISR
, offsetof(struct kvm_vcpu
, arch
.fault
.disr_el1
));
106 DEFINE(VCPU_HCR_EL2
, offsetof(struct kvm_vcpu
, arch
.hcr_el2
));
107 DEFINE(CPU_USER_PT_REGS
, offsetof(struct kvm_cpu_context
, regs
));
108 DEFINE(CPU_ELR_EL2
, offsetof(struct kvm_cpu_context
, sys_regs
[ELR_EL2
]));
109 DEFINE(CPU_RGSR_EL1
, offsetof(struct kvm_cpu_context
, sys_regs
[RGSR_EL1
]));
110 DEFINE(CPU_GCR_EL1
, offsetof(struct kvm_cpu_context
, sys_regs
[GCR_EL1
]));
111 DEFINE(CPU_APIAKEYLO_EL1
, offsetof(struct kvm_cpu_context
, sys_regs
[APIAKEYLO_EL1
]));
112 DEFINE(CPU_APIBKEYLO_EL1
, offsetof(struct kvm_cpu_context
, sys_regs
[APIBKEYLO_EL1
]));
113 DEFINE(CPU_APDAKEYLO_EL1
, offsetof(struct kvm_cpu_context
, sys_regs
[APDAKEYLO_EL1
]));
114 DEFINE(CPU_APDBKEYLO_EL1
, offsetof(struct kvm_cpu_context
, sys_regs
[APDBKEYLO_EL1
]));
115 DEFINE(CPU_APGAKEYLO_EL1
, offsetof(struct kvm_cpu_context
, sys_regs
[APGAKEYLO_EL1
]));
116 DEFINE(HOST_CONTEXT_VCPU
, offsetof(struct kvm_cpu_context
, __hyp_running_vcpu
));
117 DEFINE(HOST_DATA_CONTEXT
, offsetof(struct kvm_host_data
, host_ctxt
));
118 DEFINE(NVHE_INIT_MAIR_EL2
, offsetof(struct kvm_nvhe_init_params
, mair_el2
));
119 DEFINE(NVHE_INIT_TCR_EL2
, offsetof(struct kvm_nvhe_init_params
, tcr_el2
));
120 DEFINE(NVHE_INIT_TPIDR_EL2
, offsetof(struct kvm_nvhe_init_params
, tpidr_el2
));
121 DEFINE(NVHE_INIT_STACK_HYP_VA
, offsetof(struct kvm_nvhe_init_params
, stack_hyp_va
));
122 DEFINE(NVHE_INIT_PGD_PA
, offsetof(struct kvm_nvhe_init_params
, pgd_pa
));
123 DEFINE(NVHE_INIT_HCR_EL2
, offsetof(struct kvm_nvhe_init_params
, hcr_el2
));
124 DEFINE(NVHE_INIT_VTTBR
, offsetof(struct kvm_nvhe_init_params
, vttbr
));
125 DEFINE(NVHE_INIT_VTCR
, offsetof(struct kvm_nvhe_init_params
, vtcr
));
126 DEFINE(NVHE_INIT_TMP
, offsetof(struct kvm_nvhe_init_params
, tmp
));
129 DEFINE(CPU_CTX_SP
, offsetof(struct cpu_suspend_ctx
, sp
));
130 DEFINE(MPIDR_HASH_MASK
, offsetof(struct mpidr_hash
, mask
));
131 DEFINE(MPIDR_HASH_SHIFTS
, offsetof(struct mpidr_hash
, shift_aff
));
132 DEFINE(SLEEP_STACK_DATA_SYSTEM_REGS
, offsetof(struct sleep_stack_data
, system_regs
));
133 DEFINE(SLEEP_STACK_DATA_CALLEE_REGS
, offsetof(struct sleep_stack_data
, callee_saved_regs
));
135 DEFINE(ARM_SMCCC_RES_X0_OFFS
, offsetof(struct arm_smccc_res
, a0
));
136 DEFINE(ARM_SMCCC_RES_X2_OFFS
, offsetof(struct arm_smccc_res
, a2
));
137 DEFINE(ARM_SMCCC_QUIRK_ID_OFFS
, offsetof(struct arm_smccc_quirk
, id
));
138 DEFINE(ARM_SMCCC_QUIRK_STATE_OFFS
, offsetof(struct arm_smccc_quirk
, state
));
139 DEFINE(ARM_SMCCC_1_2_REGS_X0_OFFS
, offsetof(struct arm_smccc_1_2_regs
, a0
));
140 DEFINE(ARM_SMCCC_1_2_REGS_X2_OFFS
, offsetof(struct arm_smccc_1_2_regs
, a2
));
141 DEFINE(ARM_SMCCC_1_2_REGS_X4_OFFS
, offsetof(struct arm_smccc_1_2_regs
, a4
));
142 DEFINE(ARM_SMCCC_1_2_REGS_X6_OFFS
, offsetof(struct arm_smccc_1_2_regs
, a6
));
143 DEFINE(ARM_SMCCC_1_2_REGS_X8_OFFS
, offsetof(struct arm_smccc_1_2_regs
, a8
));
144 DEFINE(ARM_SMCCC_1_2_REGS_X10_OFFS
, offsetof(struct arm_smccc_1_2_regs
, a10
));
145 DEFINE(ARM_SMCCC_1_2_REGS_X12_OFFS
, offsetof(struct arm_smccc_1_2_regs
, a12
));
146 DEFINE(ARM_SMCCC_1_2_REGS_X14_OFFS
, offsetof(struct arm_smccc_1_2_regs
, a14
));
147 DEFINE(ARM_SMCCC_1_2_REGS_X16_OFFS
, offsetof(struct arm_smccc_1_2_regs
, a16
));
149 DEFINE(HIBERN_PBE_ORIG
, offsetof(struct pbe
, orig_address
));
150 DEFINE(HIBERN_PBE_ADDR
, offsetof(struct pbe
, address
));
151 DEFINE(HIBERN_PBE_NEXT
, offsetof(struct pbe
, next
));
152 DEFINE(ARM64_FTR_SYSVAL
, offsetof(struct arm64_ftr_reg
, sys_val
));
154 #ifdef CONFIG_UNMAP_KERNEL_AT_EL0
155 DEFINE(TRAMP_VALIAS
, TRAMP_VALIAS
);
157 #ifdef CONFIG_ARM_SDE_INTERFACE
158 DEFINE(SDEI_EVENT_INTREGS
, offsetof(struct sdei_registered_event
, interrupted_regs
));
159 DEFINE(SDEI_EVENT_PRIORITY
, offsetof(struct sdei_registered_event
, priority
));
161 #ifdef CONFIG_ARM64_PTR_AUTH
162 DEFINE(PTRAUTH_USER_KEY_APIA
, offsetof(struct ptrauth_keys_user
, apia
));
163 #ifdef CONFIG_ARM64_PTR_AUTH_KERNEL
164 DEFINE(PTRAUTH_KERNEL_KEY_APIA
, offsetof(struct ptrauth_keys_kernel
, apia
));
168 #ifdef CONFIG_KEXEC_CORE
169 DEFINE(KIMAGE_ARCH_DTB_MEM
, offsetof(struct kimage
, arch
.dtb_mem
));
170 DEFINE(KIMAGE_ARCH_EL2_VECTORS
, offsetof(struct kimage
, arch
.el2_vectors
));
171 DEFINE(KIMAGE_ARCH_ZERO_PAGE
, offsetof(struct kimage
, arch
.zero_page
));
172 DEFINE(KIMAGE_ARCH_PHYS_OFFSET
, offsetof(struct kimage
, arch
.phys_offset
));
173 DEFINE(KIMAGE_ARCH_TTBR1
, offsetof(struct kimage
, arch
.ttbr1
));
174 DEFINE(KIMAGE_HEAD
, offsetof(struct kimage
, head
));
175 DEFINE(KIMAGE_START
, offsetof(struct kimage
, start
));
178 #ifdef CONFIG_FUNCTION_TRACER
179 DEFINE(FTRACE_OPS_FUNC
, offsetof(struct ftrace_ops
, func
));
182 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
183 DEFINE(FGRET_REGS_X0
, offsetof(struct fgraph_ret_regs
, regs
[0]));
184 DEFINE(FGRET_REGS_X1
, offsetof(struct fgraph_ret_regs
, regs
[1]));
185 DEFINE(FGRET_REGS_X2
, offsetof(struct fgraph_ret_regs
, regs
[2]));
186 DEFINE(FGRET_REGS_X3
, offsetof(struct fgraph_ret_regs
, regs
[3]));
187 DEFINE(FGRET_REGS_X4
, offsetof(struct fgraph_ret_regs
, regs
[4]));
188 DEFINE(FGRET_REGS_X5
, offsetof(struct fgraph_ret_regs
, regs
[5]));
189 DEFINE(FGRET_REGS_X6
, offsetof(struct fgraph_ret_regs
, regs
[6]));
190 DEFINE(FGRET_REGS_X7
, offsetof(struct fgraph_ret_regs
, regs
[7]));
191 DEFINE(FGRET_REGS_FP
, offsetof(struct fgraph_ret_regs
, fp
));
192 DEFINE(FGRET_REGS_SIZE
, sizeof(struct fgraph_ret_regs
));
194 #ifdef CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS
195 DEFINE(FTRACE_OPS_DIRECT_CALL
, offsetof(struct ftrace_ops
, direct_call
));