[1/3] posix: Fix internal p{read,write} plt usage

Message ID 1493735612-26045-1-git-send-email-adhemerval.zanella@linaro.org
State New
Headers show
Series
  • [1/3] posix: Fix internal p{read,write} plt usage
Related show

Commit Message

Adhemerval Zanella May 2, 2017, 2:33 p.m.
This patch adds internal alias for __pread, __pread64, and __pwrite
following the already in place one for __pwrite64.  This is not used
in any implementation but on microblaze on preadv/pwritev fallback
(since it does not define __ASSUME_PREADV).

In fact it was signaled by commit c35db50ff5 which update the expected
localptl.data for the architecture based on resulted value.  This patch
updates the plt for microblaze now that p{read,write}{64} are correctly
routed to use internal alias.

Checked on x86_64-linux-gnu and a build for all supported architectures
(no all variants although).

	* include/unistd.h (__pread): Add libc_hidden_proto.
	(__pread64): Likewise.
	(__pwrite): Likewise.
	* sysdeps/unix/sysv/linux/microblaze/localplt.data [libc.so]
	(__pread64): Remove.
	* sysdeps/unix/sysv/linux/pread.c (__pread64): Add libc_hidden_weak.
	* sysdeps/unix/sysv/linux/pread64.c (__pread64): Likewise.
	* sysdeps/unix/sysv/linux/pwrite.c (__pwrite): Likewise.
---
 ChangeLog                                        | 9 +++++++++
 include/unistd.h                                 | 3 +++
 sysdeps/unix/sysv/linux/microblaze/localplt.data | 1 -
 sysdeps/unix/sysv/linux/pread.c                  | 1 +
 sysdeps/unix/sysv/linux/pread64.c                | 1 +
 sysdeps/unix/sysv/linux/pwrite.c                 | 1 +
 6 files changed, 15 insertions(+), 1 deletion(-)

-- 
2.7.4

Comments

Andreas Schwab May 2, 2017, 3:53 p.m. | #1
On Mai 02 2017, Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote:

> 	* include/unistd.h (__pread): Add libc_hidden_proto.

> 	(__pread64): Likewise.

> 	(__pwrite): Likewise.

> 	* sysdeps/unix/sysv/linux/microblaze/localplt.data [libc.so]

> 	(__pread64): Remove.

> 	* sysdeps/unix/sysv/linux/pread.c (__pread64): Add libc_hidden_weak.

> 	* sysdeps/unix/sysv/linux/pread64.c (__pread64): Likewise.

> 	* sysdeps/unix/sysv/linux/pwrite.c (__pwrite): Likewise.


I think the hidden alias should always be added to all implementations.
Ok with that change.

Andreas.

-- 
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."

Patch hide | download patch | download mbox

diff --git a/include/unistd.h b/include/unistd.h
index 16a8815..f36759b 100644
--- a/include/unistd.h
+++ b/include/unistd.h
@@ -33,14 +33,17 @@  extern __off_t __libc_lseek (int __fd, __off_t __offset, int __whence);
 extern __off64_t __libc_lseek64 (int __fd, __off64_t __offset, int __whence);
 extern ssize_t __pread (int __fd, void *__buf, size_t __nbytes,
 			__off_t __offset);
+libc_hidden_proto (__pread);
 extern ssize_t __libc_pread (int __fd, void *__buf, size_t __nbytes,
 			     __off_t __offset);
 extern ssize_t __pread64 (int __fd, void *__buf, size_t __nbytes,
 			  __off64_t __offset);
+libc_hidden_proto (__pread64);
 extern ssize_t __libc_pread64 (int __fd, void *__buf, size_t __nbytes,
 			       __off64_t __offset);
 extern ssize_t __pwrite (int __fd, const void *__buf, size_t __n,
 			 __off_t __offset);
+libc_hidden_proto (__pwrite)
 extern ssize_t __libc_pwrite (int __fd, const void *__buf, size_t __n,
 			      __off_t __offset);
 extern ssize_t __pwrite64 (int __fd, const void *__buf, size_t __n,
diff --git a/sysdeps/unix/sysv/linux/microblaze/localplt.data b/sysdeps/unix/sysv/linux/microblaze/localplt.data
index 4187832..a61b94d 100644
--- a/sysdeps/unix/sysv/linux/microblaze/localplt.data
+++ b/sysdeps/unix/sysv/linux/microblaze/localplt.data
@@ -1,5 +1,4 @@ 
 libc.so: __errno_location
-libc.so: __pread64
 libc.so: calloc
 libc.so: free
 libc.so: malloc
diff --git a/sysdeps/unix/sysv/linux/pread.c b/sysdeps/unix/sysv/linux/pread.c
index b4f1b87..96df997 100644
--- a/sysdeps/unix/sysv/linux/pread.c
+++ b/sysdeps/unix/sysv/linux/pread.c
@@ -32,5 +32,6 @@  __libc_pread (int fd, void *buf, size_t count, off_t offset)
 }
 
 strong_alias (__libc_pread, __pread)
+libc_hidden_weak (__pread)
 weak_alias (__libc_pread, pread)
 #endif
diff --git a/sysdeps/unix/sysv/linux/pread64.c b/sysdeps/unix/sysv/linux/pread64.c
index c7f9cb1..0c2c80e 100644
--- a/sysdeps/unix/sysv/linux/pread64.c
+++ b/sysdeps/unix/sysv/linux/pread64.c
@@ -30,6 +30,7 @@  __libc_pread64 (int fd, void *buf, size_t count, off64_t offset)
 }
 
 weak_alias (__libc_pread64, __pread64)
+libc_hidden_weak (__pread64)
 weak_alias (__libc_pread64, pread64)
 
 #ifdef __OFF_T_MATCHES_OFF64_T
diff --git a/sysdeps/unix/sysv/linux/pwrite.c b/sysdeps/unix/sysv/linux/pwrite.c
index ef1bb01..ef11d8f 100644
--- a/sysdeps/unix/sysv/linux/pwrite.c
+++ b/sysdeps/unix/sysv/linux/pwrite.c
@@ -32,5 +32,6 @@  __libc_pwrite (int fd, const void *buf, size_t count, off_t offset)
 }
 
 strong_alias (__libc_pwrite, __pwrite)
+libc_hidden_weak (__pwrite)
 weak_alias (__libc_pwrite, pwrite)
 #endif