xref: /openbmc/linux/arch/s390/kernel/vdso64/vdso_user_wrapper.S (revision e0d77d0f38aa60ca61b3ce6e60d64fad2aa0853d)
14bff8cb5SSven Schnelle/* SPDX-License-Identifier: GPL-2.0 */
2c2272b2dSHeiko Carstens#include <linux/linkage.h>
34bff8cb5SSven Schnelle#include <asm/vdso.h>
44bff8cb5SSven Schnelle#include <asm/unistd.h>
54bff8cb5SSven Schnelle#include <asm/asm-offsets.h>
64bff8cb5SSven Schnelle#include <asm/dwarf.h>
74bff8cb5SSven Schnelle#include <asm/ptrace.h>
84bff8cb5SSven Schnelle
94bff8cb5SSven Schnelle#define WRAPPER_FRAME_SIZE (STACK_FRAME_OVERHEAD+8)
104bff8cb5SSven Schnelle
114bff8cb5SSven Schnelle/*
124bff8cb5SSven Schnelle * Older glibc version called vdso without allocating a stackframe. This wrapper
134bff8cb5SSven Schnelle * is just used to allocate a stackframe. See
144bff8cb5SSven Schnelle * https://sourceware.org/git/?p=glibc.git;a=commit;h=478593e6374f3818da39332260dc453cb19cfa1e
154bff8cb5SSven Schnelle * for details.
164bff8cb5SSven Schnelle */
174bff8cb5SSven Schnelle.macro vdso_func func
184bff8cb5SSven Schnelle	.globl __kernel_\func
194bff8cb5SSven Schnelle	.type  __kernel_\func,@function
20c2272b2dSHeiko Carstens	__ALIGN
214bff8cb5SSven Schnelle__kernel_\func:
224bff8cb5SSven Schnelle	CFI_STARTPROC
234bff8cb5SSven Schnelle	aghi	%r15,-WRAPPER_FRAME_SIZE
244bff8cb5SSven Schnelle	CFI_DEF_CFA_OFFSET (STACK_FRAME_OVERHEAD + WRAPPER_FRAME_SIZE)
254bff8cb5SSven Schnelle	CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
264bff8cb5SSven Schnelle	stg	%r14,STACK_FRAME_OVERHEAD(%r15)
27*53163e2aSJens Remus	CFI_REL_OFFSET 14, STACK_FRAME_OVERHEAD
284bff8cb5SSven Schnelle	brasl	%r14,__s390_vdso_\func
294bff8cb5SSven Schnelle	lg	%r14,STACK_FRAME_OVERHEAD(%r15)
30*53163e2aSJens Remus	CFI_RESTORE 14
314bff8cb5SSven Schnelle	aghi	%r15,WRAPPER_FRAME_SIZE
324bff8cb5SSven Schnelle	CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
334bff8cb5SSven Schnelle	CFI_RESTORE 15
344bff8cb5SSven Schnelle	br	%r14
354bff8cb5SSven Schnelle	CFI_ENDPROC
364bff8cb5SSven Schnelle	.size	__kernel_\func,.-__kernel_\func
374bff8cb5SSven Schnelle.endm
384bff8cb5SSven Schnelle
394bff8cb5SSven Schnellevdso_func gettimeofday
404bff8cb5SSven Schnellevdso_func clock_getres
414bff8cb5SSven Schnellevdso_func clock_gettime
4280f06306SHeiko Carstensvdso_func getcpu
43686341f2SSven Schnelle
44686341f2SSven Schnelle.macro vdso_syscall func,syscall
45686341f2SSven Schnelle	.globl __kernel_\func
46686341f2SSven Schnelle	.type  __kernel_\func,@function
47c2272b2dSHeiko Carstens	__ALIGN
48686341f2SSven Schnelle__kernel_\func:
49686341f2SSven Schnelle	CFI_STARTPROC
50686341f2SSven Schnelle	svc	\syscall
51686341f2SSven Schnelle	/* Make sure we notice when a syscall returns, which shouldn't happen */
52686341f2SSven Schnelle	.word	0
53686341f2SSven Schnelle	CFI_ENDPROC
54686341f2SSven Schnelle	.size	__kernel_\func,.-__kernel_\func
55686341f2SSven Schnelle.endm
56686341f2SSven Schnelle
57686341f2SSven Schnellevdso_syscall restart_syscall,__NR_restart_syscall
58686341f2SSven Schnellevdso_syscall sigreturn,__NR_sigreturn
59686341f2SSven Schnellevdso_syscall rt_sigreturn,__NR_rt_sigreturn
60