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 size_t;
|
||||||
typedef uint64_t off_t;
|
typedef uint64_t off_t;
|
||||||
typedef int64_t time_t;
|
typedef int64_t time_t;
|
||||||
|
typedef int64_t clock_t;
|
||||||
typedef uint32_t uid_t;
|
typedef uint32_t uid_t;
|
||||||
typedef uint32_t gid_t;
|
typedef uint32_t gid_t;
|
||||||
//@}
|
//@}
|
||||||
|
|
|
@ -1156,6 +1156,25 @@ timesFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
|
||||||
return clocks;
|
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__
|
#endif // __SIM_SYSCALL_EMUL_HH__
|
||||||
|
|
Loading…
Reference in a new issue