[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] linux-user: Merge pread/pwrite into pread64/pwr
From: |
Peter Maydell |
Subject: |
Re: [Qemu-devel] [PATCH] linux-user: Merge pread/pwrite into pread64/pwrite64 |
Date: |
Wed, 24 Oct 2012 13:27:40 +0100 |
Ping?
-- PMM
On 12 October 2012 14:55, Peter Maydell <address@hidden> 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 <address@hidden>
> ---
> 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
>
>