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