From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LvEsF-0006pn-GZ for qemu-devel@nongnu.org; Sat, 18 Apr 2009 14:02:43 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LvEsF-0006pb-1Z for qemu-devel@nongnu.org; Sat, 18 Apr 2009 14:02:43 -0400 Received: from [199.232.76.173] (port=53119 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LvEsE-0006pY-VX for qemu-devel@nongnu.org; Sat, 18 Apr 2009 14:02:42 -0400 Received: from hall.aurel32.net ([88.191.82.174]:47329) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LvEsD-0002tt-Sb for qemu-devel@nongnu.org; Sat, 18 Apr 2009 14:02:42 -0400 Received: from aurel32 by hall.aurel32.net with local (Exim 4.69) (envelope-from ) id 1LvEsC-0002qv-Px for qemu-devel@nongnu.org; Sat, 18 Apr 2009 20:02:40 +0200 Date: Sat, 18 Apr 2009 20:02:40 +0200 From: Aurelien Jarno Subject: Re: [Qemu-devel] [PATCH] linux-user: Linux kernel's fchmodat has three args (no 4th arg) Message-ID: <20090418180240.GC16360@hall.aurel32.net> References: <200904181747.n3IHliKN017340@smtp09.dti.ne.jp> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: inline In-Reply-To: <200904181747.n3IHliKN017340@smtp09.dti.ne.jp> Sender: Aurelien Jarno Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org On Sun, Apr 19, 2009 at 02:47:44AM +0900, takasi-y@ops.dti.ne.jp wrote: > In Linux kernel, fchmodat() takes tree args. > 4th value is only processed by libc. It can be passed as 0 to > host libc, because it has been processed on target side. > > Signed-off-by: Takashi YOSHII > --- > > In Linux kernel, this has three args at least between 2.6.16 ... current(2.6.29+) > In QEMU, this has been implemented as four args from the first. > But has not results error until #7118 was introduced. Good catch. It seems that it's also the case for faccessat. Could you please follow-up with a patch fixing both? Thanks. > Tested on x86_64 host(Debian 5.0.1) + sh4a target(GentooLinux glibc2.8) > /yoshii > > --- > linux-user/syscall.c | 9 ++++----- > 1 files changed, 4 insertions(+), 5 deletions(-) > > diff --git a/linux-user/syscall.c b/linux-user/syscall.c > index ffdbb98..2fc6817 100644 > --- a/linux-user/syscall.c > +++ b/linux-user/syscall.c > @@ -309,9 +309,9 @@ static int sys_faccessat(int dirfd, const char *pathname, int mode, int flags) > } > #endif > #ifdef TARGET_NR_fchmodat > -static int sys_fchmodat(int dirfd, const char *pathname, mode_t mode, int flags) > +static int sys_fchmodat(int dirfd, const char *pathname, mode_t mode) > { > - return (fchmodat(dirfd, pathname, mode, flags)); > + return (fchmodat(dirfd, pathname, mode, 0)); > } > #endif > #if defined(TARGET_NR_fchownat) && defined(USE_UID16) > @@ -428,8 +428,7 @@ static int sys_utimensat(int dirfd, const char *pathname, > _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) > +_syscall3(int,sys_fchmodat,int,dirfd,const char *,pathname, mode_t,mode) > #endif > #if defined(TARGET_NR_fchownat) && defined(__NR_fchownat) && defined(USE_UID16) > _syscall5(int,sys_fchownat,int,dirfd,const char *,pathname, > @@ -4944,7 +4943,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, > case TARGET_NR_fchmodat: > if (!(p = lock_user_string(arg2))) > goto efault; > - ret = get_errno(sys_fchmodat(arg1, p, arg3, arg4)); > + ret = get_errno(sys_fchmodat(arg1, p, arg3)); > unlock_user(p, arg2, 0); > break; > #endif > -- > 1.5.6.5 > > > > -- Aurelien Jarno GPG: 1024D/F1BCDB73 aurelien@aurel32.net http://www.aurel32.net