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,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 }