syscall: Implementation of the time system call.
This commit is contained in:
parent
6c60db8ce9
commit
7cdd5316ab
2 changed files with 20 additions and 0 deletions
|
@ -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;
|
||||
//@}
|
||||
|
|
|
@ -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__
|
||||
|
|
Loading…
Reference in a new issue