Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #include <asm/vdso.h>
0003 #include <asm/unistd.h>
0004 #include <asm/asm-offsets.h>
0005 #include <asm/dwarf.h>
0006 #include <asm/ptrace.h>
0007 
0008 #define WRAPPER_FRAME_SIZE (STACK_FRAME_OVERHEAD+8)
0009 
0010 /*
0011  * Older glibc version called vdso without allocating a stackframe. This wrapper
0012  * is just used to allocate a stackframe. See
0013  * https://sourceware.org/git/?p=glibc.git;a=commit;h=478593e6374f3818da39332260dc453cb19cfa1e
0014  * for details.
0015  */
0016 .macro vdso_func func
0017     .globl __kernel_\func
0018     .type  __kernel_\func,@function
0019     .align 8
0020 __kernel_\func:
0021     CFI_STARTPROC
0022     aghi    %r15,-WRAPPER_FRAME_SIZE
0023     CFI_DEF_CFA_OFFSET (STACK_FRAME_OVERHEAD + WRAPPER_FRAME_SIZE)
0024     CFI_VAL_OFFSET 15, -STACK_FRAME_OVERHEAD
0025     stg %r14,STACK_FRAME_OVERHEAD(%r15)
0026     brasl   %r14,__s390_vdso_\func
0027     lg  %r14,STACK_FRAME_OVERHEAD(%r15)
0028     aghi    %r15,WRAPPER_FRAME_SIZE
0029     CFI_DEF_CFA_OFFSET STACK_FRAME_OVERHEAD
0030     CFI_RESTORE 15
0031     br  %r14
0032     CFI_ENDPROC
0033     .size   __kernel_\func,.-__kernel_\func
0034 .endm
0035 
0036 vdso_func gettimeofday
0037 vdso_func clock_getres
0038 vdso_func clock_gettime
0039 vdso_func getcpu
0040 
0041 .macro vdso_syscall func,syscall
0042     .globl __kernel_\func
0043     .type  __kernel_\func,@function
0044     .align 8
0045 __kernel_\func:
0046     CFI_STARTPROC
0047     svc \syscall
0048     /* Make sure we notice when a syscall returns, which shouldn't happen */
0049     .word   0
0050     CFI_ENDPROC
0051     .size   __kernel_\func,.-__kernel_\func
0052 .endm
0053 
0054 vdso_syscall restart_syscall,__NR_restart_syscall
0055 vdso_syscall sigreturn,__NR_sigreturn
0056 vdso_syscall rt_sigreturn,__NR_rt_sigreturn