Commit b409186b8db0b11f6e5b0f014909df6fea81531f

Authored by bellard
1 parent 418a97af

added getrusage


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@178 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 33 additions and 19 deletions
linux-user/syscall.c
... ... @@ -215,6 +215,29 @@ static inline void host_to_target_fds(target_long *target_fds,
215 215 #endif
216 216 }
217 217  
  218 +static inline void host_to_target_rusage(struct target_rusage *target_rusage,
  219 + const struct rusage *rusage)
  220 +{
  221 + target_rusage->ru_utime.tv_sec = tswapl(rusage->ru_utime.tv_sec);
  222 + target_rusage->ru_utime.tv_usec = tswapl(rusage->ru_utime.tv_usec);
  223 + target_rusage->ru_stime.tv_sec = tswapl(rusage->ru_stime.tv_sec);
  224 + target_rusage->ru_stime.tv_usec = tswapl(rusage->ru_stime.tv_usec);
  225 + target_rusage->ru_maxrss = tswapl(rusage->ru_maxrss);
  226 + target_rusage->ru_ixrss = tswapl(rusage->ru_ixrss);
  227 + target_rusage->ru_idrss = tswapl(rusage->ru_idrss);
  228 + target_rusage->ru_isrss = tswapl(rusage->ru_isrss);
  229 + target_rusage->ru_minflt = tswapl(rusage->ru_minflt);
  230 + target_rusage->ru_majflt = tswapl(rusage->ru_majflt);
  231 + target_rusage->ru_nswap = tswapl(rusage->ru_nswap);
  232 + target_rusage->ru_inblock = tswapl(rusage->ru_inblock);
  233 + target_rusage->ru_oublock = tswapl(rusage->ru_oublock);
  234 + target_rusage->ru_msgsnd = tswapl(rusage->ru_msgsnd);
  235 + target_rusage->ru_msgrcv = tswapl(rusage->ru_msgrcv);
  236 + target_rusage->ru_nsignals = tswapl(rusage->ru_nsignals);
  237 + target_rusage->ru_nvcsw = tswapl(rusage->ru_nvcsw);
  238 + target_rusage->ru_nivcsw = tswapl(rusage->ru_nivcsw);
  239 +}
  240 +
218 241 static inline void target_to_host_timeval(struct timeval *tv,
219 242 const struct target_timeval *target_tv)
220 243 {
... ... @@ -1636,7 +1659,15 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3,
1636 1659 }
1637 1660 break;
1638 1661 case TARGET_NR_getrusage:
1639   - goto unimplemented;
  1662 + {
  1663 + struct rusage rusage;
  1664 + struct target_rusage *target_rusage = (void *)arg2;
  1665 + ret = get_errno(getrusage(arg1, &rusage));
  1666 + if (!is_error(ret)) {
  1667 + host_to_target_rusage(target_rusage, &rusage);
  1668 + }
  1669 + }
  1670 + break;
1640 1671 case TARGET_NR_gettimeofday:
1641 1672 {
1642 1673 struct target_timeval *target_tv = (void *)arg1;
... ... @@ -1886,24 +1917,7 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3,
1886 1917 if (status_ptr)
1887 1918 *status_ptr = tswap32(status);
1888 1919 if (target_rusage) {
1889   - target_rusage->ru_utime.tv_sec = tswapl(rusage.ru_utime.tv_sec);
1890   - target_rusage->ru_utime.tv_usec = tswapl(rusage.ru_utime.tv_usec);
1891   - target_rusage->ru_stime.tv_sec = tswapl(rusage.ru_stime.tv_sec);
1892   - target_rusage->ru_stime.tv_usec = tswapl(rusage.ru_stime.tv_usec);
1893   - target_rusage->ru_maxrss = tswapl(rusage.ru_maxrss);
1894   - target_rusage->ru_ixrss = tswapl(rusage.ru_ixrss);
1895   - target_rusage->ru_idrss = tswapl(rusage.ru_idrss);
1896   - target_rusage->ru_isrss = tswapl(rusage.ru_isrss);
1897   - target_rusage->ru_minflt = tswapl(rusage.ru_minflt);
1898   - target_rusage->ru_majflt = tswapl(rusage.ru_majflt);
1899   - target_rusage->ru_nswap = tswapl(rusage.ru_nswap);
1900   - target_rusage->ru_inblock = tswapl(rusage.ru_inblock);
1901   - target_rusage->ru_oublock = tswapl(rusage.ru_oublock);
1902   - target_rusage->ru_msgsnd = tswapl(rusage.ru_msgsnd);
1903   - target_rusage->ru_msgrcv = tswapl(rusage.ru_msgrcv);
1904   - target_rusage->ru_nsignals = tswapl(rusage.ru_nsignals);
1905   - target_rusage->ru_nvcsw = tswapl(rusage.ru_nvcsw);
1906   - target_rusage->ru_nivcsw = tswapl(rusage.ru_nivcsw);
  1920 + host_to_target_rusage(target_rusage, &rusage);
1907 1921 }
1908 1922 }
1909 1923 }
... ...