Commit b409186b8db0b11f6e5b0f014909df6fea81531f
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,6 +215,29 @@ static inline void host_to_target_fds(target_long *target_fds, | ||
| 215 | #endif | 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 | static inline void target_to_host_timeval(struct timeval *tv, | 241 | static inline void target_to_host_timeval(struct timeval *tv, |
| 219 | const struct target_timeval *target_tv) | 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,7 +1659,15 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, | ||
| 1636 | } | 1659 | } |
| 1637 | break; | 1660 | break; |
| 1638 | case TARGET_NR_getrusage: | 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 | case TARGET_NR_gettimeofday: | 1671 | case TARGET_NR_gettimeofday: |
| 1641 | { | 1672 | { |
| 1642 | struct target_timeval *target_tv = (void *)arg1; | 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,24 +1917,7 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, | ||
| 1886 | if (status_ptr) | 1917 | if (status_ptr) |
| 1887 | *status_ptr = tswap32(status); | 1918 | *status_ptr = tswap32(status); |
| 1888 | if (target_rusage) { | 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 | } |