diff options
Diffstat (limited to 'main/libc0.9.32/0005-pread_write.c-make-all-archs-use-common-code.patch')
-rw-r--r-- | main/libc0.9.32/0005-pread_write.c-make-all-archs-use-common-code.patch | 671 |
1 files changed, 671 insertions, 0 deletions
diff --git a/main/libc0.9.32/0005-pread_write.c-make-all-archs-use-common-code.patch b/main/libc0.9.32/0005-pread_write.c-make-all-archs-use-common-code.patch new file mode 100644 index 0000000000..5377a3f02a --- /dev/null +++ b/main/libc0.9.32/0005-pread_write.c-make-all-archs-use-common-code.patch @@ -0,0 +1,671 @@ +From 5c7b0eadf777ba9539e723882138273d631ddc05 Mon Sep 17 00:00:00 2001 +From: "Peter S. Mazinger" <ps.m@gmx.net> +Date: Fri, 22 Apr 2011 02:22:07 +0200 +Subject: [PATCH 5/6] pread_write.c: make all archs use common code + +c6x does not need own version at all + +Signed-off-by: Peter S. Mazinger <ps.m@gmx.net> +Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> +(cherry picked from commit 836d74b92d70b71792d3d6136db7cdf0c3775ee3) +--- + libc/sysdeps/linux/c6x/Makefile.arch | 3 +- + libc/sysdeps/linux/c6x/pread_write.c | 103 --------------------------- + libc/sysdeps/linux/common/pread_write.c | 2 + + libc/sysdeps/linux/mips/pread_write.c | 116 +++++++++---------------------- + libc/sysdeps/linux/powerpc/pread_write.c | 70 +++++-------------- + libc/sysdeps/linux/sh/pread_write.c | 109 ++++------------------------- + libc/sysdeps/linux/xtensa/pread_write.c | 79 +++++---------------- + 7 files changed, 88 insertions(+), 394 deletions(-) + delete mode 100644 libc/sysdeps/linux/c6x/pread_write.c + +diff --git a/libc/sysdeps/linux/c6x/Makefile.arch b/libc/sysdeps/linux/c6x/Makefile.arch +index 6bb44f2..5f8aaec 100644 +--- a/libc/sysdeps/linux/c6x/Makefile.arch ++++ b/libc/sysdeps/linux/c6x/Makefile.arch +@@ -5,6 +5,7 @@ + # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + # + +-CSRC := brk.c pread_write.c syscall.c prctl.c ++CSRC := brk.c syscall.c prctl.c ++#CSRC := + + SSRC := __longjmp.S bsd-_setjmp.S bsd-setjmp.S clone.S setjmp.S _vfork.S +diff --git a/libc/sysdeps/linux/c6x/pread_write.c b/libc/sysdeps/linux/c6x/pread_write.c +deleted file mode 100644 +index f985b43..0000000 +--- a/libc/sysdeps/linux/c6x/pread_write.c ++++ /dev/null +@@ -1,103 +0,0 @@ +-/* vi: set sw=4 ts=4: +- * +- * Copyright (C) 2002 by Erik Andersen <andersen@uclibc.org> +- * Based in part on the files +- * ./sysdeps/unix/sysv/linux/pwrite.c, +- * ./sysdeps/unix/sysv/linux/pread.c, +- * sysdeps/posix/pread.c +- * sysdeps/posix/pwrite.c +- * from GNU libc 2.2.5, but reworked considerably... +- * +- * This program is free software; you can redistribute it and/or modify it +- * under the terms of the GNU Library General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or (at your +- * option) any later version. +- * +- * This program is distributed in the hope that it will be useful, but WITHOUT +- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License +- * for more details. +- * +- * You should have received a copy of the GNU Library General Public License +- * along with this program; if not, write to the Free Software Foundation, +- * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +- */ +- +-#define _LARGEFILE64_SOURCE +-#include <features.h> +-#undef __OPTIMIZE__ +-/* We absolutely do _NOT_ want interfaces silently +- * * * renamed under us or very bad things will happen... */ +-#ifdef __USE_FILE_OFFSET64 +-# undef __USE_FILE_OFFSET64 +-#endif +- +- +-#include <errno.h> +-#include <sys/types.h> +-#include <sys/syscall.h> +-#include <unistd.h> +-#include <stdint.h> +- +-extern __typeof(pread) __libc_pread; +-extern __typeof(pwrite) __libc_pwrite; +-#ifdef __UCLIBC_HAS_LFS__ +-extern __typeof(pread64) __libc_pread64; +-extern __typeof(pwrite64) __libc_pwrite64; +-#endif +- +-#ifdef __NR_pread64 /* Newer kernels renamed but it's the same. */ +-# ifdef __NR_pread +-# error "__NR_pread and __NR_pread64 both defined???" +-# endif +-# define __NR_pread __NR_pread64 +-#endif +- +-#define __NR___syscall_pread __NR_pread +-static inline _syscall5(ssize_t, __syscall_pread, int, fd, void *, buf, +- size_t, count, off_t, offset_hi, off_t, offset_lo); +- +-ssize_t __libc_pread(int fd, void *buf, size_t count, off_t offset) +-{ +- return(__syscall_pread(fd,buf,count,offset,offset >> 31)); +-} +-weak_alias (__libc_pread, pread) +- +-#if defined __UCLIBC_HAS_LFS__ +-ssize_t __libc_pread64(int fd, void *buf, size_t count, off64_t offset) +-{ +- uint32_t low = offset & 0xffffffff; +- uint32_t high = offset >> 32; +- return(__syscall_pread(fd, buf, count, low, high)); +-} +-weak_alias (__libc_pread64, pread64) +-#endif /* __UCLIBC_HAS_LFS__ */ +- +- +-#ifdef __NR_pwrite64 /* Newer kernels renamed but it's the same. */ +-# ifdef __NR_pwrite +-# error "__NR_pwrite and __NR_pwrite64 both defined???" +-# endif +-# define __NR_pwrite __NR_pwrite64 +-#endif +- +-#define __NR___syscall_pwrite __NR_pwrite +-static inline _syscall5(ssize_t, __syscall_pwrite, int, fd, const void *, buf, +- size_t, count, off_t, offset_hi, off_t, offset_lo); +- +-ssize_t __libc_pwrite(int fd, const void *buf, size_t count, off_t offset) +-{ +- return(__syscall_pwrite(fd,buf,count,offset,offset >> 31)); +-} +-weak_alias (__libc_pwrite, pwrite) +- +-#if defined __UCLIBC_HAS_LFS__ +-ssize_t __libc_pwrite64(int fd, const void *buf, size_t count, off64_t offset) +-{ +- uint32_t low = offset & 0xffffffff; +- uint32_t high = offset >> 32; +- return(__syscall_pwrite(fd, buf, count, low, high)); +-} +-weak_alias (__libc_pwrite64, pwrite64) +-#endif /* __UCLIBC_HAS_LFS__ */ +- +diff --git a/libc/sysdeps/linux/common/pread_write.c b/libc/sysdeps/linux/common/pread_write.c +index 3d04bb7..dd5d36c 100644 +--- a/libc/sysdeps/linux/common/pread_write.c ++++ b/libc/sysdeps/linux/common/pread_write.c +@@ -35,6 +35,7 @@ static _syscall5(ssize_t, __syscall_pread, int, fd, void *, buf, + size_t, count, off_t, offset_hi, off_t, offset_lo) + # define MY_PREAD(fd, buf, count, offset) __syscall_pread(fd, buf, count, OFF_HI_LO(offset)) + # define MY_PREAD64(fd, buf, count, offset) __syscall_pread(fd, buf, count, OFF64_HI_LO(offset)) ++# endif + #endif + + #ifndef MY_PWRITE +@@ -44,6 +45,7 @@ static _syscall5(ssize_t, __syscall_pwrite, int, fd, const void *, buf, + size_t, count, off_t, offset_hi, off_t, offset_lo) + # define MY_PWRITE(fd, buf, count, offset) __syscall_pwrite(fd, buf, count, OFF_HI_LO(offset)) + # define MY_PWRITE64(fd, buf, count, offset) __syscall_pwrite(fd, buf, count, OFF64_HI_LO(offset)) ++# endif + #endif + + static ssize_t __NC(pread)(int fd, void *buf, size_t count, off_t offset) +diff --git a/libc/sysdeps/linux/mips/pread_write.c b/libc/sysdeps/linux/mips/pread_write.c +index ea6b15f..b777dc4 100644 +--- a/libc/sysdeps/linux/mips/pread_write.c ++++ b/libc/sysdeps/linux/mips/pread_write.c +@@ -4,76 +4,39 @@ + * + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ +-/* +- * Based in part on the files +- * ./sysdeps/unix/sysv/linux/pwrite.c, +- * ./sysdeps/unix/sysv/linux/pread.c, +- * sysdeps/posix/pread.c +- * sysdeps/posix/pwrite.c +- * from GNU libc 2.2.5, but reworked considerably... +- */ + + #include <sys/syscall.h> + #include <unistd.h> +-#include <stdint.h> + #include <endian.h> + #include <sgidefs.h> + +-#ifdef __NR_pread64 /* Newer kernels renamed but it's the same. */ ++#ifdef __NR_pread64 + # ifdef __NR_pread + # error "__NR_pread and __NR_pread64 both defined???" + # endif + # define __NR_pread __NR_pread64 + #endif + +-extern __typeof(pread) __libc_pread; +-extern __typeof(pwrite) __libc_pwrite; +-#ifdef __UCLIBC_HAS_LFS__ +-extern __typeof(pread64) __libc_pread64; +-extern __typeof(pwrite64) __libc_pwrite64; +-#endif +- +-#include <bits/kernel_types.h> +- +- + #ifdef __NR_pread +- +-# if _MIPS_SIM == _MIPS_SIM_ABI64 +-# define __NR___libc_pread __NR_pread +-_syscall4(ssize_t, __libc_pread, int, fd, void *, buf, size_t, count, off_t, offset) +-weak_alias (__libc_pread, pread) +-# ifdef __UCLIBC_HAS_LFS__ +-# define __NR___libc_pread64 __NR_pread +-_syscall4(ssize_t, __libc_pread64, int, fd, void *, buf, size_t, count, off64_t, offset) +-weak_alias (__libc_pread64, pread64) +-# endif /* __UCLIBC_HAS_LFS__ */ ++# if _MIPS_SIM == _MIPS_SIM_ABI64 /* glibc uses it for N32 as well */ ++# define __NR___syscall_pread __NR_pread ++static _syscall4(ssize_t, __syscall_pread, int, fd, void *, buf, size_t, count, off_t, offset) ++# define MY_PREAD(fd, buf, count, offset) \ ++ __syscall_pread(fd, buf, count, offset) ++# define MY_PREAD64(fd, buf, count, offset) \ ++ __syscall_pread(fd, buf, count, offset) + # else /* O32 || N32 */ + # define __NR___syscall_pread __NR_pread +-static __inline__ _syscall6(ssize_t, __syscall_pread, int, fd, void *, buf, +- size_t, count, int, dummy, off_t, offset_hi, off_t, offset_lo) +- +-ssize_t __libc_pread(int fd, void *buf, size_t count, off_t offset) +-{ +- return(__syscall_pread(fd,buf,count,0,__LONG_LONG_PAIR(offset>>31,offset))); +-} +-weak_alias(__libc_pread,pread) +- +-# ifdef __UCLIBC_HAS_LFS__ +-ssize_t __libc_pread64(int fd, void *buf, size_t count, off64_t offset) +-{ +- uint32_t low = offset & 0xffffffff; +- uint32_t high = offset >> 32; +- return(__syscall_pread(fd, buf, count, 0, __LONG_LONG_PAIR (high, low))); +-} +-weak_alias(__libc_pread64,pread64) +-# endif /* __UCLIBC_HAS_LFS__ */ +-# endif /* O32 || N32 */ +- +-#endif /* __NR_pread */ +- +-/**********************************************************************/ ++static _syscall6(ssize_t, __syscall_pread, int, fd, void *, buf, ++ size_t, count, int, dummy, off_t, offset_hi, off_t, offset_lo) ++# define MY_PREAD(fd, buf, count, offset) \ ++ __syscall_pread(fd, buf, count, 0, OFF_HI_LO(offset)) ++# define MY_PREAD64(fd, buf, count, offset) \ ++ __syscall_pread(fd, buf, count, 0, OFF64_HI_LO(offset)) ++# endif ++#endif + +-#ifdef __NR_pwrite64 /* Newer kernels renamed but it's the same. */ ++#ifdef __NR_pwrite64 + # ifdef __NR_pwrite + # error "__NR_pwrite and __NR_pwrite64 both defined???" + # endif +@@ -81,35 +44,22 @@ weak_alias(__libc_pread64,pread64) + #endif + + #ifdef __NR_pwrite +- +-# if _MIPS_SIM == _MIPS_SIM_ABI64 +-# define __NR___libc_pwrite __NR_pwrite +-_syscall4(ssize_t, __libc_pwrite, int, fd, const void *, buf, size_t, count, off_t, offset) +-weak_alias (__libc_pwrite, pwrite) +-# ifdef __UCLIBC_HAS_LFS__ +-# define __NR___libc_pwrite64 __NR_pwrite +-_syscall4(ssize_t, __libc_pwrite64, int, fd, const void *, buf, size_t, count, off64_t, offset) +-weak_alias (__libc_pwrite64, pwrite64) +-# endif /* __UCLIBC_HAS_LFS__ */ ++# if _MIPS_SIM == _MIPS_SIM_ABI64 /* glibc uses it for N32 as well */ ++# define __NR___syscall_pwrite __NR_pwrite ++static _syscall4(ssize_t, __syscall_pwrite, int, fd, const void *, buf, size_t, count, off_t, offset) ++# define MY_PWRITE(fd, buf, count, offset) \ ++ __syscall_pwrite(fd, buf, count, offset) ++# define MY_PWRITE64(fd, buf, count, offset) \ ++ __syscall_pwrite(fd, buf, count, offset) + # else /* O32 || N32 */ + # define __NR___syscall_pwrite __NR_pwrite +-static __inline__ _syscall6(ssize_t, __syscall_pwrite, int, fd, const void *, buf, +- size_t, count, int, dummy, off_t, offset_hi, off_t, offset_lo) +- +-ssize_t __libc_pwrite(int fd, const void *buf, size_t count, off_t offset) +-{ +- return(__syscall_pwrite(fd,buf,count,0,__LONG_LONG_PAIR(offset>>31,offset))); +-} +-weak_alias(__libc_pwrite,pwrite) ++static _syscall6(ssize_t, __syscall_pwrite, int, fd, const void *, buf, ++ size_t, count, int, dummy, off_t, offset_hi, off_t, offset_lo) ++# define MY_PWRITE(fd, buf, count, offset) \ ++ __syscall_pwrite(fd, buf, count, 0, OFF_HI_LO(offset)) ++# define MY_PWRITE64(fd, buf, count, offset) \ ++ __syscall_pwrite(fd, buf, count, 0, OFF64_HI_LO(offset)) ++# endif ++#endif + +-# ifdef __UCLIBC_HAS_LFS__ +-ssize_t __libc_pwrite64(int fd, const void *buf, size_t count, off64_t offset) +-{ +- uint32_t low = offset & 0xffffffff; +- uint32_t high = offset >> 32; +- return(__syscall_pwrite(fd, buf, count, 0, __LONG_LONG_PAIR (high, low))); +-} +-weak_alias(__libc_pwrite64,pwrite64) +-# endif /* __UCLIBC_HAS_LFS__ */ +-# endif /* O32 || N32 */ +-#endif /* __NR_pwrite */ ++#include "../common/pread_write.c" +diff --git a/libc/sysdeps/linux/powerpc/pread_write.c b/libc/sysdeps/linux/powerpc/pread_write.c +index 92a184c..5cb3386 100644 +--- a/libc/sysdeps/linux/powerpc/pread_write.c ++++ b/libc/sysdeps/linux/powerpc/pread_write.c +@@ -1,26 +1,15 @@ +-/* vi: set sw=4 ts=4: +- * ++/* vi: set sw=4 ts=4: */ ++/* + * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org> + * + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ +-/* Based in part on the files +- * ./sysdeps/unix/sysv/linux/pwrite.c, +- * ./sysdeps/unix/sysv/linux/pread.c, +- * sysdeps/posix/pread.c +- * sysdeps/posix/pwrite.c +- * from GNU libc 2.2.5, but reworked considerably... +- */ + + #include <sys/syscall.h> + #include <unistd.h> + #include <endian.h> + +-#ifndef __UCLIBC_HAS_LFS__ +-# define off64_t off_t +-#endif +- +-#ifdef __NR_pread64 /* Newer kernels renamed but it's the same. */ ++#ifdef __NR_pread64 + # ifdef __NR_pread + # error "__NR_pread and __NR_pread64 both defined???" + # endif +@@ -28,28 +17,16 @@ + #endif + + #ifdef __NR_pread +-extern __typeof(pread) __libc_pread; + # define __NR___syscall_pread __NR_pread +-static __inline__ _syscall6(ssize_t, __syscall_pread, int, fd, +- void *, buf, size_t, count, int, dummy, off_t, offset_hi, off_t, offset_lo) +- +-ssize_t __libc_pread(int fd, void *buf, size_t count, off_t offset) +-{ +- return(__syscall_pread(fd, buf, count, 0, __LONG_LONG_PAIR(offset >> 31, offset))); +-} +-weak_alias(__libc_pread,pread) +- +-# ifdef __UCLIBC_HAS_LFS__ +-extern __typeof(pread64) __libc_pread64; +-ssize_t __libc_pread64(int fd, void *buf, size_t count, off64_t offset) +-{ +- return(__syscall_pread(fd, buf, count, 0, __LONG_LONG_PAIR(offset >> 32, offset))); +-} +-weak_alias(__libc_pread64,pread64) +-# endif /* __UCLIBC_HAS_LFS__ */ +-#endif /* __NR_pread */ ++static _syscall6(ssize_t, __syscall_pread, int, fd, void *, buf, ++ size_t, count, int, dummy, off_t, offset_hi, off_t, offset_lo) ++# define MY_PREAD(fd, buf, count, offset) \ ++ __syscall_pread(fd, buf, count, 0, OFF_HI_LO(offset)) ++# define MY_PREAD64(fd, buf, count, offset) \ ++ __syscall_pread(fd, buf, count, 0, OFF64_HI_LO(offset)) ++#endif + +-#ifdef __NR_pwrite64 /* Newer kernels renamed but it's the same. */ ++#ifdef __NR_pwrite64 + # ifdef __NR_pwrite + # error "__NR_pwrite and __NR_pwrite64 both defined???" + # endif +@@ -57,23 +34,14 @@ weak_alias(__libc_pread64,pread64) + #endif + + #ifdef __NR_pwrite +-extern __typeof(pwrite) __libc_pwrite; + # define __NR___syscall_pwrite __NR_pwrite +-static __inline__ _syscall6(ssize_t, __syscall_pwrite, int, fd, +- const void *, buf, size_t, count, int, dummy, off_t, offset_hi, off_t, offset_lo) + +-ssize_t __libc_pwrite(int fd, const void *buf, size_t count, off_t offset) +-{ +- return(__syscall_pwrite(fd, buf, count, 0, __LONG_LONG_PAIR(offset >> 31, offset))); +-} +-weak_alias(__libc_pwrite,pwrite) ++static _syscall6(ssize_t, __syscall_pwrite, int, fd, const void *, buf, ++ size_t, count, int, dummy, off_t, offset_hi, off_t, offset_lo) ++# define MY_PWRITE(fd, buf, count, offset) \ ++ __syscall_pwrite(fd, buf, count, 0, OFF_HI_LO(offset)) ++# define MY_PWRITE64(fd, buf, count, offset) \ ++ __syscall_pwrite(fd, buf, count, 0, OFF64_HI_LO(offset)) ++#endif + +-# ifdef __UCLIBC_HAS_LFS__ +-extern __typeof(pwrite64) __libc_pwrite64; +-ssize_t __libc_pwrite64(int fd, const void *buf, size_t count, off64_t offset) +-{ +- return(__syscall_pwrite(fd, buf, count, 0, __LONG_LONG_PAIR(offset >> 32, offset))); +-} +-weak_alias(__libc_pwrite64,pwrite64) +-# endif /* __UCLIBC_HAS_LFS__ */ +-#endif /* __NR_pwrite */ ++#include "../common/pread_write.c" +diff --git a/libc/sysdeps/linux/sh/pread_write.c b/libc/sysdeps/linux/sh/pread_write.c +index 86feb9c..f4453a6 100644 +--- a/libc/sysdeps/linux/sh/pread_write.c ++++ b/libc/sysdeps/linux/sh/pread_write.c +@@ -4,28 +4,12 @@ + * + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ +-/* +- * Based in part on the files +- * ./sysdeps/unix/sysv/linux/pwrite.c, +- * ./sysdeps/unix/sysv/linux/pread.c, +- * sysdeps/posix/pread.c +- * sysdeps/posix/pwrite.c +- * from GNU libc 2.2.5, but reworked considerably... +- */ + + #include <sys/syscall.h> + #include <unistd.h> +-#include <stdint.h> + #include <endian.h> + +-#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-#include <sysdep-cancel.h> +-#else +-#define SINGLE_THREAD_P 1 +-#endif +- +- +-#ifdef __NR_pread64 /* Newer kernels renamed but it's the same. */ ++#ifdef __NR_pread64 + # ifdef __NR_pread + # error "__NR_pread and __NR_pread64 both defined???" + # endif +@@ -33,49 +17,16 @@ + #endif + + #ifdef __NR_pread +-extern __typeof(pread) __libc_pread; + # define __NR___syscall_pread __NR_pread +-static __inline__ _syscall6(ssize_t, __syscall_pread, int, fd, void *, buf, +- size_t, count, int, dummy, off_t, offset_hi, off_t, offset_lo) +- +-ssize_t __libc_pread(int fd, void *buf, size_t count, off_t offset) +-{ +- if (SINGLE_THREAD_P) +- return(__syscall_pread(fd,buf,count,0,__LONG_LONG_PAIR(offset >> 31,offset))); +- +-#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +- int oldtype = LIBC_CANCEL_ASYNC (); +- ssize_t result = __syscall_pread(fd,buf,count,0,__LONG_LONG_PAIR(offset >> 31,offset)); +- LIBC_CANCEL_RESET (oldtype); +- return result; +-#endif +-} +-weak_alias(__libc_pread,pread) +- +-# ifdef __UCLIBC_HAS_LFS__ +-extern __typeof(pread64) __libc_pread64; +-ssize_t __libc_pread64(int fd, void *buf, size_t count, off64_t offset) +-{ +- uint32_t low = offset & 0xffffffff; +- uint32_t high = offset >> 32; +- +- if (SINGLE_THREAD_P) +- return __syscall_pread(fd, buf, count, 0, __LONG_LONG_PAIR (high, low)); +- +-#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +- int oldtype = LIBC_CANCEL_ASYNC (); +- ssize_t result = __syscall_pread(fd, buf, count, 0, __LONG_LONG_PAIR (high, low)); +- LIBC_CANCEL_RESET (oldtype); +- return result; ++static _syscall6(ssize_t, __syscall_pread, int, fd, void *, buf, ++ size_t, count, int, dummy, off_t, offset_hi, off_t, offset_lo) ++# define MY_PREAD(fd, buf, count, offset) \ ++ __syscall_pread(fd, buf, count, 0, OFF_HI_LO(offset)) ++# define MY_PREAD64(fd, buf, count, offset) \ ++ __syscall_pread(fd, buf, count, 0, OFF64_HI_LO(offset)) + #endif +-} +-weak_alias(__libc_pread64,pread64) +-# endif /* __UCLIBC_HAS_LFS__ */ +-#endif /* __NR_pread */ +- +-/**********************************************************************/ + +-#ifdef __NR_pwrite64 /* Newer kernels renamed but it's the same. */ ++#ifdef __NR_pwrite64 + # ifdef __NR_pwrite + # error "__NR_pwrite and __NR_pwrite64 both defined???" + # endif +@@ -83,43 +34,13 @@ weak_alias(__libc_pread64,pread64) + #endif + + #ifdef __NR_pwrite +-extern __typeof(pwrite) __libc_pwrite; + # define __NR___syscall_pwrite __NR_pwrite +-static __inline__ _syscall6(ssize_t, __syscall_pwrite, int, fd, const void *, buf, +- size_t, count, int, dummy, off_t, offset_hi, off_t, offset_lo) +- +-ssize_t __libc_pwrite(int fd, const void *buf, size_t count, off_t offset) +-{ +- if (SINGLE_THREAD_P) +- return __syscall_pwrite(fd,buf,count,0,__LONG_LONG_PAIR(offset >> 31,offset)); +- +-#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +- int oldtype = LIBC_CANCEL_ASYNC (); +- ssize_t result = __syscall_pwrite(fd,buf,count,0,__LONG_LONG_PAIR(offset >> 31,offset)); +- LIBC_CANCEL_RESET (oldtype); +- return result; ++static _syscall6(ssize_t, __syscall_pwrite, int, fd, const void *, buf, ++ size_t, count, int, dummy, off_t, offset_hi, off_t, offset_lo) ++# define MY_PWRITE(fd, buf, count, offset) \ ++ __syscall_pwrite(fd, buf, count, 0, OFF_HI_LO(offset)) ++# define MY_PWRITE64(fd, buf, count, offset) \ ++ __syscall_pwrite(fd, buf, count, 0, OFF64_HI_LO(offset)) + #endif + +-} +-weak_alias(__libc_pwrite,pwrite) +- +-# ifdef __UCLIBC_HAS_LFS__ +-extern __typeof(pwrite64) __libc_pwrite64; +-ssize_t __libc_pwrite64(int fd, const void *buf, size_t count, off64_t offset) +-{ +- uint32_t low = offset & 0xffffffff; +- uint32_t high = offset >> 32; +- +- if (SINGLE_THREAD_P) +- return __syscall_pwrite(fd, buf, count, 0, __LONG_LONG_PAIR (high, low)); +- +-#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +- int oldtype = LIBC_CANCEL_ASYNC (); +- ssize_t result = __syscall_pwrite(fd, buf, count, 0, __LONG_LONG_PAIR (high, low)); +- LIBC_CANCEL_RESET (oldtype); +- return result; +-#endif +-} +-weak_alias(__libc_pwrite64,pwrite64) +-# endif /* __UCLIBC_HAS_LFS__ */ +-#endif /* __NR_pwrite */ ++#include "../common/pread_write.c" +diff --git a/libc/sysdeps/linux/xtensa/pread_write.c b/libc/sysdeps/linux/xtensa/pread_write.c +index e8b39e9..f4453a6 100644 +--- a/libc/sysdeps/linux/xtensa/pread_write.c ++++ b/libc/sysdeps/linux/xtensa/pread_write.c +@@ -4,30 +4,12 @@ + * + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ +-/* +- * Based in part on the files +- * ./sysdeps/unix/sysv/linux/pwrite.c, +- * ./sysdeps/unix/sysv/linux/pread.c, +- * sysdeps/posix/pread.c +- * sysdeps/posix/pwrite.c +- * from GNU libc 2.2.5, but reworked considerably... +- */ + + #include <sys/syscall.h> + #include <unistd.h> +-#include <stdint.h> + #include <endian.h> + +-extern __typeof(pread) __libc_pread; +-extern __typeof(pwrite) __libc_pwrite; +-#ifdef __UCLIBC_HAS_LFS__ +-extern __typeof(pread64) __libc_pread64; +-extern __typeof(pwrite64) __libc_pwrite64; +-#endif +- +-#include <bits/kernel_types.h> +- +-#ifdef __NR_pread64 /* Newer kernels renamed but it's the same. */ ++#ifdef __NR_pread64 + # ifdef __NR_pread + # error "__NR_pread and __NR_pread64 both defined???" + # endif +@@ -35,31 +17,16 @@ extern __typeof(pwrite64) __libc_pwrite64; + #endif + + #ifdef __NR_pread +- + # define __NR___syscall_pread __NR_pread +-/* On Xtensa, 64-bit values are aligned in even/odd register pairs. */ +-static __inline__ _syscall6(ssize_t, __syscall_pread, int, fd, void *, buf, +- size_t, count, int, pad, off_t, offset_hi, off_t, offset_lo) +- +-ssize_t __libc_pread(int fd, void *buf, size_t count, off_t offset) +-{ +- return __syscall_pread(fd, buf, count, 0, __LONG_LONG_PAIR(offset >> 31, offset)); +-} +-weak_alias(__libc_pread,pread) +- +-# ifdef __UCLIBC_HAS_LFS__ +-ssize_t __libc_pread64(int fd, void *buf, size_t count, off64_t offset) +-{ +- uint32_t low = offset & 0xffffffff; +- uint32_t high = offset >> 32; +- return __syscall_pread(fd, buf, count, 0, __LONG_LONG_PAIR(high, low)); +-} +-weak_alias(__libc_pread64,pread64) +-# endif /* __UCLIBC_HAS_LFS__ */ +- +-#endif /* __NR_pread */ ++static _syscall6(ssize_t, __syscall_pread, int, fd, void *, buf, ++ size_t, count, int, dummy, off_t, offset_hi, off_t, offset_lo) ++# define MY_PREAD(fd, buf, count, offset) \ ++ __syscall_pread(fd, buf, count, 0, OFF_HI_LO(offset)) ++# define MY_PREAD64(fd, buf, count, offset) \ ++ __syscall_pread(fd, buf, count, 0, OFF64_HI_LO(offset)) ++#endif + +-#ifdef __NR_pwrite64 /* Newer kernels renamed but it's the same. */ ++#ifdef __NR_pwrite64 + # ifdef __NR_pwrite + # error "__NR_pwrite and __NR_pwrite64 both defined???" + # endif +@@ -67,25 +34,13 @@ weak_alias(__libc_pread64,pread64) + #endif + + #ifdef __NR_pwrite +- + # define __NR___syscall_pwrite __NR_pwrite +-/* On Xtensa, 64-bit values are aligned in even/odd register pairs. */ +-static __inline__ _syscall6(ssize_t, __syscall_pwrite, int, fd, const void *, buf, +- size_t, count, int, pad, off_t, offset_hi, off_t, offset_lo) +- +-ssize_t __libc_pwrite(int fd, const void *buf, size_t count, off_t offset) +-{ +- return __syscall_pwrite(fd, buf, count, 0, __LONG_LONG_PAIR(offset >> 31, offset)); +-} +-weak_alias(__libc_pwrite,pwrite) ++static _syscall6(ssize_t, __syscall_pwrite, int, fd, const void *, buf, ++ size_t, count, int, dummy, off_t, offset_hi, off_t, offset_lo) ++# define MY_PWRITE(fd, buf, count, offset) \ ++ __syscall_pwrite(fd, buf, count, 0, OFF_HI_LO(offset)) ++# define MY_PWRITE64(fd, buf, count, offset) \ ++ __syscall_pwrite(fd, buf, count, 0, OFF64_HI_LO(offset)) ++#endif + +-# ifdef __UCLIBC_HAS_LFS__ +-ssize_t __libc_pwrite64(int fd, const void *buf, size_t count, off64_t offset) +-{ +- uint32_t low = offset & 0xffffffff; +- uint32_t high = offset >> 32; +- return __syscall_pwrite(fd, buf, count, 0, __LONG_LONG_PAIR(high, low)); +-} +-weak_alias(__libc_pwrite64,pwrite64) +-# endif /* __UCLIBC_HAS_LFS__ */ +-#endif /* __NR_pwrite */ ++#include "../common/pread_write.c" +-- +1.7.11.1 + |