From 498c1f6a7c7f7b634d02e740f15789cf68820a54 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Fri, 12 Jun 2015 10:11:35 +0000 Subject: [PATCH] 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. --- ChangeLog | 10 ++++++++++ NEWS | 2 +- conform/Makefile | 3 --- misc/efgcvt_r.c | 4 ++-- 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 + [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);