Commit c596ed17139b50a45a75a5491797d3b920385566
1 parent
91cf4d88
times() fix
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@327 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
27 additions
and
6 deletions
linux-user/syscall.c
... | ... | @@ -210,6 +210,21 @@ static inline void host_to_target_fds(target_long *target_fds, |
210 | 210 | #endif |
211 | 211 | } |
212 | 212 | |
213 | +#if defined(__alpha__) | |
214 | +#define HOST_HZ 1024 | |
215 | +#else | |
216 | +#define HOST_HZ 100 | |
217 | +#endif | |
218 | + | |
219 | +static inline long host_to_target_clock_t(long ticks) | |
220 | +{ | |
221 | +#if HOST_HZ == TARGET_HZ | |
222 | + return ticks; | |
223 | +#else | |
224 | + return ((int64_t)ticks * TARGET_HZ) / HOST_HZ; | |
225 | +#endif | |
226 | +} | |
227 | + | |
213 | 228 | static inline void host_to_target_rusage(struct target_rusage *target_rusage, |
214 | 229 | const struct rusage *rusage) |
215 | 230 | { |
... | ... | @@ -1423,11 +1438,13 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, |
1423 | 1438 | struct tms tms; |
1424 | 1439 | ret = get_errno(times(&tms)); |
1425 | 1440 | if (tmsp) { |
1426 | - tmsp->tms_utime = tswapl(tms.tms_utime); | |
1427 | - tmsp->tms_stime = tswapl(tms.tms_stime); | |
1428 | - tmsp->tms_cutime = tswapl(tms.tms_cutime); | |
1429 | - tmsp->tms_cstime = tswapl(tms.tms_cstime); | |
1441 | + tmsp->tms_utime = tswapl(host_to_target_clock_t(tms.tms_utime)); | |
1442 | + tmsp->tms_stime = tswapl(host_to_target_clock_t(tms.tms_stime)); | |
1443 | + tmsp->tms_cutime = tswapl(host_to_target_clock_t(tms.tms_cutime)); | |
1444 | + tmsp->tms_cstime = tswapl(host_to_target_clock_t(tms.tms_cstime)); | |
1430 | 1445 | } |
1446 | + if (!is_error(ret)) | |
1447 | + ret = host_to_target_clock_t(ret); | |
1431 | 1448 | } |
1432 | 1449 | break; |
1433 | 1450 | case TARGET_NR_prof: | ... | ... |
linux-user/syscall_defs.h
... | ... | @@ -383,6 +383,8 @@ struct target_itimerval { |
383 | 383 | |
384 | 384 | typedef target_long target_clock_t; |
385 | 385 | |
386 | +#define TARGET_HZ 100 | |
387 | + | |
386 | 388 | struct target_tms { |
387 | 389 | target_clock_t tms_utime; |
388 | 390 | target_clock_t tms_stime; |
... | ... | @@ -539,8 +541,8 @@ static inline void target_siginitset(target_sigset_t *d, target_ulong set) |
539 | 541 | d->sig[i] = 0; |
540 | 542 | } |
541 | 543 | |
542 | -void host_to_target_sigset(target_sigset_t *d, sigset_t *s); | |
543 | -void target_to_host_sigset(sigset_t *d, target_sigset_t *s); | |
544 | +void host_to_target_sigset(target_sigset_t *d, const sigset_t *s); | |
545 | +void target_to_host_sigset(sigset_t *d, const target_sigset_t *s); | |
544 | 546 | void host_to_target_old_sigset(target_ulong *old_sigset, |
545 | 547 | const sigset_t *sigset); |
546 | 548 | void target_to_host_old_sigset(sigset_t *sigset, |
... | ... | @@ -590,6 +592,8 @@ int do_sigaction(int sig, const struct target_sigaction *act, |
590 | 592 | #define TARGET_SIGPROF 27 |
591 | 593 | #define TARGET_SIGWINCH 28 |
592 | 594 | #define TARGET_SIGIO 29 |
595 | +#define TARGET_SIGPWR 30 | |
596 | +#define TARGET_SIGSYS 31 | |
593 | 597 | #define TARGET_SIGRTMIN 32 |
594 | 598 | |
595 | 599 | #define TARGET_SIG_BLOCK 0 /* for blocking signals */ | ... | ... |