1/* SPDX-License-Identifier: GPL-2.0 */ 2#include <linux/linkage.h> 3#include <asm/vdso.h> 4#include <asm/unistd.h> 5#include <asm/asm-offsets.h> 6#include <asm/dwarf.h> 7#include <asm/ptrace.h> 8 9/* 10 * Older glibc version called vdso without allocating a stackframe. This wrapper 11 * is just used to allocate a stackframe. See 12 * https://sourceware.org/git/?p=glibc.git;a=commit;h=478593e6374f3818da39332260dc453cb19cfa1e 13 * for details. 14 */ 15.macro vdso_func func 16SYM_FUNC_START(__kernel_\func) 17 CFI_STARTPROC 18 aghi %r15,-STACK_FRAME_VDSO_OVERHEAD 19 CFI_DEF_CFA_OFFSET (STACK_FRAME_USER_OVERHEAD + STACK_FRAME_VDSO_OVERHEAD) 20 CFI_VAL_OFFSET 15,-STACK_FRAME_USER_OVERHEAD 21 stg %r14,__SFVDSO_RETURN_ADDRESS(%r15) 22 CFI_REL_OFFSET 14,__SFVDSO_RETURN_ADDRESS 23 xc __SFUSER_BACKCHAIN(8,%r15),__SFUSER_BACKCHAIN(%r15) 24 brasl %r14,__s390_vdso_\func 25 lg %r14,__SFVDSO_RETURN_ADDRESS(%r15) 26 CFI_RESTORE 14 27 aghi %r15,STACK_FRAME_VDSO_OVERHEAD 28 CFI_DEF_CFA_OFFSET STACK_FRAME_USER_OVERHEAD 29 CFI_RESTORE 15 30 br %r14 31 CFI_ENDPROC 32SYM_FUNC_END(__kernel_\func) 33.endm 34 35vdso_func gettimeofday 36vdso_func clock_getres 37vdso_func clock_gettime 38vdso_func getcpu 39 40.macro vdso_syscall func,syscall 41SYM_FUNC_START(__kernel_\func) 42 CFI_STARTPROC 43 svc \syscall 44 /* Make sure we notice when a syscall returns, which shouldn't happen */ 45 .word 0 46 CFI_ENDPROC 47SYM_FUNC_END(__kernel_\func) 48.endm 49 50vdso_syscall restart_syscall,__NR_restart_syscall 51vdso_syscall sigreturn,__NR_sigreturn 52vdso_syscall rt_sigreturn,__NR_rt_sigreturn 53