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)12static 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)27time_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