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/dma-mapping.h>
16 #include <linux/kvm_host.h>
17 #include <linux/preempt.h>
18 #include <linux/suspend.h>
19 #include <asm/cpufeature.h>
20 #include <asm/fixmap.h>
21 #include <asm/thread_info.h>
22 #include <asm/memory.h>
23 #include <asm/signal32.h>
24 #include <asm/smp_plat.h>
25 #include <asm/suspend.h>
26 #include <linux/kbuild.h>
27 #include <linux/arm-smccc.h>
31 DEFINE(TSK_ACTIVE_MM
, offsetof(struct task_struct
, active_mm
));
33 DEFINE(TSK_TI_CPU
, offsetof(struct task_struct
, thread_info
.cpu
));
34 DEFINE(TSK_TI_FLAGS
, offsetof(struct task_struct
, thread_info
.flags
));
35 DEFINE(TSK_TI_PREEMPT
, offsetof(struct task_struct
, thread_info
.preempt_count
));
36 #ifdef CONFIG_ARM64_SW_TTBR0_PAN
37 DEFINE(TSK_TI_TTBR0
, offsetof(struct task_struct
, thread_info
.ttbr0
));
39 #ifdef CONFIG_SHADOW_CALL_STACK
40 DEFINE(TSK_TI_SCS_BASE
, offsetof(struct task_struct
, thread_info
.scs_base
));
41 DEFINE(TSK_TI_SCS_SP
, offsetof(struct task_struct
, thread_info
.scs_sp
));
43 DEFINE(TSK_STACK
, offsetof(struct task_struct
, stack
));
44 #ifdef CONFIG_STACKPROTECTOR
45 DEFINE(TSK_STACK_CANARY
, offsetof(struct task_struct
, stack_canary
));
48 DEFINE(THREAD_CPU_CONTEXT
, offsetof(struct task_struct
, thread
.cpu_context
));
49 DEFINE(THREAD_SCTLR_USER
, offsetof(struct task_struct
, thread
.sctlr_user
));
50 #ifdef CONFIG_ARM64_PTR_AUTH
51 DEFINE(THREAD_KEYS_USER
, offsetof(struct task_struct
, thread
.keys_user
));
53 #ifdef CONFIG_ARM64_PTR_AUTH_KERNEL
54 DEFINE(THREAD_KEYS_KERNEL
, offsetof(struct task_struct
, thread
.keys_kernel
));
56 #ifdef CONFIG_ARM64_MTE
57 DEFINE(THREAD_MTE_CTRL
, offsetof(struct task_struct
, thread
.mte_ctrl
));
60 DEFINE(S_X0
, offsetof(struct pt_regs
, regs
[0]));
61 DEFINE(S_X2
, offsetof(struct pt_regs
, regs
[2]));
62 DEFINE(S_X4
, offsetof(struct pt_regs
, regs
[4]));
63 DEFINE(S_X6
, offsetof(struct pt_regs
, regs
[6]));
64 DEFINE(S_X8
, offsetof(struct pt_regs
, regs
[8]));
65 DEFINE(S_X10
, offsetof(struct pt_regs
, regs
[10]));
66 DEFINE(S_X12
, offsetof(struct pt_regs
, regs
[12]));
67 DEFINE(S_X14
, offsetof(struct pt_regs
, regs
[14]));
68 DEFINE(S_X16
, offsetof(struct pt_regs
, regs
[16]));
69 DEFINE(S_X18
, offsetof(struct pt_regs
, regs
[18]));
70 DEFINE(S_X20
, offsetof(struct pt_regs
, regs
[20]));
71 DEFINE(S_X22
, offsetof(struct pt_regs
, regs
[22]));
72 DEFINE(S_X24
, offsetof(struct pt_regs
, regs
[24]));
73 DEFINE(S_X26
, offsetof(struct pt_regs
, regs
[26]));
74 DEFINE(S_X28
, offsetof(struct pt_regs
, regs
[28]));
75 DEFINE(S_FP
, offsetof(struct pt_regs
, regs
[29]));
76 DEFINE(S_LR
, offsetof(struct pt_regs
, regs
[30]));
77 DEFINE(S_SP
, offsetof(struct pt_regs
, sp
));
78 DEFINE(S_PC
, offsetof(struct pt_regs
, pc
));
79 DEFINE(S_PSTATE
, offsetof(struct pt_regs
, pstate
));
80 DEFINE(S_SYSCALLNO
, offsetof(struct pt_regs
, syscallno
));
81 DEFINE(S_SDEI_TTBR1
, offsetof(struct pt_regs
, sdei_ttbr1
));
82 DEFINE(S_PMR_SAVE
, offsetof(struct pt_regs
, pmr_save
));
83 DEFINE(S_STACKFRAME
, offsetof(struct pt_regs
, stackframe
));
84 DEFINE(PT_REGS_SIZE
, sizeof(struct pt_regs
));
86 #ifdef CONFIG_DYNAMIC_FTRACE_WITH_ARGS
87 DEFINE(FREGS_X0
, offsetof(struct ftrace_regs
, regs
[0]));
88 DEFINE(FREGS_X2
, offsetof(struct ftrace_regs
, regs
[2]));
89 DEFINE(FREGS_X4
, offsetof(struct ftrace_regs
, regs
[4]));
90 DEFINE(FREGS_X6
, offsetof(struct ftrace_regs
, regs
[6]));
91 DEFINE(FREGS_X8
, offsetof(struct ftrace_regs
, regs
[8]));
92 DEFINE(FREGS_FP
, offsetof(struct ftrace_regs
, fp
));
93 DEFINE(FREGS_LR
, offsetof(struct ftrace_regs
, lr
));
94 DEFINE(FREGS_SP
, offsetof(struct ftrace_regs
, sp
));
95 DEFINE(FREGS_PC
, offsetof(struct ftrace_regs
, pc
));
96 #ifdef CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS
97 DEFINE(FREGS_DIRECT_TRAMP
, offsetof(struct ftrace_regs
, direct_tramp
));
99 DEFINE(FREGS_SIZE
, sizeof(struct ftrace_regs
));
103 DEFINE(COMPAT_SIGFRAME_REGS_OFFSET
, offsetof(struct compat_sigframe
, uc
.uc_mcontext
.arm_r0
));
104 DEFINE(COMPAT_RT_SIGFRAME_REGS_OFFSET
, offsetof(struct compat_rt_sigframe
, sig
.uc
.uc_mcontext
.arm_r0
));
107 DEFINE(MM_CONTEXT_ID
, offsetof(struct mm_struct
, context
.id
.counter
));
109 DEFINE(VMA_VM_MM
, offsetof(struct vm_area_struct
, vm_mm
));
110 DEFINE(VMA_VM_FLAGS
, offsetof(struct vm_area_struct
, vm_flags
));
112 DEFINE(VM_EXEC
, VM_EXEC
);
114 DEFINE(PAGE_SZ
, PAGE_SIZE
);
116 DEFINE(DMA_TO_DEVICE
, DMA_TO_DEVICE
);
117 DEFINE(DMA_FROM_DEVICE
, DMA_FROM_DEVICE
);
119 DEFINE(PREEMPT_DISABLE_OFFSET
, PREEMPT_DISABLE_OFFSET
);
121 DEFINE(CPU_BOOT_TASK
, offsetof(struct secondary_data
, task
));
123 DEFINE(FTR_OVR_VAL_OFFSET
, offsetof(struct arm64_ftr_override
, val
));
124 DEFINE(FTR_OVR_MASK_OFFSET
, offsetof(struct arm64_ftr_override
, mask
));
127 DEFINE(VCPU_CONTEXT
, offsetof(struct kvm_vcpu
, arch
.ctxt
));
128 DEFINE(VCPU_FAULT_DISR
, offsetof(struct kvm_vcpu
, arch
.fault
.disr_el1
));
129 DEFINE(VCPU_HCR_EL2
, offsetof(struct kvm_vcpu
, arch
.hcr_el2
));
130 DEFINE(CPU_USER_PT_REGS
, offsetof(struct kvm_cpu_context
, regs
));
131 DEFINE(CPU_ELR_EL2
, offsetof(struct kvm_cpu_context
, sys_regs
[ELR_EL2
]));
132 DEFINE(CPU_RGSR_EL1
, offsetof(struct kvm_cpu_context
, sys_regs
[RGSR_EL1
]));
133 DEFINE(CPU_GCR_EL1
, offsetof(struct kvm_cpu_context
, sys_regs
[GCR_EL1
]));
134 DEFINE(CPU_APIAKEYLO_EL1
, offsetof(struct kvm_cpu_context
, sys_regs
[APIAKEYLO_EL1
]));
135 DEFINE(CPU_APIBKEYLO_EL1
, offsetof(struct kvm_cpu_context
, sys_regs
[APIBKEYLO_EL1
]));
136 DEFINE(CPU_APDAKEYLO_EL1
, offsetof(struct kvm_cpu_context
, sys_regs
[APDAKEYLO_EL1
]));
137 DEFINE(CPU_APDBKEYLO_EL1
, offsetof(struct kvm_cpu_context
, sys_regs
[APDBKEYLO_EL1
]));
138 DEFINE(CPU_APGAKEYLO_EL1
, offsetof(struct kvm_cpu_context
, sys_regs
[APGAKEYLO_EL1
]));
139 DEFINE(HOST_CONTEXT_VCPU
, offsetof(struct kvm_cpu_context
, __hyp_running_vcpu
));
140 DEFINE(HOST_DATA_CONTEXT
, offsetof(struct kvm_host_data
, host_ctxt
));
141 DEFINE(NVHE_INIT_MAIR_EL2
, offsetof(struct kvm_nvhe_init_params
, mair_el2
));
142 DEFINE(NVHE_INIT_TCR_EL2
, offsetof(struct kvm_nvhe_init_params
, tcr_el2
));
143 DEFINE(NVHE_INIT_TPIDR_EL2
, offsetof(struct kvm_nvhe_init_params
, tpidr_el2
));
144 DEFINE(NVHE_INIT_STACK_HYP_VA
, offsetof(struct kvm_nvhe_init_params
, stack_hyp_va
));
145 DEFINE(NVHE_INIT_PGD_PA
, offsetof(struct kvm_nvhe_init_params
, pgd_pa
));
146 DEFINE(NVHE_INIT_HCR_EL2
, offsetof(struct kvm_nvhe_init_params
, hcr_el2
));
147 DEFINE(NVHE_INIT_VTTBR
, offsetof(struct kvm_nvhe_init_params
, vttbr
));
148 DEFINE(NVHE_INIT_VTCR
, offsetof(struct kvm_nvhe_init_params
, vtcr
));
151 DEFINE(CPU_CTX_SP
, offsetof(struct cpu_suspend_ctx
, sp
));
152 DEFINE(MPIDR_HASH_MASK
, offsetof(struct mpidr_hash
, mask
));
153 DEFINE(MPIDR_HASH_SHIFTS
, offsetof(struct mpidr_hash
, shift_aff
));
154 DEFINE(SLEEP_STACK_DATA_SYSTEM_REGS
, offsetof(struct sleep_stack_data
, system_regs
));
155 DEFINE(SLEEP_STACK_DATA_CALLEE_REGS
, offsetof(struct sleep_stack_data
, callee_saved_regs
));
157 DEFINE(ARM_SMCCC_RES_X0_OFFS
, offsetof(struct arm_smccc_res
, a0
));
158 DEFINE(ARM_SMCCC_RES_X2_OFFS
, offsetof(struct arm_smccc_res
, a2
));
159 DEFINE(ARM_SMCCC_QUIRK_ID_OFFS
, offsetof(struct arm_smccc_quirk
, id
));
160 DEFINE(ARM_SMCCC_QUIRK_STATE_OFFS
, offsetof(struct arm_smccc_quirk
, state
));
161 DEFINE(ARM_SMCCC_1_2_REGS_X0_OFFS
, offsetof(struct arm_smccc_1_2_regs
, a0
));
162 DEFINE(ARM_SMCCC_1_2_REGS_X2_OFFS
, offsetof(struct arm_smccc_1_2_regs
, a2
));
163 DEFINE(ARM_SMCCC_1_2_REGS_X4_OFFS
, offsetof(struct arm_smccc_1_2_regs
, a4
));
164 DEFINE(ARM_SMCCC_1_2_REGS_X6_OFFS
, offsetof(struct arm_smccc_1_2_regs
, a6
));
165 DEFINE(ARM_SMCCC_1_2_REGS_X8_OFFS
, offsetof(struct arm_smccc_1_2_regs
, a8
));
166 DEFINE(ARM_SMCCC_1_2_REGS_X10_OFFS
, offsetof(struct arm_smccc_1_2_regs
, a10
));
167 DEFINE(ARM_SMCCC_1_2_REGS_X12_OFFS
, offsetof(struct arm_smccc_1_2_regs
, a12
));
168 DEFINE(ARM_SMCCC_1_2_REGS_X14_OFFS
, offsetof(struct arm_smccc_1_2_regs
, a14
));
169 DEFINE(ARM_SMCCC_1_2_REGS_X16_OFFS
, offsetof(struct arm_smccc_1_2_regs
, a16
));
171 DEFINE(HIBERN_PBE_ORIG
, offsetof(struct pbe
, orig_address
));
172 DEFINE(HIBERN_PBE_ADDR
, offsetof(struct pbe
, address
));
173 DEFINE(HIBERN_PBE_NEXT
, offsetof(struct pbe
, next
));
174 DEFINE(ARM64_FTR_SYSVAL
, offsetof(struct arm64_ftr_reg
, sys_val
));
176 #ifdef CONFIG_UNMAP_KERNEL_AT_EL0
177 DEFINE(TRAMP_VALIAS
, TRAMP_VALIAS
);
179 #ifdef CONFIG_ARM_SDE_INTERFACE
180 DEFINE(SDEI_EVENT_INTREGS
, offsetof(struct sdei_registered_event
, interrupted_regs
));
181 DEFINE(SDEI_EVENT_PRIORITY
, offsetof(struct sdei_registered_event
, priority
));
183 #ifdef CONFIG_ARM64_PTR_AUTH
184 DEFINE(PTRAUTH_USER_KEY_APIA
, offsetof(struct ptrauth_keys_user
, apia
));
185 #ifdef CONFIG_ARM64_PTR_AUTH_KERNEL
186 DEFINE(PTRAUTH_KERNEL_KEY_APIA
, offsetof(struct ptrauth_keys_kernel
, apia
));
190 #ifdef CONFIG_KEXEC_CORE
191 DEFINE(KIMAGE_ARCH_DTB_MEM
, offsetof(struct kimage
, arch
.dtb_mem
));
192 DEFINE(KIMAGE_ARCH_EL2_VECTORS
, offsetof(struct kimage
, arch
.el2_vectors
));
193 DEFINE(KIMAGE_ARCH_ZERO_PAGE
, offsetof(struct kimage
, arch
.zero_page
));
194 DEFINE(KIMAGE_ARCH_PHYS_OFFSET
, offsetof(struct kimage
, arch
.phys_offset
));
195 DEFINE(KIMAGE_ARCH_TTBR1
, offsetof(struct kimage
, arch
.ttbr1
));
196 DEFINE(KIMAGE_HEAD
, offsetof(struct kimage
, head
));
197 DEFINE(KIMAGE_START
, offsetof(struct kimage
, start
));
200 #ifdef CONFIG_FUNCTION_TRACER
201 DEFINE(FTRACE_OPS_FUNC
, offsetof(struct ftrace_ops
, func
));
204 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
205 DEFINE(FGRET_REGS_X0
, offsetof(struct fgraph_ret_regs
, regs
[0]));
206 DEFINE(FGRET_REGS_X1
, offsetof(struct fgraph_ret_regs
, regs
[1]));
207 DEFINE(FGRET_REGS_X2
, offsetof(struct fgraph_ret_regs
, regs
[2]));
208 DEFINE(FGRET_REGS_X3
, offsetof(struct fgraph_ret_regs
, regs
[3]));
209 DEFINE(FGRET_REGS_X4
, offsetof(struct fgraph_ret_regs
, regs
[4]));
210 DEFINE(FGRET_REGS_X5
, offsetof(struct fgraph_ret_regs
, regs
[5]));
211 DEFINE(FGRET_REGS_X6
, offsetof(struct fgraph_ret_regs
, regs
[6]));
212 DEFINE(FGRET_REGS_X7
, offsetof(struct fgraph_ret_regs
, regs
[7]));
213 DEFINE(FGRET_REGS_FP
, offsetof(struct fgraph_ret_regs
, fp
));
214 DEFINE(FGRET_REGS_SIZE
, sizeof(struct fgraph_ret_regs
));
216 #ifdef CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS
217 DEFINE(FTRACE_OPS_DIRECT_CALL
, offsetof(struct ftrace_ops
, direct_call
));