diff options
author | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2003-07-13 17:32:31 +0000 |
---|---|---|
committer | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2003-07-13 17:32:31 +0000 |
commit | c596ed17139b50a45a75a5491797d3b920385566 (patch) | |
tree | 4ff07a4cbb97f048407bc943b4069cad97ec0ad7 /linux-user/syscall.c | |
parent | 91cf4d88fbb174ba5a4ade9c4479f3b0775a5599 (diff) |
times() fix
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@327 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'linux-user/syscall.c')
-rw-r--r-- | linux-user/syscall.c | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 932fe4658d..1204a62c43 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -210,6 +210,21 @@ static inline void host_to_target_fds(target_long *target_fds, #endif } +#if defined(__alpha__) +#define HOST_HZ 1024 +#else +#define HOST_HZ 100 +#endif + +static inline long host_to_target_clock_t(long ticks) +{ +#if HOST_HZ == TARGET_HZ + return ticks; +#else + return ((int64_t)ticks * TARGET_HZ) / HOST_HZ; +#endif +} + static inline void host_to_target_rusage(struct target_rusage *target_rusage, const struct rusage *rusage) { @@ -1423,11 +1438,13 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, struct tms tms; ret = get_errno(times(&tms)); if (tmsp) { - tmsp->tms_utime = tswapl(tms.tms_utime); - tmsp->tms_stime = tswapl(tms.tms_stime); - tmsp->tms_cutime = tswapl(tms.tms_cutime); - tmsp->tms_cstime = tswapl(tms.tms_cstime); + tmsp->tms_utime = tswapl(host_to_target_clock_t(tms.tms_utime)); + tmsp->tms_stime = tswapl(host_to_target_clock_t(tms.tms_stime)); + tmsp->tms_cutime = tswapl(host_to_target_clock_t(tms.tms_cutime)); + tmsp->tms_cstime = tswapl(host_to_target_clock_t(tms.tms_cstime)); } + if (!is_error(ret)) + ret = host_to_target_clock_t(ret); } break; case TARGET_NR_prof: |