aboutsummaryrefslogtreecommitdiff
path: root/pk
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@eecs.berkeley.edu>2013-11-13 14:38:09 -0800
committerAndrew Waterman <waterman@eecs.berkeley.edu>2013-11-13 14:38:18 -0800
commit6c0a4423c5b05221fc1c23b838316ffa88c0858d (patch)
treee4eae49c77ac98ef5db99280d99eeca5cceec995 /pk
parent43c14ea417d21968d918447662a1c4722a3887d2 (diff)
downloadriscv-pk-6c0a4423c5b05221fc1c23b838316ffa88c0858d.zip
riscv-pk-6c0a4423c5b05221fc1c23b838316ffa88c0858d.tar.gz
riscv-pk-6c0a4423c5b05221fc1c23b838316ffa88c0858d.tar.bz2
Add gettimeofday syscall
Diffstat (limited to 'pk')
-rw-r--r--pk/syscall.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/pk/syscall.c b/pk/syscall.c
index 1297ffa..4180eb2 100644
--- a/pk/syscall.c
+++ b/pk/syscall.c
@@ -182,6 +182,17 @@ sysret_t sys_time(long* loc)
return (sysret_t){t, 0};
}
+sysret_t sys_gettimeofday(long* loc)
+{
+ populate_mapping(loc, 2*sizeof(long), PROT_WRITE);
+
+ uintptr_t t = rdcycle(), hz = 1000000000;
+ loc[0] = t/hz;
+ loc[1] = (t % hz) / (hz / 1000000);
+
+ return (sysret_t){0, 0};
+}
+
sysret_t sys_writev(int fd, const void* iov, int cnt)
{
long get(int i) { return current.elf64 ? ((long*)iov)[i] : ((int*)iov)[i]; }
@@ -224,6 +235,7 @@ sysret_t syscall(long a0, long a1, long a2, long a3, long a4, long a5, long n)
[SYS_mremap] = sys_mremap,
[SYS_rt_sigaction] = sys_rt_sigaction,
[SYS_time] = sys_time,
+ [SYS_gettimeofday] = sys_gettimeofday,
[SYS_writev] = sys_writev,
};