1 // SPDX-License-Identifier: GPL-2.0
3 * Generate definitions needed by assembly language modules.
4 * This code generates raw asm output which is post-processed to extract
5 * and format the required data.
10 #include <linux/kbuild.h>
11 #include <linux/kvm_host.h>
12 #include <linux/sched.h>
15 #include <asm/pgtable.h>
19 * Make sure that the compiler is new enough. We want a compiler that
20 * is known to work with the "Q" assembler constraint.
22 #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3)
23 #error Your compiler is too old; please use version 4.3 or newer
28 /* task struct offsets */
29 OFFSET(__TASK_stack
, task_struct
, stack
);
30 OFFSET(__TASK_thread
, task_struct
, thread
);
31 OFFSET(__TASK_pid
, task_struct
, pid
);
33 /* thread struct offsets */
34 OFFSET(__THREAD_ksp
, thread_struct
, ksp
);
35 OFFSET(__THREAD_sysc_table
, thread_struct
, sys_call_table
);
36 OFFSET(__THREAD_last_break
, thread_struct
, last_break
);
37 OFFSET(__THREAD_FPU_fpc
, thread_struct
, fpu
.fpc
);
38 OFFSET(__THREAD_FPU_regs
, thread_struct
, fpu
.regs
);
39 OFFSET(__THREAD_per_cause
, thread_struct
, per_event
.cause
);
40 OFFSET(__THREAD_per_address
, thread_struct
, per_event
.address
);
41 OFFSET(__THREAD_per_paid
, thread_struct
, per_event
.paid
);
42 OFFSET(__THREAD_trap_tdb
, thread_struct
, trap_tdb
);
44 /* thread info offsets */
45 OFFSET(__TI_flags
, task_struct
, thread_info
.flags
);
48 OFFSET(__PT_ARGS
, pt_regs
, args
);
49 OFFSET(__PT_PSW
, pt_regs
, psw
);
50 OFFSET(__PT_GPRS
, pt_regs
, gprs
);
51 OFFSET(__PT_ORIG_GPR2
, pt_regs
, orig_gpr2
);
52 OFFSET(__PT_INT_CODE
, pt_regs
, int_code
);
53 OFFSET(__PT_INT_PARM
, pt_regs
, int_parm
);
54 OFFSET(__PT_INT_PARM_LONG
, pt_regs
, int_parm_long
);
55 OFFSET(__PT_FLAGS
, pt_regs
, flags
);
56 DEFINE(__PT_SIZE
, sizeof(struct pt_regs
));
58 /* stack_frame offsets */
59 OFFSET(__SF_BACKCHAIN
, stack_frame
, back_chain
);
60 OFFSET(__SF_GPRS
, stack_frame
, gprs
);
61 OFFSET(__SF_EMPTY
, stack_frame
, empty1
);
62 OFFSET(__SF_SIE_CONTROL
, stack_frame
, empty1
[0]);
63 OFFSET(__SF_SIE_SAVEAREA
, stack_frame
, empty1
[1]);
64 OFFSET(__SF_SIE_REASON
, stack_frame
, empty1
[2]);
66 /* timeval/timezone offsets for use by vdso */
67 OFFSET(__VDSO_UPD_COUNT
, vdso_data
, tb_update_count
);
68 OFFSET(__VDSO_XTIME_STAMP
, vdso_data
, xtime_tod_stamp
);
69 OFFSET(__VDSO_XTIME_SEC
, vdso_data
, xtime_clock_sec
);
70 OFFSET(__VDSO_XTIME_NSEC
, vdso_data
, xtime_clock_nsec
);
71 OFFSET(__VDSO_XTIME_CRS_SEC
, vdso_data
, xtime_coarse_sec
);
72 OFFSET(__VDSO_XTIME_CRS_NSEC
, vdso_data
, xtime_coarse_nsec
);
73 OFFSET(__VDSO_WTOM_SEC
, vdso_data
, wtom_clock_sec
);
74 OFFSET(__VDSO_WTOM_NSEC
, vdso_data
, wtom_clock_nsec
);
75 OFFSET(__VDSO_WTOM_CRS_SEC
, vdso_data
, wtom_coarse_sec
);
76 OFFSET(__VDSO_WTOM_CRS_NSEC
, vdso_data
, wtom_coarse_nsec
);
77 OFFSET(__VDSO_TIMEZONE
, vdso_data
, tz_minuteswest
);
78 OFFSET(__VDSO_ECTG_OK
, vdso_data
, ectg_available
);
79 OFFSET(__VDSO_TK_MULT
, vdso_data
, tk_mult
);
80 OFFSET(__VDSO_TK_SHIFT
, vdso_data
, tk_shift
);
81 OFFSET(__VDSO_TS_DIR
, vdso_data
, ts_dir
);
82 OFFSET(__VDSO_TS_END
, vdso_data
, ts_end
);
83 OFFSET(__VDSO_ECTG_BASE
, vdso_per_cpu_data
, ectg_timer_base
);
84 OFFSET(__VDSO_ECTG_USER
, vdso_per_cpu_data
, ectg_user_time
);
85 OFFSET(__VDSO_CPU_NR
, vdso_per_cpu_data
, cpu_nr
);
86 OFFSET(__VDSO_NODE_ID
, vdso_per_cpu_data
, node_id
);
88 /* constants used by the vdso */
89 DEFINE(__CLOCK_REALTIME
, CLOCK_REALTIME
);
90 DEFINE(__CLOCK_MONOTONIC
, CLOCK_MONOTONIC
);
91 DEFINE(__CLOCK_REALTIME_COARSE
, CLOCK_REALTIME_COARSE
);
92 DEFINE(__CLOCK_MONOTONIC_COARSE
, CLOCK_MONOTONIC_COARSE
);
93 DEFINE(__CLOCK_THREAD_CPUTIME_ID
, CLOCK_THREAD_CPUTIME_ID
);
94 DEFINE(__CLOCK_REALTIME_RES
, MONOTONIC_RES_NSEC
);
95 DEFINE(__CLOCK_COARSE_RES
, LOW_RES_NSEC
);
97 /* idle data offsets */
98 OFFSET(__CLOCK_IDLE_ENTER
, s390_idle_data
, clock_idle_enter
);
99 OFFSET(__CLOCK_IDLE_EXIT
, s390_idle_data
, clock_idle_exit
);
100 OFFSET(__TIMER_IDLE_ENTER
, s390_idle_data
, timer_idle_enter
);
101 OFFSET(__TIMER_IDLE_EXIT
, s390_idle_data
, timer_idle_exit
);
103 /* hardware defined lowcore locations 0x000 - 0x1ff */
104 OFFSET(__LC_EXT_PARAMS
, lowcore
, ext_params
);
105 OFFSET(__LC_EXT_CPU_ADDR
, lowcore
, ext_cpu_addr
);
106 OFFSET(__LC_EXT_INT_CODE
, lowcore
, ext_int_code
);
107 OFFSET(__LC_SVC_ILC
, lowcore
, svc_ilc
);
108 OFFSET(__LC_SVC_INT_CODE
, lowcore
, svc_code
);
109 OFFSET(__LC_PGM_ILC
, lowcore
, pgm_ilc
);
110 OFFSET(__LC_PGM_INT_CODE
, lowcore
, pgm_code
);
111 OFFSET(__LC_DATA_EXC_CODE
, lowcore
, data_exc_code
);
112 OFFSET(__LC_MON_CLASS_NR
, lowcore
, mon_class_num
);
113 OFFSET(__LC_PER_CODE
, lowcore
, per_code
);
114 OFFSET(__LC_PER_ATMID
, lowcore
, per_atmid
);
115 OFFSET(__LC_PER_ADDRESS
, lowcore
, per_address
);
116 OFFSET(__LC_EXC_ACCESS_ID
, lowcore
, exc_access_id
);
117 OFFSET(__LC_PER_ACCESS_ID
, lowcore
, per_access_id
);
118 OFFSET(__LC_OP_ACCESS_ID
, lowcore
, op_access_id
);
119 OFFSET(__LC_AR_MODE_ID
, lowcore
, ar_mode_id
);
120 OFFSET(__LC_TRANS_EXC_CODE
, lowcore
, trans_exc_code
);
121 OFFSET(__LC_MON_CODE
, lowcore
, monitor_code
);
122 OFFSET(__LC_SUBCHANNEL_ID
, lowcore
, subchannel_id
);
123 OFFSET(__LC_SUBCHANNEL_NR
, lowcore
, subchannel_nr
);
124 OFFSET(__LC_IO_INT_PARM
, lowcore
, io_int_parm
);
125 OFFSET(__LC_IO_INT_WORD
, lowcore
, io_int_word
);
126 OFFSET(__LC_STFL_FAC_LIST
, lowcore
, stfl_fac_list
);
127 OFFSET(__LC_STFLE_FAC_LIST
, lowcore
, stfle_fac_list
);
128 OFFSET(__LC_MCCK_CODE
, lowcore
, mcck_interruption_code
);
129 OFFSET(__LC_EXT_DAMAGE_CODE
, lowcore
, external_damage_code
);
130 OFFSET(__LC_MCCK_FAIL_STOR_ADDR
, lowcore
, failing_storage_address
);
131 OFFSET(__LC_LAST_BREAK
, lowcore
, breaking_event_addr
);
132 OFFSET(__LC_RST_OLD_PSW
, lowcore
, restart_old_psw
);
133 OFFSET(__LC_EXT_OLD_PSW
, lowcore
, external_old_psw
);
134 OFFSET(__LC_SVC_OLD_PSW
, lowcore
, svc_old_psw
);
135 OFFSET(__LC_PGM_OLD_PSW
, lowcore
, program_old_psw
);
136 OFFSET(__LC_MCK_OLD_PSW
, lowcore
, mcck_old_psw
);
137 OFFSET(__LC_IO_OLD_PSW
, lowcore
, io_old_psw
);
138 OFFSET(__LC_RST_NEW_PSW
, lowcore
, restart_psw
);
139 OFFSET(__LC_EXT_NEW_PSW
, lowcore
, external_new_psw
);
140 OFFSET(__LC_SVC_NEW_PSW
, lowcore
, svc_new_psw
);
141 OFFSET(__LC_PGM_NEW_PSW
, lowcore
, program_new_psw
);
142 OFFSET(__LC_MCK_NEW_PSW
, lowcore
, mcck_new_psw
);
143 OFFSET(__LC_IO_NEW_PSW
, lowcore
, io_new_psw
);
144 /* software defined lowcore locations 0x200 - 0xdff*/
145 OFFSET(__LC_SAVE_AREA_SYNC
, lowcore
, save_area_sync
);
146 OFFSET(__LC_SAVE_AREA_ASYNC
, lowcore
, save_area_async
);
147 OFFSET(__LC_SAVE_AREA_RESTART
, lowcore
, save_area_restart
);
148 OFFSET(__LC_CPU_FLAGS
, lowcore
, cpu_flags
);
149 OFFSET(__LC_RETURN_PSW
, lowcore
, return_psw
);
150 OFFSET(__LC_RETURN_MCCK_PSW
, lowcore
, return_mcck_psw
);
151 OFFSET(__LC_SYNC_ENTER_TIMER
, lowcore
, sync_enter_timer
);
152 OFFSET(__LC_ASYNC_ENTER_TIMER
, lowcore
, async_enter_timer
);
153 OFFSET(__LC_MCCK_ENTER_TIMER
, lowcore
, mcck_enter_timer
);
154 OFFSET(__LC_EXIT_TIMER
, lowcore
, exit_timer
);
155 OFFSET(__LC_USER_TIMER
, lowcore
, user_timer
);
156 OFFSET(__LC_SYSTEM_TIMER
, lowcore
, system_timer
);
157 OFFSET(__LC_STEAL_TIMER
, lowcore
, steal_timer
);
158 OFFSET(__LC_LAST_UPDATE_TIMER
, lowcore
, last_update_timer
);
159 OFFSET(__LC_LAST_UPDATE_CLOCK
, lowcore
, last_update_clock
);
160 OFFSET(__LC_INT_CLOCK
, lowcore
, int_clock
);
161 OFFSET(__LC_MCCK_CLOCK
, lowcore
, mcck_clock
);
162 OFFSET(__LC_BOOT_CLOCK
, lowcore
, boot_clock
);
163 OFFSET(__LC_CURRENT
, lowcore
, current_task
);
164 OFFSET(__LC_KERNEL_STACK
, lowcore
, kernel_stack
);
165 OFFSET(__LC_ASYNC_STACK
, lowcore
, async_stack
);
166 OFFSET(__LC_PANIC_STACK
, lowcore
, panic_stack
);
167 OFFSET(__LC_RESTART_STACK
, lowcore
, restart_stack
);
168 OFFSET(__LC_RESTART_FN
, lowcore
, restart_fn
);
169 OFFSET(__LC_RESTART_DATA
, lowcore
, restart_data
);
170 OFFSET(__LC_RESTART_SOURCE
, lowcore
, restart_source
);
171 OFFSET(__LC_USER_ASCE
, lowcore
, user_asce
);
172 OFFSET(__LC_LPP
, lowcore
, lpp
);
173 OFFSET(__LC_CURRENT_PID
, lowcore
, current_pid
);
174 OFFSET(__LC_PERCPU_OFFSET
, lowcore
, percpu_offset
);
175 OFFSET(__LC_VDSO_PER_CPU
, lowcore
, vdso_per_cpu_data
);
176 OFFSET(__LC_MACHINE_FLAGS
, lowcore
, machine_flags
);
177 OFFSET(__LC_PREEMPT_COUNT
, lowcore
, preempt_count
);
178 OFFSET(__LC_GMAP
, lowcore
, gmap
);
179 OFFSET(__LC_PASTE
, lowcore
, paste
);
180 OFFSET(__LC_BR_R1
, lowcore
, br_r1_trampoline
);
181 /* software defined ABI-relevant lowcore locations 0xe00 - 0xe20 */
182 OFFSET(__LC_DUMP_REIPL
, lowcore
, ipib
);
183 /* hardware defined lowcore locations 0x1000 - 0x18ff */
184 OFFSET(__LC_MCESAD
, lowcore
, mcesad
);
185 OFFSET(__LC_EXT_PARAMS2
, lowcore
, ext_params2
);
186 OFFSET(__LC_FPREGS_SAVE_AREA
, lowcore
, floating_pt_save_area
);
187 OFFSET(__LC_GPREGS_SAVE_AREA
, lowcore
, gpregs_save_area
);
188 OFFSET(__LC_PSW_SAVE_AREA
, lowcore
, psw_save_area
);
189 OFFSET(__LC_PREFIX_SAVE_AREA
, lowcore
, prefixreg_save_area
);
190 OFFSET(__LC_FP_CREG_SAVE_AREA
, lowcore
, fpt_creg_save_area
);
191 OFFSET(__LC_TOD_PROGREG_SAVE_AREA
, lowcore
, tod_progreg_save_area
);
192 OFFSET(__LC_CPU_TIMER_SAVE_AREA
, lowcore
, cpu_timer_save_area
);
193 OFFSET(__LC_CLOCK_COMP_SAVE_AREA
, lowcore
, clock_comp_save_area
);
194 OFFSET(__LC_AREGS_SAVE_AREA
, lowcore
, access_regs_save_area
);
195 OFFSET(__LC_CREGS_SAVE_AREA
, lowcore
, cregs_save_area
);
196 OFFSET(__LC_PGM_TDB
, lowcore
, pgm_tdb
);
198 /* gmap/sie offsets */
199 OFFSET(__GMAP_ASCE
, gmap
, asce
);
200 OFFSET(__SIE_PROG0C
, kvm_s390_sie_block
, prog0c
);
201 OFFSET(__SIE_PROG20
, kvm_s390_sie_block
, prog20
);