+diff --git a/src/time/clock_gettime.c b/src/time/clock_gettime.c
+index 1572de0..dba99ff 100644
+--- a/src/time/clock_gettime.c
++++ b/src/time/clock_gettime.c
+@@ -26,13 +26,23 @@ void *__vdsosym(const char *, const char *);
+ int __clock_gettime(clockid_t clk, struct timespec *ts)
+ {
+ #ifdef VDSO_CGT_SYM
++ int ret;
+ static int (*volatile cgt)(clockid_t, struct timespec *);
+ if (!cgt) {
+ void *f = __vdsosym(VDSO_CGT_VER, VDSO_CGT_SYM);
+ if (!f) f = (void *)sc_clock_gettime;
+ a_cas_p(&cgt, 0, f);
+ }
+- return cgt(clk, ts);
++ ret = cgt(clk, ts);
++
++ /*
++ * mips in linux kernel 4.4.0 returns -ENOSYS if it can not
++ * handle the syscall in vdso, the original syscall should be
++ * called by the libc in such a case.
++ */
++ if (ret == -ENOSYS)
++ return sc_clock_gettime(clk, ts);
++ return ret;
+ #else
+ return sc_clock_gettime(clk, ts);
+ #endif