Index: sysdeps/nacl/irt_syscalls.c |
diff --git a/sysdeps/nacl/irt_syscalls.c b/sysdeps/nacl/irt_syscalls.c |
index 3c141671b9cc6a7d6698de1c840ec97eb1e993fb..3706927dcea20d91664b38092ea9cd58e48cdb05 100644 |
--- a/sysdeps/nacl/irt_syscalls.c |
+++ b/sysdeps/nacl/irt_syscalls.c |
@@ -1,5 +1,6 @@ |
#include <string.h> |
#include <sys/stat.h> |
+#include <time.h> |
#include <nacl_stat.h> |
#include <nacl_syscalls.h> |
#define stat nacl_abi_stat |
@@ -258,6 +259,16 @@ static int nacl_irt_open_resource (const char *pathname, int *newfd) { |
newfd); |
} |
+static int nacl_irt_clock_getres(clockid_t clk_id, |
+ struct timespec *res) { |
+ return -NACL_SYSCALL (clock_getres) (clk_id, res); |
+} |
+ |
+static int nacl_irt_clock_gettime(clockid_t clk_id, |
+ struct timespec *tp) { |
+ return -NACL_SYSCALL (clock_gettime) (clk_id, tp); |
+} |
+ |
static size_t no_interface (const char *interface_ident, |
void *table, size_t tablesize) { |
return 0; |
@@ -319,6 +330,9 @@ void *(*__nacl_irt_tls_get) (void); |
int (*__nacl_irt_open_resource) (const char* file, int *fd); |
+int (*__nacl_irt_clock_getres) (clockid_t clk_id, struct timespec *res); |
+int (*__nacl_irt_clock_gettime) (clockid_t clk_id, struct timespec *tp); |
+ |
void |
init_irt_table (void) |
{ |
@@ -333,6 +347,7 @@ init_irt_table (void) |
struct nacl_irt_cond nacl_irt_cond; |
struct nacl_irt_tls nacl_irt_tls; |
struct nacl_irt_resource_open nacl_irt_resource_open; |
+ struct nacl_irt_clock nacl_irt_clock; |
} u; |
if (__nacl_irt_query && |
@@ -515,6 +530,19 @@ init_irt_table (void) |
else |
__nacl_irt_open_resource = nacl_irt_open_as_resource; |
+ if (__nacl_irt_query && |
+ __nacl_irt_query (NACL_IRT_CLOCK_v0_1, &u.nacl_irt_clock, |
+ sizeof(u.nacl_irt_clock)) == sizeof(u.nacl_irt_clock)) |
+ { |
+ __nacl_irt_clock_getres = u.nacl_irt_clock.getres; |
+ __nacl_irt_clock_gettime = u.nacl_irt_clock.gettime; |
+ } |
+ else |
+ { |
+ __nacl_irt_clock_getres = nacl_irt_clock_getres; |
+ __nacl_irt_clock_gettime = nacl_irt_clock_gettime; |
+ } |
+ |
if (!__nacl_irt_query) |
__nacl_irt_query = no_interface; |
} |