syscall: Implementation of the times system call
This commit is contained in:
parent
56154cff5e
commit
6c60db8ce9
|
@ -136,6 +136,17 @@ class Linux : public OperatingSystem
|
||||||
int64_t tv_usec; //!< microseconds
|
int64_t tv_usec; //!< microseconds
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// Clock ticks per second, for times().
|
||||||
|
static const int _SC_CLK_TCK = 100;
|
||||||
|
|
||||||
|
/// For times().
|
||||||
|
struct tms {
|
||||||
|
int64_t tms_utime; //!< user time
|
||||||
|
int64_t tms_stime; //!< system time
|
||||||
|
int64_t tms_cutime; //!< user time of children
|
||||||
|
int64_t tms_cstime; //!< system time of children
|
||||||
|
};
|
||||||
|
|
||||||
// For writev/readv
|
// For writev/readv
|
||||||
struct tgt_iovec {
|
struct tgt_iovec {
|
||||||
uint64_t iov_base; // void *
|
uint64_t iov_base; // void *
|
||||||
|
|
|
@ -1131,6 +1131,30 @@ getrusageFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Target times() function.
|
||||||
|
template <class OS>
|
||||||
|
SyscallReturn
|
||||||
|
timesFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
|
||||||
|
ThreadContext *tc)
|
||||||
|
{
|
||||||
|
TypedBufferArg<typename OS::tms> bufp(process->getSyscallArg(tc, 0));
|
||||||
|
|
||||||
|
// Fill in the time structure (in clocks)
|
||||||
|
int64_t clocks = curTick * OS::_SC_CLK_TCK / Clock::Int::s;
|
||||||
|
bufp->tms_utime = clocks;
|
||||||
|
bufp->tms_stime = 0;
|
||||||
|
bufp->tms_cutime = 0;
|
||||||
|
bufp->tms_cstime = 0;
|
||||||
|
|
||||||
|
// Convert to host endianness
|
||||||
|
bufp->tms_utime = htog(bufp->tms_utime);
|
||||||
|
|
||||||
|
// Write back
|
||||||
|
bufp.copyOut(tc->getMemPort());
|
||||||
|
|
||||||
|
// Return clock ticks since system boot
|
||||||
|
return clocks;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue