Message ID | 1350050151-12838-1-git-send-email-peter.maydell@linaro.org |
---|---|
State | Accepted |
Commit | 24c35a504e8b09e697d0268bbefb2a329b901611 |
Headers | show |
Ping? -- PMM On 12 October 2012 14:55, Peter Maydell <peter.maydell@linaro.org> 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 <peter.maydell@linaro.org> > --- > 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 > >
Ping^2, now we're out of freeze? Patchwork URL: http://patchwork.ozlabs.org/patch/191133/ -- PMM On 24 October 2012 13:27, Peter Maydell <peter.maydell@linaro.org> wrote: > Ping? > > -- PMM > > On 12 October 2012 14:55, Peter Maydell <peter.maydell@linaro.org> 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.
Thanks, applied. Maybe we need more maintainers for linux-user. On Fri, Dec 7, 2012 at 2:57 PM, Peter Maydell <peter.maydell@linaro.org> wrote: > Ping^2, now we're out of freeze? Patchwork URL: > http://patchwork.ozlabs.org/patch/191133/ > > -- PMM > > > On 24 October 2012 13:27, Peter Maydell <peter.maydell@linaro.org> wrote: >> Ping? >> >> -- PMM >> >> On 12 October 2012 14:55, Peter Maydell <peter.maydell@linaro.org> 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. >
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
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 <peter.maydell@linaro.org> --- 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(-)