Index: uspace/lib/c/generic/time.c
===================================================================
--- uspace/lib/c/generic/time.c	(revision 02f547fd71bd6bd03883ccf06c30c6f61d074208)
+++ uspace/lib/c/generic/time.c	(revision cc36562b0e0fa0ec04ebc7853e4f55c5ee478d3c)
@@ -50,4 +50,5 @@
 #include <loc.h>
 #include <device/clock_dev.h>
+#include <stats.h>
 
 #define ASCTIME_BUF_LEN  26
@@ -70,11 +71,30 @@
 static async_sess_t *clock_conn = NULL;
 
-/** Return processor time used by the program.
- *
- * @return -1  The processor time used is not available in this implementation.
+/**
+ * Get CPU time used since the process invocation.
+ *
+ * @return Consumed microseconds by this process or -1 if not available.
  */
 clock_t clock(void)
 {
-	return (clock_t) -1;
+	static_assert(CLOCKS_PER_SEC == 1000000);
+
+	size_t count;
+	stats_cpu_t *cpu_stats = stats_get_cpus(&count);
+	if (!cpu_stats)
+		return (clock_t) -1;
+
+	clock_t total_usecs = -1;
+	if (cpu_stats) {
+		stats_task_t *task_stats = stats_get_task(task_get_id());
+		if (task_stats) {
+			total_usecs = (clock_t) (task_stats->kcycles +
+			    task_stats->ucycles) / cpu_stats->frequency_mhz;
+			free(task_stats);
+		}
+		free(cpu_stats);
+	}
+
+	return total_usecs;
 }
 
Index: uspace/lib/c/include/time.h
===================================================================
--- uspace/lib/c/include/time.h	(revision 02f547fd71bd6bd03883ccf06c30c6f61d074208)
+++ uspace/lib/c/include/time.h	(revision cc36562b0e0fa0ec04ebc7853e4f55c5ee478d3c)
@@ -45,5 +45,5 @@
 #include <_bits/NULL.h>
 
-#define CLOCKS_PER_SEC	((clock_t) 1)
+#define CLOCKS_PER_SEC	((clock_t) 1000000)
 
 #define TIME_UTC	1
Index: uspace/lib/posix/include/posix/time.h
===================================================================
--- uspace/lib/posix/include/posix/time.h	(revision 02f547fd71bd6bd03883ccf06c30c6f61d074208)
+++ uspace/lib/posix/include/posix/time.h	(revision cc36562b0e0fa0ec04ebc7853e4f55c5ee478d3c)
@@ -42,7 +42,4 @@
 
 #include "libc/time.h"
-
-#undef CLOCKS_PER_SEC
-#define CLOCKS_PER_SEC (1000000L)
 
 #ifndef __locale_t_defined
@@ -102,7 +99,4 @@
     const struct timespec *rqtp, struct timespec *rmtp);
 
-/* CPU Time */
-extern clock_t clock(void);
-
 #endif  // POSIX_TIME_H_
 
Index: uspace/lib/posix/src/time.c
===================================================================
--- uspace/lib/posix/src/time.c	(revision 02f547fd71bd6bd03883ccf06c30c6f61d074208)
+++ uspace/lib/posix/src/time.c	(revision cc36562b0e0fa0ec04ebc7853e4f55c5ee478d3c)
@@ -49,5 +49,4 @@
 #include "libc/malloc.h"
 #include "libc/task.h"
-#include "libc/stats.h"
 #include "libc/stddef.h"
 #include "libc/time.h"
@@ -311,23 +310,4 @@
 }
 
-/**
- * Get CPU time used since the process invocation.
- *
- * @return Consumed CPU cycles by this process or -1 if not available.
- */
-clock_t clock(void)
-{
-	clock_t total_cycles = -1;
-	stats_task_t *task_stats = stats_get_task(task_get_id());
-	if (task_stats) {
-		total_cycles = (clock_t) (task_stats->kcycles +
-		    task_stats->ucycles);
-		free(task_stats);
-		task_stats = 0;
-	}
-
-	return total_cycles;
-}
-
 int gettimeofday(struct timeval *tv, void *tz)
 {
