syscall: Implementation of the time system call.

This commit is contained in:
Timothy M. Jones 2009-10-24 10:53:57 -07:00
parent 6c60db8ce9
commit 7cdd5316ab
2 changed files with 20 additions and 0 deletions

View file

@ -62,6 +62,7 @@ class Linux : public OperatingSystem
typedef uint64_t size_t;
typedef uint64_t off_t;
typedef int64_t time_t;
typedef int64_t clock_t;
typedef uint32_t uid_t;
typedef uint32_t gid_t;
//@}

View file

@ -1156,6 +1156,25 @@ timesFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
return clocks;
}
/// Target time() function.
template <class OS>
SyscallReturn
timeFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
ThreadContext *tc)
{
typename OS::time_t sec, usec;
getElapsedTime(sec, usec);
sec += seconds_since_epoch;
Addr taddr = (Addr)process->getSyscallArg(tc, 0);
if(taddr != 0) {
typename OS::time_t t = sec;
t = htog(t);
TranslatingPort *p = tc->getMemPort();
p->writeBlob(taddr, (uint8_t*)&t, (int)sizeof(typename OS::time_t));
}
return sec;
}
#endif // __SIM_SYSCALL_EMUL_HH__