Commit | Line | Data |
---|---|---|
4bff8cb5 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
c2272b2d | 2 | #include <linux/linkage.h> |
4bff8cb5 SS |
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 | ||
4bff8cb5 SS |
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 | |
16 | .globl __kernel_\func | |
17 | .type __kernel_\func,@function | |
c2272b2d | 18 | __ALIGN |
4bff8cb5 SS |
19 | __kernel_\func: |
20 | CFI_STARTPROC | |
be72ea09 HC |
21 | aghi %r15,-STACK_FRAME_VDSO_OVERHEAD |
22 | CFI_DEF_CFA_OFFSET (STACK_FRAME_USER_OVERHEAD + STACK_FRAME_VDSO_OVERHEAD) | |
23 | CFI_VAL_OFFSET 15,-STACK_FRAME_USER_OVERHEAD | |
24 | stg %r14,__SFVDSO_RETURN_ADDRESS(%r15) | |
25 | CFI_REL_OFFSET 14,__SFVDSO_RETURN_ADDRESS | |
62b672c4 | 26 | xc __SFUSER_BACKCHAIN(8,%r15),__SFUSER_BACKCHAIN(%r15) |
4bff8cb5 | 27 | brasl %r14,__s390_vdso_\func |
be72ea09 | 28 | lg %r14,__SFVDSO_RETURN_ADDRESS(%r15) |
b961ec10 | 29 | CFI_RESTORE 14 |
be72ea09 HC |
30 | aghi %r15,STACK_FRAME_VDSO_OVERHEAD |
31 | CFI_DEF_CFA_OFFSET STACK_FRAME_USER_OVERHEAD | |
4bff8cb5 SS |
32 | CFI_RESTORE 15 |
33 | br %r14 | |
34 | CFI_ENDPROC | |
35 | .size __kernel_\func,.-__kernel_\func | |
36 | .endm | |
37 | ||
38 | vdso_func gettimeofday | |
39 | vdso_func clock_getres | |
40 | vdso_func clock_gettime | |
80f06306 | 41 | vdso_func getcpu |
686341f2 SS |
42 | |
43 | .macro vdso_syscall func,syscall | |
44 | .globl __kernel_\func | |
45 | .type __kernel_\func,@function | |
c2272b2d | 46 | __ALIGN |
686341f2 SS |
47 | __kernel_\func: |
48 | CFI_STARTPROC | |
49 | svc \syscall | |
50 | /* Make sure we notice when a syscall returns, which shouldn't happen */ | |
51 | .word 0 | |
52 | CFI_ENDPROC | |
53 | .size __kernel_\func,.-__kernel_\func | |
54 | .endm | |
55 | ||
56 | vdso_syscall restart_syscall,__NR_restart_syscall | |
57 | vdso_syscall sigreturn,__NR_sigreturn | |
58 | vdso_syscall rt_sigreturn,__NR_rt_sigreturn |