• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <time.h>
2 #include "syscall.h"
3 #ifndef __LITEOS__
4 #include <errno.h>
5 #include <stdint.h>
6 #include "atomic.h"
7 
8 #ifdef VDSO_TIME_SYM
9 
10 static void *volatile vdso_time;
11 
time_init(time_t * t)12 static time_t time_init(time_t *t)
13 {
14 	__get_vdso_info();
15 	void *p = __get_vdso_addr(VDSO_TIME_VER, VDSO_TIME_SYM);
16 	time_t (*f)(time_t *) =
17 		(time_t (*)(time_t *))p;
18 	a_cas_p(&vdso_time, (void *)time_init, p);
19 	return f ? f(t) : -ENOSYS;
20 }
21 
22 static void *volatile vdso_time = (void *)time_init;
23 
24 #endif
25 #endif
26 
time(time_t * t)27 time_t time(time_t *t)
28 {
29 #if defined(VDSO_TIME_SYM) && (!defined(__LITEOS__))
30 	time_t (*f)(time_t *) =
31 	(time_t (*)(time_t *))vdso_time;
32     if (f) {
33 		return f(t);
34 	}
35 #endif
36 
37 	struct timespec ts;
38 	__clock_gettime(CLOCK_REALTIME, &ts);
39 	if (t) *t = ts.tv_sec;
40 	return ts.tv_sec;
41 }
42