diff --git a/src/header/time/mod.rs b/src/header/time/mod.rs
index cebe2ac5121e62e36988567068d5e5824df19a50..f839912302d45b71e17096befb01a20487a8124c 100644
--- a/src/header/time/mod.rs
+++ b/src/header/time/mod.rs
@@ -198,9 +198,9 @@ pub extern "C" fn clock() -> clock_t {
     }
 }
 
-// #[no_mangle]
-pub extern "C" fn clock_getres(clock_id: clockid_t, res: *mut timespec) -> c_int {
-    unimplemented!();
+#[no_mangle]
+pub extern "C" fn clock_getres(clock_id: clockid_t, tp: *mut timespec) -> c_int {
+    Sys::clock_getres(clock_id, tp)
 }
 
 #[no_mangle]
@@ -208,9 +208,9 @@ pub extern "C" fn clock_gettime(clock_id: clockid_t, tp: *mut timespec) -> c_int
     Sys::clock_gettime(clock_id, tp)
 }
 
-// #[no_mangle]
+#[no_mangle]
 pub extern "C" fn clock_settime(clock_id: clockid_t, tp: *const timespec) -> c_int {
-    unimplemented!();
+    Sys::clock_settime(clock_id, tp)
 }
 
 #[no_mangle]
diff --git a/src/platform/linux/mod.rs b/src/platform/linux/mod.rs
index 722f238366279cea95fb9da0e2f37c79a00111a7..0cb325a867cfcc9092175b4ef1925eaee2d5b5e0 100644
--- a/src/platform/linux/mod.rs
+++ b/src/platform/linux/mod.rs
@@ -106,10 +106,18 @@ impl Pal for Sys {
         }) as c_int
     }
 
+    fn clock_getres(clk_id: clockid_t, tp: *mut timespec) -> c_int {
+        e(unsafe { syscall!(CLOCK_GETRES, clk_id, tp) }) as c_int
+    }
+
     fn clock_gettime(clk_id: clockid_t, tp: *mut timespec) -> c_int {
         e(unsafe { syscall!(CLOCK_GETTIME, clk_id, tp) }) as c_int
     }
 
+    fn clock_settime(clk_id: clockid_t, tp: *const timespec) -> c_int {
+        e(unsafe { syscall!(CLOCK_SETTIME, clk_id, tp) }) as c_int
+    }
+
     fn close(fildes: c_int) -> c_int {
         e(unsafe { syscall!(CLOSE, fildes) }) as c_int
     }
diff --git a/src/platform/pal/mod.rs b/src/platform/pal/mod.rs
index c6bdc770a36d327a4b49d7abffcb45f940aecdd6..02726debd456ea6a276e005a71709e80407e2563 100644
--- a/src/platform/pal/mod.rs
+++ b/src/platform/pal/mod.rs
@@ -35,8 +35,12 @@ pub trait Pal {
 
     fn chown(path: &CStr, owner: uid_t, group: gid_t) -> c_int;
 
+    fn clock_getres(clk_id: clockid_t, tp: *mut timespec) -> c_int;
+
     fn clock_gettime(clk_id: clockid_t, tp: *mut timespec) -> c_int;
 
+    fn clock_settime(clk_id: clockid_t, tp: *const timespec) -> c_int;
+
     fn close(fildes: c_int) -> c_int;
 
     fn dup(fildes: c_int) -> c_int;
diff --git a/src/platform/redox/mod.rs b/src/platform/redox/mod.rs
index decf4fd350f2f3721f18c1e582cd65f8d84bf168..4b4f0f0e7de5ab38dd0e630c0b399bfdcdc1569c 100644
--- a/src/platform/redox/mod.rs
+++ b/src/platform/redox/mod.rs
@@ -184,6 +184,12 @@ impl Pal for Sys {
         }
     }
 
+    fn clock_getres(clk_id: clockid_t, tp: *mut timespec) -> c_int {
+        // TODO
+        unsafe { errno = ENOSYS };
+        -1
+    }
+
     fn clock_gettime(clk_id: clockid_t, tp: *mut timespec) -> c_int {
         let mut redox_tp = unsafe { redox_timespec::from(&*tp) };
         match e(syscall::clock_gettime(clk_id as usize, &mut redox_tp)) as c_int {
@@ -198,6 +204,12 @@ impl Pal for Sys {
         }
     }
 
+    fn clock_settime(clk_id: clockid_t, tp: *const timespec) -> c_int {
+        // TODO
+        unsafe { errno = ENOSYS };
+        -1
+    }
+
     fn close(fd: c_int) -> c_int {
         e(syscall::close(fd as usize)) as c_int
     }