summary refs log tree commit diff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2015-06-09 19:52:01 +0000
committerJoseph Myers <joseph@codesourcery.com>2015-06-09 19:52:01 +0000
commitd3ab671c942ba15a5b20f383ce71e387f17ae2c4 (patch)
treecb8b32f20c68d0b1487d2e300507f16f5dd52df2
parentdd26c44403582fdf10d663170f947dfe4b3207a0 (diff)
downloadglibc-d3ab671c942ba15a5b20f383ce71e387f17ae2c4.tar.gz
glibc-d3ab671c942ba15a5b20f383ce71e387f17ae2c4.tar.xz
glibc-d3ab671c942ba15a5b20f383ce71e387f17ae2c4.zip
Fix pathconf statvfs namespace (bug 18507).
pathconf uses __statvfs64, and fpathconf uses __fstatvfs64.  On
systems using sysdeps/unix/sysv/linux/wordsize-64, __statvfs64 then
brings in the strong symbol statvfs, and __fstatvfs64 brings in the
strong symbol fstatvfs, which are not in all the standards that have
pathconf and fpathconf.  This patch fixes this by making those symbols
into weak aliases.

Tested for x86_64 and x86 (testsuite, and that disassembly of
installed shared libraries is unchanged by the patch).

	[BZ #18507]
	* sysdeps/unix/sysv/linux/fstatvfs.c (fstatvfs): Rename to
	__fstatvfs and define as weak alias of __fstatvfs.  Use
	libc_hidden_weak.
	* sysdeps/unix/sysv/linux/statvfs.c (statvs): Rename to __statvfs
	and define as weak alias of __statvfs.  Use libc_hidden_weak.
	* sysdeps/unix/sysv/linux/wordsize-64/fstatvfs.c (__fstatvfs64):
	Define as alias of __fstatvfs, not fstatvfs.
	(fstatvfs64): Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/statvfs.c (__statvfs64):
	Define as alias of __statvfs, not statvfs.
	(statvfs64): Likewise.
	* conform/Makefile (test-xfail-POSIX/unistd.h/linknamespace):
	Remove variable.
-rw-r--r--ChangeLog17
-rw-r--r--NEWS2
-rw-r--r--conform/Makefile1
-rw-r--r--sysdeps/unix/sysv/linux/fstatvfs.c5
-rw-r--r--sysdeps/unix/sysv/linux/statvfs.c5
-rw-r--r--sysdeps/unix/sysv/linux/wordsize-64/fstatvfs.c4
-rw-r--r--sysdeps/unix/sysv/linux/wordsize-64/statvfs.c4
7 files changed, 28 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 12b0ba8a32..39622d67b1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2015-06-09  Joseph Myers  <joseph@codesourcery.com>
+
+	[BZ #18507]
+	* sysdeps/unix/sysv/linux/fstatvfs.c (fstatvfs): Rename to
+	__fstatvfs and define as weak alias of __fstatvfs.  Use
+	libc_hidden_weak.
+	* sysdeps/unix/sysv/linux/statvfs.c (statvs): Rename to __statvfs
+	and define as weak alias of __statvfs.  Use libc_hidden_weak.
+	* sysdeps/unix/sysv/linux/wordsize-64/fstatvfs.c (__fstatvfs64):
+	Define as alias of __fstatvfs, not fstatvfs.
+	(fstatvfs64): Likewise.
+	* sysdeps/unix/sysv/linux/wordsize-64/statvfs.c (__statvfs64):
+	Define as alias of __statvfs, not statvfs.
+	(statvfs64): Likewise.
+	* conform/Makefile (test-xfail-POSIX/unistd.h/linknamespace):
+	Remove variable.
+
 2015-06-09  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
 	* sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h
diff --git a/NEWS b/NEWS
index 53f244d80f..03afc5f497 100644
--- a/NEWS
+++ b/NEWS
@@ -20,7 +20,7 @@ Version 2.22
   18111, 18116, 18125, 18128, 18138, 18185, 18196, 18197, 18206, 18210,
   18211, 18217, 18220, 18221, 18234, 18244, 18247, 18287, 18319, 18324,
   18333, 18346, 18397, 18409, 18410, 18412, 18418, 18422, 18434, 18444,
-  18468, 18469, 18470, 18483, 18495, 18496, 18498.
+  18468, 18469, 18470, 18483, 18495, 18496, 18498, 18507.
 
 * Cache information can be queried via sysconf() function on s390 e.g. with
   _SC_LEVEL1_ICACHE_SIZE as argument.
diff --git a/conform/Makefile b/conform/Makefile
index 943a1967fb..12ccc64b17 100644
--- a/conform/Makefile
+++ b/conform/Makefile
@@ -361,7 +361,6 @@ test-xfail-POSIX/aio.h/linknamespace = yes
 test-xfail-POSIX/mqueue.h/linknamespace = yes
 test-xfail-POSIX/regex.h/linknamespace = yes
 test-xfail-POSIX/semaphore.h/linknamespace = yes
-test-xfail-POSIX/unistd.h/linknamespace = yes
 test-xfail-UNIX98/fmtmsg.h/linknamespace = yes
 test-xfail-UNIX98/mqueue.h/linknamespace = yes
 test-xfail-UNIX98/netdb.h/linknamespace = yes
diff --git a/sysdeps/unix/sysv/linux/fstatvfs.c b/sysdeps/unix/sysv/linux/fstatvfs.c
index 46385269cf..1b613302b8 100644
--- a/sysdeps/unix/sysv/linux/fstatvfs.c
+++ b/sysdeps/unix/sysv/linux/fstatvfs.c
@@ -26,7 +26,7 @@ extern void __internal_statvfs (const char *name, struct statvfs *buf,
 
 
 int
-fstatvfs (int fd, struct statvfs *buf)
+__fstatvfs (int fd, struct statvfs *buf)
 {
   struct statfs fsbuf;
 
@@ -40,4 +40,5 @@ fstatvfs (int fd, struct statvfs *buf)
   /* We signal success if the statfs call succeeded.  */
   return 0;
 }
-libc_hidden_def (fstatvfs)
+weak_alias (__fstatvfs, fstatvfs)
+libc_hidden_weak (fstatvfs)
diff --git a/sysdeps/unix/sysv/linux/statvfs.c b/sysdeps/unix/sysv/linux/statvfs.c
index 7af2fc5f50..e4ab62a8f7 100644
--- a/sysdeps/unix/sysv/linux/statvfs.c
+++ b/sysdeps/unix/sysv/linux/statvfs.c
@@ -26,7 +26,7 @@ extern void __internal_statvfs (const char *name, struct statvfs *buf,
 
 
 int
-statvfs (const char *file, struct statvfs *buf)
+__statvfs (const char *file, struct statvfs *buf)
 {
   struct statfs fsbuf;
 
@@ -40,4 +40,5 @@ statvfs (const char *file, struct statvfs *buf)
   /* We signal success if the statfs call succeeded.  */
   return 0;
 }
-libc_hidden_def (statvfs)
+weak_alias (__statvfs, statvfs)
+libc_hidden_weak (statvfs)
diff --git a/sysdeps/unix/sysv/linux/wordsize-64/fstatvfs.c b/sysdeps/unix/sysv/linux/wordsize-64/fstatvfs.c
index d04bcd4b5e..5803b6f882 100644
--- a/sysdeps/unix/sysv/linux/wordsize-64/fstatvfs.c
+++ b/sysdeps/unix/sysv/linux/wordsize-64/fstatvfs.c
@@ -1,5 +1,5 @@
 #define __fstatvfs64(file, buf) __no_fstatvfs64(file, buf)
 #define fstatvfs64(file, buf) no_fstatvfs64(file, buf)
 #include "../fstatvfs.c"
-strong_alias (fstatvfs, __fstatvfs64)
-weak_alias (fstatvfs, fstatvfs64)
+strong_alias (__fstatvfs, __fstatvfs64)
+weak_alias (__fstatvfs, fstatvfs64)
diff --git a/sysdeps/unix/sysv/linux/wordsize-64/statvfs.c b/sysdeps/unix/sysv/linux/wordsize-64/statvfs.c
index f369976cc2..1e1c96333b 100644
--- a/sysdeps/unix/sysv/linux/wordsize-64/statvfs.c
+++ b/sysdeps/unix/sysv/linux/wordsize-64/statvfs.c
@@ -1,5 +1,5 @@
 #define __statvfs64(file, buf) __no_statvfs64(file, buf)
 #define statvfs64(file, buf) no_statvfs64(file, buf)
 #include "../statvfs.c"
-strong_alias (statvfs, __statvfs64)
-weak_alias (statvfs, statvfs64)
+strong_alias (__statvfs, __statvfs64)
+weak_alias (__statvfs, statvfs64)