Merge branches 'pm-cpuidle', 'pm-sleep' and 'pm-powercap'
[linux-block.git] / arch / s390 / kernel / vdso64 / vdso_user_wrapper.S
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 #define WRAPPER_FRAME_SIZE (STACK_FRAME_OVERHEAD+8)
10
11 /*
12  * Older glibc version called vdso without allocating a stackframe. This wrapper
13  * is just used to allocate a stackframe. See
14  * https://sourceware.org/git/?p=glibc.git;a=commit;h=478593e6374f3818da39332260dc453cb19cfa1e
15  * for details.
16  */
17 .macro vdso_func func
18         .globl __kernel_\func
19         .type  __kernel_\func,@function
20         __ALIGN
21 __kernel_\func:
22         CFI_STARTPROC
23         aghi    %r15,-WRAPPER_FRAME_SIZE
24         CFI_DEF_CFA_OFFSET (STACK_FRAME_OVERHEAD + WRAPPER_FRAME_SIZE)
25         CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
26         stg     %r14,STACK_FRAME_OVERHEAD(%r15)
27         CFI_REL_OFFSET 14, STACK_FRAME_OVERHEAD
28         brasl   %r14,__s390_vdso_\func
29         lg      %r14,STACK_FRAME_OVERHEAD(%r15)
30         CFI_RESTORE 14
31         aghi    %r15,WRAPPER_FRAME_SIZE
32         CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
33         CFI_RESTORE 15
34         br      %r14
35         CFI_ENDPROC
36         .size   __kernel_\func,.-__kernel_\func
37 .endm
38
39 vdso_func gettimeofday
40 vdso_func clock_getres
41 vdso_func clock_gettime
42 vdso_func getcpu
43
44 .macro vdso_syscall func,syscall
45         .globl __kernel_\func
46         .type  __kernel_\func,@function
47         __ALIGN
48 __kernel_\func:
49         CFI_STARTPROC
50         svc     \syscall
51         /* Make sure we notice when a syscall returns, which shouldn't happen */
52         .word   0
53         CFI_ENDPROC
54         .size   __kernel_\func,.-__kernel_\func
55 .endm
56
57 vdso_syscall restart_syscall,__NR_restart_syscall
58 vdso_syscall sigreturn,__NR_sigreturn
59 vdso_syscall rt_sigreturn,__NR_rt_sigreturn