Update copyright notices with scripts/update-copyrights
[jlayton/glibc.git] / sysdeps / unix / sysv / linux / powerpc / time.c
1 /* time system call for Linux/PowerPC.
2    Copyright (C) 2013-2014 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <http://www.gnu.org/licenses/>.  */
18
19 #ifdef SHARED
20
21 # include <time.h>
22 # include <sysdep.h>
23 # include <dl-vdso.h>
24 # include <bits/libc-vdso.h>
25 # include <dl-machine.h>
26
27 void *time_ifunc (void) asm ("time");
28
29 static time_t
30 time_syscall (time_t *t)
31 {
32   struct timeval tv;
33   time_t result;
34
35   if (INLINE_VSYSCALL (gettimeofday, 2, &tv, NULL) < 0)
36     result = (time_t) -1;
37   else
38     result = (time_t) tv.tv_sec;
39
40   if (t != NULL)
41     *t = result;
42   return result;
43 }
44
45 void *
46 time_ifunc (void)
47 {
48   /* If the vDSO is not available we fall back to the syscall.  */
49   return (__vdso_time ? VDSO_IFUNC_RET (__vdso_time)
50           : time_syscall);
51 }
52 asm (".type time, %gnu_indirect_function");
53
54 /* This is doing "libc_hidden_def (time)" but the compiler won't
55  * let us do it in C because it doesn't know we're defining time
56  * here in this file.  */
57 asm (".globl __GI_time\n"
58      "__GI_time = time");
59
60 #else
61
62 #include <sysdeps/posix/time.c>
63
64 #endif