Patchwork linux-user: Merge pread/pwrite into pread64/pwrite64

login
register
mail settings
Submitter Peter Maydell
Date Oct. 12, 2012, 1:55 p.m.
Message ID <1350050151-12838-1-git-send-email-peter.maydell@linaro.org>
Download mbox | patch
Permalink /patch/191133/
State New
Headers show

Comments

Peter Maydell - Oct. 12, 2012, 1:55 p.m.
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(-)
Peter Maydell - Oct. 24, 2012, 12:27 p.m.
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
>
>
Peter Maydell - Dec. 7, 2012, 2:57 p.m.
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.
Blue Swirl - Dec. 8, 2012, 8:02 p.m.
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.
>

Patch

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