diff --git a/linux-user/arm/syscall_nr.h b/linux-user/arm/syscall_nr.h index 13a9ee11fd..195e459ec7 100644 --- a/linux-user/arm/syscall_nr.h +++ b/linux-user/arm/syscall_nr.h @@ -259,3 +259,4 @@ /* 254 for set_thread_area */ /* 255 for get_thread_area */ /* 256 for set_tid_address */ +#define TARGET_NR_utimes (269) diff --git a/linux-user/i386/syscall_nr.h b/linux-user/i386/syscall_nr.h index c994381aa3..9fa6be96ac 100644 --- a/linux-user/i386/syscall_nr.h +++ b/linux-user/i386/syscall_nr.h @@ -271,3 +271,4 @@ #define TARGET_NR_clock_getres (TARGET_NR_timer_create+7) #define TARGET_NR_clock_nanosleep (TARGET_NR_timer_create+8) +#define TARGET_NR_utimes 271 diff --git a/linux-user/syscall.c b/linux-user/syscall.c index b2965bbbd9..2407400c1f 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -1742,6 +1742,20 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, ret = get_errno(utime((const char *)arg1, tbuf1)); } break; + case TARGET_NR_utimes: + { + struct target_timeval *target_tvp = (struct target_timeval *)arg2; + struct timeval *tvp, tv[2]; + if (target_tvp) { + target_to_host_timeval(&tv[0], &target_tvp[0]); + target_to_host_timeval(&tv[1], &target_tvp[1]); + tvp = tv; + } else { + tvp = NULL; + } + ret = get_errno(utimes((const char *)arg1, tvp)); + } + break; #ifdef TARGET_NR_stty case TARGET_NR_stty: goto unimplemented;