2 * wrapper for 31 bit compatible system calls.
4 * Copyright IBM Corp. 2000, 2006
5 * Author(s): Gerhard Tonn (ton@de.ibm.com),
6 * Thomas Spatzier (tspat@de.ibm.com)
9 #include <linux/linkage.h>
11 ENTRY(sys32_time_wrapper)
13 jg compat_sys_time # branch to system call
15 #sys32_getpid_wrapper # void
17 ENTRY(sys32_mount_wrapper)
18 llgtr %r2,%r2 # char *
19 llgtr %r3,%r3 # char *
20 llgtr %r4,%r4 # char *
21 llgfr %r5,%r5 # unsigned long
22 llgtr %r6,%r6 # void *
23 jg compat_sys_mount # branch to system call
25 ENTRY(sys32_ptrace_wrapper)
30 jg compat_sys_ptrace # branch to system call
32 ENTRY(compat_sys_utime_wrapper)
33 llgtr %r2,%r2 # char *
34 llgtr %r3,%r3 # struct compat_utimbuf *
35 jg compat_sys_utime # branch to system call
37 ENTRY(compat_sys_times_wrapper)
38 llgtr %r2,%r2 # struct compat_tms *
39 jg compat_sys_times # branch to system call
41 ENTRY(compat_sys_ioctl_wrapper)
42 llgfr %r2,%r2 # unsigned int
43 llgfr %r3,%r3 # unsigned int
44 llgfr %r4,%r4 # unsigned int
45 jg compat_sys_ioctl # branch to system call
47 ENTRY(compat_sys_fcntl_wrapper)
48 llgfr %r2,%r2 # unsigned int
49 llgfr %r3,%r3 # unsigned int
50 llgfr %r4,%r4 # unsigned long
51 jg compat_sys_fcntl # branch to system call
53 ENTRY(sys32_ustat_wrapper)
55 llgtr %r3,%r3 # struct ustat *
58 ENTRY(compat_sys_sigpending_wrapper)
59 llgtr %r2,%r2 # compat_old_sigset_t *
60 jg compat_sys_sigpending # branch to system call
62 ENTRY(compat_sys_setrlimit_wrapper)
63 llgfr %r2,%r2 # unsigned int
64 llgtr %r3,%r3 # struct rlimit_emu31 *
65 jg compat_sys_setrlimit # branch to system call
67 ENTRY(compat_sys_old_getrlimit_wrapper)
68 llgfr %r2,%r2 # unsigned int
69 llgtr %r3,%r3 # struct rlimit_emu31 *
70 jg compat_sys_old_getrlimit # branch to system call
72 ENTRY(compat_sys_getrlimit_wrapper)
73 llgfr %r2,%r2 # unsigned int
74 llgtr %r3,%r3 # struct rlimit_emu31 *
75 jg compat_sys_getrlimit # branch to system call
77 ENTRY(compat_sys_gettimeofday_wrapper)
78 llgtr %r2,%r2 # struct timeval_emu31 *
79 llgtr %r3,%r3 # struct timezone *
80 jg compat_sys_gettimeofday # branch to system call
82 ENTRY(compat_sys_settimeofday_wrapper)
83 llgtr %r2,%r2 # struct timeval_emu31 *
84 llgtr %r3,%r3 # struct timezone *
85 jg compat_sys_settimeofday # branch to system call
87 ENTRY(old32_readdir_wrapper)
88 llgfr %r2,%r2 # unsigned int
89 llgtr %r3,%r3 # void *
90 llgfr %r4,%r4 # unsigned int
91 jg compat_sys_old_readdir # branch to system call
93 ENTRY(compat_sys_statfs_wrapper)
94 llgtr %r2,%r2 # char *
95 llgtr %r3,%r3 # struct compat_statfs *
96 jg compat_sys_statfs # branch to system call
98 ENTRY(compat_sys_fstatfs_wrapper)
99 llgfr %r2,%r2 # unsigned int
100 llgtr %r3,%r3 # struct compat_statfs *
101 jg compat_sys_fstatfs # branch to system call
103 ENTRY(compat_sys_socketcall_wrapper)
105 llgtr %r3,%r3 # u32 *
106 jg compat_sys_socketcall # branch to system call
108 ENTRY(compat_sys_newstat_wrapper)
109 llgtr %r2,%r2 # char *
110 llgtr %r3,%r3 # struct stat_emu31 *
111 jg compat_sys_newstat # branch to system call
113 ENTRY(compat_sys_newlstat_wrapper)
114 llgtr %r2,%r2 # char *
115 llgtr %r3,%r3 # struct stat_emu31 *
116 jg compat_sys_newlstat # branch to system call
118 ENTRY(compat_sys_newfstat_wrapper)
119 llgfr %r2,%r2 # unsigned int
120 llgtr %r3,%r3 # struct stat_emu31 *
121 jg compat_sys_newfstat # branch to system call
123 ENTRY(compat_sys_sysinfo_wrapper)
124 llgtr %r2,%r2 # struct sysinfo_emu31 *
125 jg compat_sys_sysinfo # branch to system call
127 ENTRY(compat_sys_adjtimex_wrapper)
128 llgtr %r2,%r2 # struct compat_timex *
129 jg compat_sys_adjtimex # branch to system call
131 ENTRY(sys32_getdents_wrapper)
132 llgfr %r2,%r2 # unsigned int
133 llgtr %r3,%r3 # void *
134 llgfr %r4,%r4 # unsigned int
135 jg compat_sys_getdents # branch to system call
137 ENTRY(compat_sys_select_wrapper)
139 llgtr %r3,%r3 # compat_fd_set *
140 llgtr %r4,%r4 # compat_fd_set *
141 llgtr %r5,%r5 # compat_fd_set *
142 llgtr %r6,%r6 # struct compat_timeval *
143 jg compat_sys_select # branch to system call
145 ENTRY(compat_sys_readv_wrapper)
147 llgtr %r3,%r3 # const struct compat_iovec *
148 llgfr %r4,%r4 # unsigned long
149 jg compat_sys_readv # branch to system call
151 ENTRY(compat_sys_writev_wrapper)
153 llgtr %r3,%r3 # const struct compat_iovec *
154 llgfr %r4,%r4 # unsigned long
155 jg compat_sys_writev # branch to system call
157 ENTRY(compat_sys_nanosleep_wrapper)
158 llgtr %r2,%r2 # struct compat_timespec *
159 llgtr %r3,%r3 # struct compat_timespec *
160 jg compat_sys_nanosleep # branch to system call
162 ENTRY(compat_sys_fcntl64_wrapper)
163 llgfr %r2,%r2 # unsigned int
164 llgfr %r3,%r3 # unsigned int
165 llgfr %r4,%r4 # unsigned long
166 jg compat_sys_fcntl64 # branch to system call
168 ENTRY(sys32_stime_wrapper)
169 llgtr %r2,%r2 # long *
170 jg compat_sys_stime # branch to system call
172 ENTRY(sys32_sched_setaffinity_wrapper)
174 llgfr %r3,%r3 # unsigned int
175 llgtr %r4,%r4 # unsigned long *
176 jg compat_sys_sched_setaffinity
178 ENTRY(sys32_sched_getaffinity_wrapper)
180 llgfr %r3,%r3 # unsigned int
181 llgtr %r4,%r4 # unsigned long *
182 jg compat_sys_sched_getaffinity
184 ENTRY(sys32_clock_settime_wrapper)
185 lgfr %r2,%r2 # clockid_t (int)
186 llgtr %r3,%r3 # struct compat_timespec *
187 jg compat_sys_clock_settime
189 ENTRY(sys32_clock_gettime_wrapper)
190 lgfr %r2,%r2 # clockid_t (int)
191 llgtr %r3,%r3 # struct compat_timespec *
192 jg compat_sys_clock_gettime
194 ENTRY(sys32_clock_getres_wrapper)
195 lgfr %r2,%r2 # clockid_t (int)
196 llgtr %r3,%r3 # struct compat_timespec *
197 jg compat_sys_clock_getres
199 ENTRY(sys32_clock_nanosleep_wrapper)
200 lgfr %r2,%r2 # clockid_t (int)
202 llgtr %r4,%r4 # struct compat_timespec *
203 llgtr %r5,%r5 # struct compat_timespec *
204 jg compat_sys_clock_nanosleep
206 ENTRY(sys32_timer_create_wrapper)
207 lgfr %r2,%r2 # timer_t (int)
208 llgtr %r3,%r3 # struct compat_sigevent *
209 llgtr %r4,%r4 # timer_t *
210 jg compat_sys_timer_create
212 ENTRY(sys32_timer_settime_wrapper)
213 lgfr %r2,%r2 # timer_t (int)
215 llgtr %r4,%r4 # struct compat_itimerspec *
216 llgtr %r5,%r5 # struct compat_itimerspec *
217 jg compat_sys_timer_settime
219 ENTRY(sys32_timer_gettime_wrapper)
220 lgfr %r2,%r2 # timer_t (int)
221 llgtr %r3,%r3 # struct compat_itimerspec *
222 jg compat_sys_timer_gettime
224 ENTRY(sys32_io_setup_wrapper)
225 llgfr %r2,%r2 # unsigned int
226 llgtr %r3,%r3 # u32 *
227 jg compat_sys_io_setup
229 ENTRY(sys32_io_getevents_wrapper)
230 llgfr %r2,%r2 # (aio_context_t) u32
233 llgtr %r5,%r5 # struct io_event *
234 llgtr %r6,%r6 # struct compat_timespec *
235 jg compat_sys_io_getevents
237 ENTRY(sys32_io_submit_wrapper)
238 llgfr %r2,%r2 # (aio_context_t) u32
240 llgtr %r4,%r4 # struct iocb **
241 jg compat_sys_io_submit
243 ENTRY(compat_sys_statfs64_wrapper)
244 llgtr %r2,%r2 # const char *
245 llgfr %r3,%r3 # compat_size_t
246 llgtr %r4,%r4 # struct compat_statfs64 *
247 jg compat_sys_statfs64
249 ENTRY(compat_sys_fstatfs64_wrapper)
250 llgfr %r2,%r2 # unsigned int fd
251 llgfr %r3,%r3 # compat_size_t
252 llgtr %r4,%r4 # struct compat_statfs64 *
253 jg compat_sys_fstatfs64
255 ENTRY(compat_sys_mq_open_wrapper)
256 llgtr %r2,%r2 # const char *
258 llgfr %r4,%r4 # mode_t
259 llgtr %r5,%r5 # struct compat_mq_attr *
260 jg compat_sys_mq_open
262 ENTRY(compat_sys_mq_timedsend_wrapper)
264 llgtr %r3,%r3 # const char *
265 llgfr %r4,%r4 # size_t
266 llgfr %r5,%r5 # unsigned int
267 llgtr %r6,%r6 # const struct compat_timespec *
268 jg compat_sys_mq_timedsend
270 ENTRY(compat_sys_mq_timedreceive_wrapper)
272 llgtr %r3,%r3 # char *
273 llgfr %r4,%r4 # size_t
274 llgtr %r5,%r5 # unsigned int *
275 llgtr %r6,%r6 # const struct compat_timespec *
276 jg compat_sys_mq_timedreceive
278 ENTRY(compat_sys_mq_notify_wrapper)
280 llgtr %r3,%r3 # struct compat_sigevent *
281 jg compat_sys_mq_notify
283 ENTRY(compat_sys_mq_getsetattr_wrapper)
285 llgtr %r3,%r3 # struct compat_mq_attr *
286 llgtr %r4,%r4 # struct compat_mq_attr *
287 jg compat_sys_mq_getsetattr
289 ENTRY(compat_sys_kexec_load_wrapper)
290 llgfr %r2,%r2 # unsigned long
291 llgfr %r3,%r3 # unsigned long
292 llgtr %r4,%r4 # struct kexec_segment *
293 llgfr %r5,%r5 # unsigned long
294 jg compat_sys_kexec_load
296 ENTRY(compat_sys_futimesat_wrapper)
297 llgfr %r2,%r2 # unsigned int
298 llgtr %r3,%r3 # char *
299 llgtr %r4,%r4 # struct timeval *
300 jg compat_sys_futimesat
302 ENTRY(compat_sys_pselect6_wrapper)
304 llgtr %r3,%r3 # fd_set *
305 llgtr %r4,%r4 # fd_set *
306 llgtr %r5,%r5 # fd_set *
307 llgtr %r6,%r6 # struct timespec *
308 llgt %r0,164(%r15) # void *
310 jg compat_sys_pselect6
312 ENTRY(compat_sys_ppoll_wrapper)
313 llgtr %r2,%r2 # struct pollfd *
314 llgfr %r3,%r3 # unsigned int
315 llgtr %r4,%r4 # struct timespec *
316 llgtr %r5,%r5 # const sigset_t *
317 llgfr %r6,%r6 # size_t
320 ENTRY(sys_sync_file_range_wrapper)
322 sllg %r3,%r3,32 # get high word of 64bit loff_t
323 or %r3,%r4 # get low word of 64bit loff_t
324 sllg %r4,%r5,32 # get high word of 64bit loff_t
325 or %r4,%r6 # get low word of 64bit loff_t
326 llgf %r5,164(%r15) # unsigned int
327 jg sys_sync_file_range
329 ENTRY(sys_getcpu_wrapper)
330 llgtr %r2,%r2 # unsigned *
331 llgtr %r3,%r3 # unsigned *
332 llgtr %r4,%r4 # struct getcpu_cache *
335 ENTRY(compat_sys_utimes_wrapper)
336 llgtr %r2,%r2 # char *
337 llgtr %r3,%r3 # struct compat_timeval *
340 ENTRY(compat_sys_utimensat_wrapper)
341 llgfr %r2,%r2 # unsigned int
342 llgtr %r3,%r3 # char *
343 llgtr %r4,%r4 # struct compat_timespec *
345 jg compat_sys_utimensat
347 ENTRY(sys_eventfd_wrapper)
348 llgfr %r2,%r2 # unsigned int
351 ENTRY(sys_fallocate_wrapper)
354 sllg %r4,%r4,32 # get high word of 64bit loff_t
355 lr %r4,%r5 # get low word of 64bit loff_t
356 sllg %r5,%r6,32 # get high word of 64bit loff_t
357 l %r5,164(%r15) # get low word of 64bit loff_t
360 ENTRY(sys_timerfd_create_wrapper)
363 jg sys_timerfd_create
365 ENTRY(sys_eventfd2_wrapper)
366 llgfr %r2,%r2 # unsigned int
370 ENTRY(sys_inotify_init1_wrapper)
374 ENTRY(sys_pipe2_wrapper)
375 llgtr %r2,%r2 # u32 *
377 jg sys_pipe2 # branch to system call
379 ENTRY(sys_dup3_wrapper)
380 llgfr %r2,%r2 # unsigned int
381 llgfr %r3,%r3 # unsigned int
383 jg sys_dup3 # branch to system call
385 ENTRY(sys_epoll_create1_wrapper)
387 jg sys_epoll_create1 # branch to system call
389 ENTRY(sys_tkill_wrapper)
392 jg sys_tkill # branch to system call
394 ENTRY(sys_tgkill_wrapper)
398 jg sys_tgkill # branch to system call
400 ENTRY(compat_sys_keyctl_wrapper)
406 jg compat_sys_keyctl # branch to system call
408 ENTRY(sys_perf_event_open_wrapper)
409 llgtr %r2,%r2 # const struct perf_event_attr *
413 llgfr %r6,%r6 # unsigned long
414 jg sys_perf_event_open # branch to system call
416 ENTRY(sys_clone_wrapper)
417 llgfr %r2,%r2 # unsigned long
418 llgfr %r3,%r3 # unsigned long
419 llgtr %r4,%r4 # int *
420 llgtr %r5,%r5 # int *
421 jg sys_clone # branch to system call
423 ENTRY(sys32_execve_wrapper)
424 llgtr %r2,%r2 # char *
425 llgtr %r3,%r3 # compat_uptr_t *
426 llgtr %r4,%r4 # compat_uptr_t *
427 jg compat_sys_execve # branch to system call
429 ENTRY(sys_fanotify_init_wrapper)
430 llgfr %r2,%r2 # unsigned int
431 llgfr %r3,%r3 # unsigned int
432 jg sys_fanotify_init # branch to system call
434 ENTRY(sys_prlimit64_wrapper)
436 llgfr %r3,%r3 # unsigned int
437 llgtr %r4,%r4 # const struct rlimit64 __user *
438 llgtr %r5,%r5 # struct rlimit64 __user *
439 jg sys_prlimit64 # branch to system call
441 ENTRY(sys_name_to_handle_at_wrapper)
443 llgtr %r3,%r3 # const char __user *
444 llgtr %r4,%r4 # struct file_handle __user *
445 llgtr %r5,%r5 # int __user *
447 jg sys_name_to_handle_at
449 ENTRY(compat_sys_clock_adjtime_wrapper)
450 lgfr %r2,%r2 # clockid_t (int)
451 llgtr %r3,%r3 # struct compat_timex __user *
452 jg compat_sys_clock_adjtime
454 ENTRY(sys_syncfs_wrapper)
458 ENTRY(sys_setns_wrapper)
463 ENTRY(compat_sys_process_vm_readv_wrapper)
464 lgfr %r2,%r2 # compat_pid_t
465 llgtr %r3,%r3 # struct compat_iovec __user *
466 llgfr %r4,%r4 # unsigned long
467 llgtr %r5,%r5 # struct compat_iovec __user *
468 llgfr %r6,%r6 # unsigned long
469 llgf %r0,164(%r15) # unsigned long
471 jg compat_sys_process_vm_readv
473 ENTRY(compat_sys_process_vm_writev_wrapper)
474 lgfr %r2,%r2 # compat_pid_t
475 llgtr %r3,%r3 # struct compat_iovec __user *
476 llgfr %r4,%r4 # unsigned long
477 llgtr %r5,%r5 # struct compat_iovec __user *
478 llgfr %r6,%r6 # unsigned long
479 llgf %r0,164(%r15) # unsigned long
481 jg compat_sys_process_vm_writev
483 ENTRY(sys_s390_runtime_instr_wrapper)
486 jg sys_s390_runtime_instr
488 ENTRY(sys_kcmp_wrapper)
492 llgfr %r5,%r5 # unsigned long
493 llgfr %r6,%r6 # unsigned long
496 ENTRY(sys_finit_module_wrapper)
498 llgtr %r3,%r3 # const char __user *
502 ENTRY(sys_sched_setattr_wrapper)
504 llgtr %r3,%r3 # struct sched_attr __user *
507 ENTRY(sys_sched_getattr_wrapper)
509 llgtr %r3,%r3 # const char __user *
510 llgfr %r4,%r4 # unsigned int