Index: qemu/linux-user/syscall.c =================================================================== --- qemu.orig/linux-user/syscall.c 2007-09-19 06:28:02.000000000 -0600 +++ qemu/linux-user/syscall.c 2007-09-19 06:28:30.000000000 -0600 @@ -151,6 +151,7 @@ #define __NR_sys_uname __NR_uname +#define __NR_sys_faccessat __NR_faccessat #define __NR_sys_fchmodat __NR_fchmodat #define __NR_sys_fchownat __NR_fchownat #define __NR_sys_futimesat __NR_futimesat @@ -183,6 +184,9 @@ } #endif _syscall1(int,sys_uname,struct new_utsname *,buf) +#if defined(TARGET_NR_faccessat) && defined(__NR_faccessat) +_syscall4(int,sys_faccessat,int,dirfd,const char *,pathname,int,mode,int,flags) +#endif #if defined(TARGET_NR_fchmodat) && defined(__NR_fchmodat) _syscall4(int,sys_fchmodat,int,dirfd,const char *,pathname, mode_t,mode,int,flags) @@ -3037,6 +3041,21 @@ ret = get_errno(access(p, arg2)); unlock_user(p, arg1, 0); break; +#if defined(TARGET_NR_faccessat) && defined(__NR_faccessat) + case TARGET_NR_faccessat: + if (!arg2) { + ret = -EFAULT; + goto fail; + } + p = lock_user_string(arg2); + if (!access_ok(VERIFY_READ, p, 1)) + ret = -EFAULT; + else + ret = get_errno(sys_faccessat(arg1, p, arg3, arg4)); + if (p) + unlock_user(p, arg2, 0); + break; +#endif #ifdef TARGET_NR_nice /* not on alpha */ case TARGET_NR_nice: ret = get_errno(nice(arg1)); Index: qemu/linux-user/arm/syscall_nr.h =================================================================== --- qemu.orig/linux-user/arm/syscall_nr.h 2007-09-19 06:27:37.000000000 -0600 +++ qemu/linux-user/arm/syscall_nr.h 2007-09-19 06:28:08.000000000 -0600 @@ -336,4 +336,5 @@ #define TARGET_NR_symlinkat 331 #define TARGET_NR_readlinkat 332 #define TARGET_NR_fchmodat 333 +#define TARGET_NR_faccessat 334 #define TARGET_NR_utimensat 348