summary refs log tree commit diff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2016-07-12 09:21:36 -0700
committerH.J. Lu <hjl.tools@gmail.com>2016-07-12 09:21:56 -0700
commitf531f93056b34800383c5154280e7ba5112563c7 (patch)
tree23cd6ebe83824bea3829476456b8c112221666aa
parent3bbee82a56b38fc4ee28ecb59721ea1d42494642 (diff)
downloadglibc-f531f93056b34800383c5154280e7ba5112563c7.tar.gz
glibc-f531f93056b34800383c5154280e7ba5112563c7.tar.xz
glibc-f531f93056b34800383c5154280e7ba5112563c7.zip
x86-64: Add p{read,write}[v]64 to syscalls.list [BZ #20348]
64-bit off_t in pread64, preadv, pwrite64 and pwritev syscalls is passed
in one 64-bit register for both x32 and x86-64.  Since the inline
asm statement only passes long, which is 32-bit for x32, in registers,
64-bit off_t is truncated to 32-bit on x32.  Since __ASSUME_PREADV and
__ASSUME_PWRITEV are defined unconditionally, these syscalls can be
implemented in syscalls.list to pass 64-bit off_t in one 64-bit register.

Tested on x86-64 and x32 with off_t > 4GB on pread64/pwrite64 and
preadv64/pwritev64.

	[BZ #20348]
	* sysdeps/unix/sysv/linux/x86_64/syscalls.list: Add pread64,
	preadv64, pwrite64 and pwritev64.
-rw-r--r--ChangeLog6
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/syscalls.list4
2 files changed, 10 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index a93884a18e..e9ab885a5b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2016-07-12  H.J. Lu  <hongjiu.lu@intel.com>
 
+	[BZ #20348]
+	* sysdeps/unix/sysv/linux/x86_64/syscalls.list: Add pread64,
+	preadv64, pwrite64 and pwritev64.
+
+2016-07-12  H.J. Lu  <hongjiu.lu@intel.com>
+
 	[BZ #20350]
 	* posix/tst-preadwrite.c: Renamed to ...
 	* posix/tst-preadwrite-common.c: This.
diff --git a/sysdeps/unix/sysv/linux/x86_64/syscalls.list b/sysdeps/unix/sysv/linux/x86_64/syscalls.list
index d09d101da5..bcf63701de 100644
--- a/sysdeps/unix/sysv/linux/x86_64/syscalls.list
+++ b/sysdeps/unix/sysv/linux/x86_64/syscalls.list
@@ -6,6 +6,10 @@ msgctl		-	msgctl		i:iip	__msgctl	msgctl
 msgget		-	msgget		i:ii	__msgget	msgget
 msgrcv		-	msgrcv		Ci:ibnii __msgrcv	msgrcv
 msgsnd		-	msgsnd		Ci:ibni	__msgsnd	msgsnd
+pread64		-	pread64		Ci:ipii	__libc_pread	__libc_pread64 __pread64 pread64 __pread pread
+preadv64	-	preadv		Ci:ipii	preadv64	preadv
+pwrite64	-	pwrite64	Ci:ipii	__libc_pwrite	__pwrite64 pwrite64 __pwrite pwrite
+pwritev64	-	pwritev		Ci:ipii	pwritev64	pwritev
 shmat		-	shmat		i:ipi	__shmat		shmat
 shmctl		-	shmctl		i:iip	__shmctl	shmctl
 shmdt		-	shmdt		i:s	__shmdt		shmdt