summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael LeBeane <Michael.Lebeane@amd.com>2016-02-13 12:33:07 -0500
committerMichael LeBeane <Michael.Lebeane@amd.com>2016-02-13 12:33:07 -0500
commit8d923c7380f1d5a1418c1d4b71cd4cfc63429448 (patch)
tree285c24352dcd930758c4b8eb5d05966213b4fff8
parentc6cede244b431c167ac0213d89ad2bd7a0abbd96 (diff)
downloadgem5-8d923c7380f1d5a1418c1d4b71cd4cfc63429448.tar.xz
syscall_emul: Implement clock_getres() system call
This patch implements the clock_getres() system call for arm and x86 in linux SE mode.
-rw-r--r--src/arch/arm/linux/process.cc2
-rw-r--r--src/arch/x86/linux/process.cc2
-rw-r--r--src/sim/syscall_emul.hh17
3 files changed, 19 insertions, 2 deletions
diff --git a/src/arch/arm/linux/process.cc b/src/arch/arm/linux/process.cc
index 89a085002..48aebadc8 100644
--- a/src/arch/arm/linux/process.cc
+++ b/src/arch/arm/linux/process.cc
@@ -383,7 +383,7 @@ static SyscallDesc syscallDescs32[] = {
/* 261 */ SyscallDesc("timer_delete", unimplementedFunc),
/* 262 */ SyscallDesc("clock_settime", unimplementedFunc),
/* 263 */ SyscallDesc("clock_gettime", clock_gettimeFunc<ArmLinux32>),
- /* 264 */ SyscallDesc("clock_getres", unimplementedFunc),
+ /* 264 */ SyscallDesc("clock_getres", clock_getresFunc<ArmLinux32>),
/* 265 */ SyscallDesc("clock_nanosleep", unimplementedFunc),
/* 266 */ SyscallDesc("statfs64", unimplementedFunc),
/* 267 */ SyscallDesc("fstatfs64", unimplementedFunc),
diff --git a/src/arch/x86/linux/process.cc b/src/arch/x86/linux/process.cc
index 5bb237c10..9651f7436 100644
--- a/src/arch/x86/linux/process.cc
+++ b/src/arch/x86/linux/process.cc
@@ -447,7 +447,7 @@ static SyscallDesc syscallDescs64[] = {
/* 226 */ SyscallDesc("timer_delete", unimplementedFunc),
/* 227 */ SyscallDesc("clock_settime", unimplementedFunc),
/* 228 */ SyscallDesc("clock_gettime", clock_gettimeFunc<X86Linux64>),
- /* 229 */ SyscallDesc("clock_getres", unimplementedFunc),
+ /* 229 */ SyscallDesc("clock_getres", clock_getresFunc<X86Linux64>),
/* 230 */ SyscallDesc("clock_nanosleep", unimplementedFunc),
/* 231 */ SyscallDesc("exit_group", exitGroupFunc),
/* 232 */ SyscallDesc("epoll_wait", unimplementedFunc),
diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh
index ee305fbe9..bff7b79a4 100644
--- a/src/sim/syscall_emul.hh
+++ b/src/sim/syscall_emul.hh
@@ -1357,6 +1357,23 @@ clock_gettimeFunc(SyscallDesc *desc, int num, LiveProcess *p, ThreadContext *tc)
return 0;
}
+/// Target clock_getres() function.
+template <class OS>
+SyscallReturn
+clock_getresFunc(SyscallDesc *desc, int num, LiveProcess *p, ThreadContext *tc)
+{
+ int index = 1;
+ TypedBufferArg<typename OS::timespec> tp(p->getSyscallArg(tc, index));
+
+ // Set resolution at ns, which is what clock_gettime() returns
+ tp->tv_sec = 0;
+ tp->tv_nsec = 1;
+
+ tp.copyOut(tc->getMemProxy());
+
+ return 0;
+}
+
/// Target gettimeofday() handler.
template <class OS>
SyscallReturn