summaryrefslogtreecommitdiff
path: root/ldso/include/dl-syscall.h
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2011-10-04 23:26:10 -0400
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2011-10-06 22:38:20 +0200
commit7eaca202b9f1f79a3c1d2a56a3879364cfa89e42 (patch)
tree3fb21d52c9ecc62a41500f7de2361d42ea93744f /ldso/include/dl-syscall.h
parent767cb4f4f53712a8af2d7b3df8b0f0354e9749be (diff)
ldso: unify pread syscall definition
A few arches want pread() defined, so move it to common code. Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Diffstat (limited to 'ldso/include/dl-syscall.h')
-rw-r--r--ldso/include/dl-syscall.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/ldso/include/dl-syscall.h b/ldso/include/dl-syscall.h
index 7539c2231..547dad1c8 100644
--- a/ldso/include/dl-syscall.h
+++ b/ldso/include/dl-syscall.h
@@ -108,6 +108,28 @@ static __always_inline _syscall0(gid_t, _dl_getpid)
static __always_inline _syscall3(int, _dl_readlink, const char *, path, char *, buf,
size_t, bufsiz)
+#ifdef __NR_pread64
+#define __NR___syscall_pread __NR_pread64
+static __always_inline _syscall5(ssize_t, __syscall_pread, int, fd, void *, buf,
+ size_t, count, off_t, offset_hi, off_t, offset_lo)
+
+static __always_inline ssize_t
+_dl_pread(int fd, void *buf, size_t count, off_t offset)
+{
+ return __syscall_pread(fd, buf, count, offset, offset >> 31);
+}
+#elif defined __NR_pread
+#define __NR___syscall_pread __NR_pread
+static __always_inline _syscall5(ssize_t, __syscall_pread, int, fd, void *, buf,
+ size_t, count, off_t, offset_hi, off_t, offset_lo)
+
+static __always_inline ssize_t
+_dl_pread(int fd, void *buf, size_t count, off_t offset)
+{
+ return __syscall_pread(fd, buf, count, __LONG_LONG_PAIR(offset >> 31, offset));
+}
+#endif
+
#ifdef __UCLIBC_HAS_SSP__
# include <sys/time.h>
# define __NR__dl_gettimeofday __NR_gettimeofday