about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2015-06-12 10:11:35 +0000
committerJoseph Myers <joseph@codesourcery.com>2015-06-12 10:11:35 +0000
commit498c1f6a7c7f7b634d02e740f15789cf68820a54 (patch)
treec102c3ffb7bb2f3187c788ce16c1e2ab910734e1
parent9acacaa02f3b75fddc07a56f3d848df45281a5de (diff)
downloadglibc-498c1f6a7c7f7b634d02e740f15789cf68820a54.tar.gz
glibc-498c1f6a7c7f7b634d02e740f15789cf68820a54.tar.xz
glibc-498c1f6a7c7f7b634d02e740f15789cf68820a54.zip
Fix ecvt_r, fcvt_r namespace (bug 18522).
The functions ecvt, fcvt and gcvt, in some standards, bring in
references to ecvt_r and fcvt_r, which aren't in any of those
standards.  The calls are correctly to __ecvt_r and __fcvt_r, but then
the names ecvt_r and fcvt_r are defined as strong aliases; this patch
changes them to weak aliases.

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

	[BZ #18522]
	* misc/efgcvt_r.c
	[LONG_DOUBLE_COMPAT (libc, GLIBC_2_0) && !LONG_DOUBLE_CVT]
	(cvt_symbol): Use weak_alias instead of strong_alias.
	[LONG_DOUBLE_COMPAT (libc, GLIBC_2_0)] (cvt_symbol): Likewise.
	* conform/Makefile (test-xfail-XPG4/stdlib.h/linknamespace):
	Remove variable.
	(test-xfail-UNIX98/stdlib.h/linknamespace): Likewise.
	(test-xfail-XOPEN2K/stdlib.h/linknamespace): Likewise.
-rw-r--r--ChangeLog10
-rw-r--r--NEWS2
-rw-r--r--conform/Makefile3
-rw-r--r--misc/efgcvt_r.c4
4 files changed, 13 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 6ca1c205f0..d9629d9c3a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
 2015-06-12  Joseph Myers  <joseph@codesourcery.com>
 
+	[BZ #18522]
+	* misc/efgcvt_r.c
+	[LONG_DOUBLE_COMPAT (libc, GLIBC_2_0) && !LONG_DOUBLE_CVT]
+	(cvt_symbol): Use weak_alias instead of strong_alias.
+	[LONG_DOUBLE_COMPAT (libc, GLIBC_2_0)] (cvt_symbol): Likewise.
+	* conform/Makefile (test-xfail-XPG4/stdlib.h/linknamespace):
+	Remove variable.
+	(test-xfail-UNIX98/stdlib.h/linknamespace): Likewise.
+	(test-xfail-XOPEN2K/stdlib.h/linknamespace): Likewise.
+
 	[BZ #18520]
 	* inet/herrno.c (h_errno): Rename to __h_errno.
 	(__libc_h_errno): Define as alias of __h_errno not h_errno.
diff --git a/NEWS b/NEWS
index 9d1ce0d53f..b4ec2629ab 100644
--- a/NEWS
+++ b/NEWS
@@ -21,7 +21,7 @@ Version 2.22
   18211, 18217, 18220, 18221, 18234, 18244, 18247, 18287, 18319, 18324,
   18333, 18346, 18397, 18409, 18410, 18412, 18418, 18422, 18434, 18444,
   18468, 18469, 18470, 18479, 18483, 18495, 18496, 18497, 18498, 18507,
-  18520.
+  18520, 18522.
 
 * 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 c259d34cb4..09d18e2321 100644
--- a/conform/Makefile
+++ b/conform/Makefile
@@ -351,7 +351,6 @@ test-xfail-XPG3/wordexp.h/linknamespace = yes
 test-xfail-XPG4/fmtmsg.h/linknamespace = yes
 test-xfail-XPG4/glob.h/linknamespace = yes
 test-xfail-XPG4/netdb.h/linknamespace = yes
-test-xfail-XPG4/stdlib.h/linknamespace = yes
 test-xfail-XPG4/syslog.h/linknamespace = yes
 test-xfail-XPG4/unistd.h/linknamespace = yes
 test-xfail-XPG4/wordexp.h/linknamespace = yes
@@ -361,13 +360,11 @@ test-xfail-POSIX/semaphore.h/linknamespace = yes
 test-xfail-UNIX98/fmtmsg.h/linknamespace = yes
 test-xfail-UNIX98/mqueue.h/linknamespace = yes
 test-xfail-UNIX98/netdb.h/linknamespace = yes
-test-xfail-UNIX98/stdlib.h/linknamespace = yes
 test-xfail-UNIX98/syslog.h/linknamespace = yes
 test-xfail-UNIX98/unistd.h/linknamespace = yes
 test-xfail-UNIX98/wchar.h/linknamespace = yes
 test-xfail-XOPEN2K/fmtmsg.h/linknamespace = yes
 test-xfail-XOPEN2K/netdb.h/linknamespace = yes
-test-xfail-XOPEN2K/stdlib.h/linknamespace = yes
 test-xfail-XOPEN2K/syslog.h/linknamespace = yes
 test-xfail-POSIX2008/grp.h/linknamespace = yes
 test-xfail-POSIX2008/netdb.h/linknamespace = yes
diff --git a/misc/efgcvt_r.c b/misc/efgcvt_r.c
index ea62b6c149..2761222d87 100644
--- a/misc/efgcvt_r.c
+++ b/misc/efgcvt_r.c
@@ -251,13 +251,13 @@ __APPEND (FUNC_PREFIX, ecvt_r) (value, ndigit, decpt, sign, buf, len)
 #  define cvt_symbol(symbol) \
   cvt_symbol_1 (libc, __APPEND (FUNC_PREFIX, symbol), \
 	      APPEND (q, symbol), GLIBC_2_0); \
-  strong_alias (__APPEND (FUNC_PREFIX, symbol), APPEND (FUNC_PREFIX, symbol))
+  weak_alias (__APPEND (FUNC_PREFIX, symbol), APPEND (FUNC_PREFIX, symbol))
 #  define cvt_symbol_1(lib, local, symbol, version) \
   compat_symbol (lib, local, symbol, version)
 # endif
 #else
 # define cvt_symbol(symbol) \
-  strong_alias (__APPEND (FUNC_PREFIX, symbol), APPEND (FUNC_PREFIX, symbol))
+  weak_alias (__APPEND (FUNC_PREFIX, symbol), APPEND (FUNC_PREFIX, symbol))
 #endif
 cvt_symbol(fcvt_r);
 cvt_symbol(ecvt_r);