Ping? -- PMM
On 12 October 2012 14:55, Peter Maydell <[email protected]> wrote: > The Linux syscalls underlying pread() and pwrite() take a 64 bit > offset on all architectures, even if some of them name the syscall > "pread/pwrite" rather than "pread64/pwrite64" for historical reasons. > So move the four QEMU target architectures (arm, i386, sparc, > unicore32) which were defining TARGET_NR_pread/pwrite to define > TARGET_NR_pread64/pwrite64 instead, and drop the TARGET_NR_pread/pwrite > implementation code completely. > > (Based on examination of the kernel sources for the four architectures > this patch affects.) > > Signed-off-by: Peter Maydell <[email protected]> > --- > This patch applies on top of Riku's latest pull-request branch. > Tested with http://dslinux.gits.kiev.ua/trunk/uClibc/test/unistd/preadwrite.c > (though that doesn't try to test large offsets). > > linux-user/arm/syscall_nr.h | 4 ++-- > linux-user/i386/syscall_nr.h | 4 ++-- > linux-user/sparc/syscall_nr.h | 4 ++-- > linux-user/strace.list | 6 ------ > linux-user/syscall.c | 18 ------------------ > linux-user/unicore32/syscall_nr.h | 4 ++-- > 6 files changed, 8 insertions(+), 32 deletions(-) > > diff --git a/linux-user/arm/syscall_nr.h b/linux-user/arm/syscall_nr.h > index 5356395..42d6855 100644 > --- a/linux-user/arm/syscall_nr.h > +++ b/linux-user/arm/syscall_nr.h > @@ -182,8 +182,8 @@ > #define TARGET_NR_rt_sigtimedwait (177) > #define TARGET_NR_rt_sigqueueinfo (178) > #define TARGET_NR_rt_sigsuspend (179) > -#define TARGET_NR_pread (180) > -#define TARGET_NR_pwrite (181) > +#define TARGET_NR_pread64 (180) > +#define TARGET_NR_pwrite64 (181) > #define TARGET_NR_chown (182) > #define TARGET_NR_getcwd (183) > #define TARGET_NR_capget (184) > diff --git a/linux-user/i386/syscall_nr.h b/linux-user/i386/syscall_nr.h > index 74abfca..f080305 100644 > --- a/linux-user/i386/syscall_nr.h > +++ b/linux-user/i386/syscall_nr.h > @@ -182,8 +182,8 @@ > #define TARGET_NR_rt_sigtimedwait 177 > #define TARGET_NR_rt_sigqueueinfo 178 > #define TARGET_NR_rt_sigsuspend 179 > -#define TARGET_NR_pread 180 > -#define TARGET_NR_pwrite 181 > +#define TARGET_NR_pread64 180 > +#define TARGET_NR_pwrite64 181 > #define TARGET_NR_chown 182 > #define TARGET_NR_getcwd 183 > #define TARGET_NR_capget 184 > diff --git a/linux-user/sparc/syscall_nr.h b/linux-user/sparc/syscall_nr.h > index f201f9f..061711c 100644 > --- a/linux-user/sparc/syscall_nr.h > +++ b/linux-user/sparc/syscall_nr.h > @@ -62,8 +62,8 @@ > #define TARGET_NR_getpagesize 64 /* Common > */ > #define TARGET_NR_msync 65 /* Common in newer 1.3.x revs... > */ > #define TARGET_NR_vfork 66 /* Common > */ > -#define TARGET_NR_pread 67 /* Linux Specific > */ > -#define TARGET_NR_pwrite 68 /* Linux Specific > */ > +#define TARGET_NR_pread64 67 /* Linux Specific */ > +#define TARGET_NR_pwrite64 68 /* Linux Specific */ > #define TARGET_NR_geteuid32 69 /* Linux sparc32, sbrk under SunOS > */ > #define TARGET_NR_getegid32 70 /* Linux sparc32, sstk under SunOS > */ > #define TARGET_NR_mmap 71 /* Common > */ > diff --git a/linux-user/strace.list b/linux-user/strace.list > index af3c6a0..08f115d 100644 > --- a/linux-user/strace.list > +++ b/linux-user/strace.list > @@ -972,9 +972,6 @@ > #ifdef TARGET_NR_prctl > { TARGET_NR_prctl, "prctl" , NULL, NULL, NULL }, > #endif > -#ifdef TARGET_NR_pread > -{ TARGET_NR_pread, "pread" , NULL, NULL, NULL }, > -#endif > #ifdef TARGET_NR_pread64 > { TARGET_NR_pread64, "pread64" , NULL, NULL, NULL }, > #endif > @@ -993,9 +990,6 @@ > #ifdef TARGET_NR_putpmsg > { TARGET_NR_putpmsg, "putpmsg" , NULL, NULL, NULL }, > #endif > -#ifdef TARGET_NR_pwrite > -{ TARGET_NR_pwrite, "pwrite" , NULL, NULL, NULL }, > -#endif > #ifdef TARGET_NR_pwrite64 > { TARGET_NR_pwrite64, "pwrite64" , NULL, NULL, NULL }, > #endif > diff --git a/linux-user/syscall.c b/linux-user/syscall.c > index 14a6b32..a02a182 100644 > --- a/linux-user/syscall.c > +++ b/linux-user/syscall.c > @@ -7447,24 +7447,6 @@ abi_long do_syscall(void *cpu_env, int num, abi_long > arg1, > goto unimplemented; > #endif > #endif > -#ifdef TARGET_NR_pread > - case TARGET_NR_pread: > - if (regpairs_aligned(cpu_env)) > - arg4 = arg5; > - if (!(p = lock_user(VERIFY_WRITE, arg2, arg3, 0))) > - goto efault; > - ret = get_errno(pread(arg1, p, arg3, arg4)); > - unlock_user(p, arg2, ret); > - break; > - case TARGET_NR_pwrite: > - if (regpairs_aligned(cpu_env)) > - arg4 = arg5; > - if (!(p = lock_user(VERIFY_READ, arg2, arg3, 1))) > - goto efault; > - ret = get_errno(pwrite(arg1, p, arg3, arg4)); > - unlock_user(p, arg2, 0); > - break; > -#endif > #ifdef TARGET_NR_pread64 > case TARGET_NR_pread64: > if (regpairs_aligned(cpu_env)) { > diff --git a/linux-user/unicore32/syscall_nr.h > b/linux-user/unicore32/syscall_nr.h > index 9c72d84..486b8c4 100644 > --- a/linux-user/unicore32/syscall_nr.h > +++ b/linux-user/unicore32/syscall_nr.h > @@ -187,8 +187,8 @@ > #define TARGET_NR_rt_sigtimedwait 177 > #define TARGET_NR_rt_sigqueueinfo 178 > #define TARGET_NR_rt_sigsuspend 179 > -#define TARGET_NR_pread 180 > -#define TARGET_NR_pwrite 181 > +#define TARGET_NR_pread64 180 > +#define TARGET_NR_pwrite64 181 > #define TARGET_NR_chown 182 > #define TARGET_NR_getcwd 183 > #define TARGET_NR_capget 184 > -- > 1.7.9.5 > >
