diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h index f075aff4d5..b9aadb7a58 100644 --- a/linux-user/ioctls.h +++ b/linux-user/ioctls.h @@ -66,6 +66,7 @@ IOCTL(FIGETBSZ, IOC_R, MK_PTR(TYPE_LONG)) #endif + IOCTL(SIOCATMARK, 0, TYPE_NULL) IOCTL(SIOCADDRT, IOC_W, MK_PTR(MK_STRUCT(STRUCT_rtentry))) IOCTL(SIOCDELRT, IOC_W, MK_PTR(MK_STRUCT(STRUCT_rtentry))) IOCTL(SIOCGIFNAME, IOC_RW, MK_PTR(TYPE_INT)) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 898dbcdf03..16958be80c 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -40,6 +40,7 @@ #include #include #include +#include //#include #include @@ -1367,7 +1368,18 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, } break; case TARGET_NR_times: - goto unimplemented; + { + struct target_tms *tmsp = (void *)arg1; + 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); + } + } + break; case TARGET_NR_prof: goto unimplemented; case TARGET_NR_setgid: diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h index 2c442d8aa8..a442683b6d 100644 --- a/linux-user/syscall_defs.h +++ b/linux-user/syscall_defs.h @@ -39,6 +39,15 @@ struct target_itimerval { struct target_timeval it_value; }; +typedef target_long target_clock_t; + +struct target_tms { + target_clock_t tms_utime; + target_clock_t tms_stime; + target_clock_t tms_cutime; + target_clock_t tms_cstime; +}; + struct target_iovec { target_long iov_base; /* Starting address */ target_long iov_len; /* Number of bytes */ diff --git a/syscall-i386.h b/syscall-i386.h index 0fb57ce162..9bc35f1ca3 100644 --- a/syscall-i386.h +++ b/syscall-i386.h @@ -1065,3 +1065,5 @@ union target_semun { #define TARGET_VFAT_IOCTL_READDIR_BOTH 0x82187201 #define TARGET_VFAT_IOCTL_READDIR_SHORT 0x82187202 + +#define TARGET_SIOCATMARK 0x8905