~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/x86/um/vdso/um_vdso.c

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0-only
  2 /*
  3  * Copyright (C) 2011 Richard Weinberger <richrd@nod.at>
  4  *
  5  * This vDSO turns all calls into a syscall so that UML can trap them.
  6  */
  7 
  8 
  9 /* Disable profiling for userspace code */
 10 #define DISABLE_BRANCH_PROFILING
 11 
 12 #include <linux/time.h>
 13 #include <linux/getcpu.h>
 14 #include <asm/unistd.h>
 15 
 16 /* workaround for -Wmissing-prototypes warnings */
 17 int __vdso_clock_gettime(clockid_t clock, struct __kernel_old_timespec *ts);
 18 int __vdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz);
 19 __kernel_old_time_t __vdso_time(__kernel_old_time_t *t);
 20 long __vdso_getcpu(unsigned int *cpu, unsigned int *node, struct getcpu_cache *unused);
 21 
 22 int __vdso_clock_gettime(clockid_t clock, struct __kernel_old_timespec *ts)
 23 {
 24         long ret;
 25 
 26         asm("syscall"
 27                 : "=a" (ret)
 28                 : "" (__NR_clock_gettime), "D" (clock), "S" (ts)
 29                 : "rcx", "r11", "memory");
 30 
 31         return ret;
 32 }
 33 int clock_gettime(clockid_t, struct __kernel_old_timespec *)
 34         __attribute__((weak, alias("__vdso_clock_gettime")));
 35 
 36 int __vdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz)
 37 {
 38         long ret;
 39 
 40         asm("syscall"
 41                 : "=a" (ret)
 42                 : "" (__NR_gettimeofday), "D" (tv), "S" (tz)
 43                 : "rcx", "r11", "memory");
 44 
 45         return ret;
 46 }
 47 int gettimeofday(struct __kernel_old_timeval *, struct timezone *)
 48         __attribute__((weak, alias("__vdso_gettimeofday")));
 49 
 50 __kernel_old_time_t __vdso_time(__kernel_old_time_t *t)
 51 {
 52         long secs;
 53 
 54         asm volatile("syscall"
 55                 : "=a" (secs)
 56                 : "" (__NR_time), "D" (t) : "cc", "r11", "cx", "memory");
 57 
 58         return secs;
 59 }
 60 __kernel_old_time_t time(__kernel_old_time_t *t) __attribute__((weak, alias("__vdso_time")));
 61 
 62 long
 63 __vdso_getcpu(unsigned int *cpu, unsigned int *node, struct getcpu_cache *unused)
 64 {
 65         /*
 66          * UML does not support SMP, we can cheat here. :)
 67          */
 68 
 69         if (cpu)
 70                 *cpu = 0;
 71         if (node)
 72                 *node = 0;
 73 
 74         return 0;
 75 }
 76 
 77 long getcpu(unsigned int *cpu, unsigned int *node, struct getcpu_cache *tcache)
 78         __attribute__((weak, alias("__vdso_getcpu")));
 79 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php