From patchwork Wed May 14 07:46:49 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aurelien Jarno X-Patchwork-Id: 903 Return-Path: X-Original-To: siddhesh@wilcox.dreamhost.com Delivered-To: siddhesh@wilcox.dreamhost.com Received: from homiemail-mx20.g.dreamhost.com (peon2454.g.dreamhost.com [208.113.200.127]) by wilcox.dreamhost.com (Postfix) with ESMTP id 520843600BE for ; Wed, 14 May 2014 00:47:04 -0700 (PDT) Received: by homiemail-mx20.g.dreamhost.com (Postfix, from userid 14307373) id 0669B41A4673E; Wed, 14 May 2014 00:47:04 -0700 (PDT) X-Original-To: glibc@patchwork.siddhesh.in Delivered-To: x14307373@homiemail-mx20.g.dreamhost.com Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by homiemail-mx20.g.dreamhost.com (Postfix) with ESMTPS id D98B841A4672E for ; Wed, 14 May 2014 00:47:03 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id; q=dns; s= default; b=Kmu60gM/T5lG+JuifLeqA2j3uLkNF9bVAbRN342jWZfA+K6lsIEb7 rL0Rp/K/BRWwqeDdE+oghXYfgftn9EzBqWflIS7+triD6AQ2sq8o01FVq5iHYNhb XrvRGS+6PzoCzMTfLZiJ2QOrpzB7nUZAxIHMKATknARtzUZKstDupI= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id; s=default; bh=iLaaUPu8or8zONWsb9ddmhuQs+M=; b=xqDKzVqRB3TmVGNTX30L11sSYUiM bUIdaFU5q537ElgzIVruOdAY+0XauTasSFLoXCanDHtAYCgpuoy3v3/7Mqy8nhcU 2GiOaY13H+58D2+h92i2+Y+xFoDc9rRFAeUc0Po3+oVjQWAyAJiHYpMQ5gGlg4lK FLC976jn+iaPBnc= Received: (qmail 29513 invoked by alias); 14 May 2014 07:47:02 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 29493 invoked by uid 89); 14 May 2014 07:47:01 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.7 required=5.0 tests=BAYES_40, RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: hall.aurel32.net From: Aurelien Jarno To: libc-alpha@sourceware.org Cc: Aurelien Jarno Subject: [PATCH v2] fix nl_langinfo with static linking (BZ #16915) Date: Wed, 14 May 2014 09:46:49 +0200 Message-Id: <1400053609-29629-1-git-send-email-aurelien@aurel32.net> X-DH-Original-To: glibc@patchwork.siddhesh.in For static linking the locale code avoids linking code and data for unused categories. However for nl_langinfo we know only at runtime which categories are used, so direct reference to every nl_current_CATEGORY symbol should be done. This was broken by commit bc3e1c127392da88d0c8bf2ae728147982a3d1bc where nl_langinfo_l and nl_langinfo have been merged and some code has been lost in the process. In order to detect locales issues with static linking, compile a version of tst-langinfo with static linking. Note: this is Debian bug#747103 reported by Raphael --- ChangeLog | 13 +++++++++++++ NEWS | 3 ++- locale/nl_langinfo_l.c | 15 +++++++++++++++ localedata/Makefile | 13 ++++++++++--- localedata/tst-langinfo-static.c | 1 + localedata/tst-langinfo.sh | 3 +-- 6 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 localedata/tst-langinfo-static.c v1 -> v2: Created a BZ entry and mention it in the Changelog Replace the return "" by abort(). diff --git a/ChangeLog b/ChangeLog index 581dc85..c2bed53 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2014-05-14 Aurelien Jarno + + [BZ #16915] + * locale/nl_langinfo_l.c: Make direct reference to every + _nl_current_CATEGORY symbol. + * localedata/Makefile (test-srcs): Add tst-langinfo-static. + (tests-static): Add tst-langinfo-static. + (tests-special): Add tst-langinfo-static.out. + ($(objpfx)tst-langinfo.out): Redirect output. + ($(objpfx)tst-langinfo-static.out): New. + * localedata/tst-langinfo.sh: Send output to stdout. + * localedata/tst-langinfo-static.c: New file. + 2014-05-05 Aurelien Jarno * po/fr.po: Fix French translation of inappropriate. diff --git a/NEWS b/NEWS index f06e335..d35e1bb 100644 --- a/NEWS +++ b/NEWS @@ -16,7 +16,8 @@ Version 2.20 16677, 16680, 16683, 16689, 16695, 16701, 16706, 16707, 16712, 16713, 16714, 16731, 16739, 16740, 16743, 16754, 16758, 16759, 16760, 16770, 16786, 16789, 16791, 16799, 16800, 16815, 16823, 16824, 16831, 16838, - 16854, 16876, 16877, 16885, 16888, 16890, 16912, 16916, 16922, 16932. + 16854, 16876, 16877, 16885, 16888, 16890, 16912, 16915, 16916, 16922, + 16932. * The minimum Linux kernel version that this version of the GNU C Library can be used with is 2.6.32. diff --git a/locale/nl_langinfo_l.c b/locale/nl_langinfo_l.c index b9d02aa..2490af4 100644 --- a/locale/nl_langinfo_l.c +++ b/locale/nl_langinfo_l.c @@ -20,6 +20,7 @@ #include #include #include +#include #include "localeinfo.h" @@ -43,7 +44,21 @@ __nl_langinfo_l (item, l) if (index == _NL_ITEM_INDEX (_NL_LOCALE_NAME (category))) return (char *) l->__names[category]; +#if defined NL_CURRENT_INDIRECT + /* Make direct reference to every _nl_current_CATEGORY symbol, + since we know only at runtime which categories are used. */ + switch (category) + { +# define DEFINE_CATEGORY(category, category_name, items, a) \ + case category: data = *_nl_current_##category; break; +# include "categories.def" +# undef DEFINE_CATEGORY + default: /* Should be impossible. */ + abort(); + } +#else data = l->__locales[category]; +#endif if (index >= data->nstrings) /* Bogus index for this category: bogus item. */ diff --git a/localedata/Makefile b/localedata/Makefile index 94562be..48ec3de 100644 --- a/localedata/Makefile +++ b/localedata/Makefile @@ -35,7 +35,7 @@ vpath %.h tests-mbwc test-srcs := collate-test xfrm-test tst-fmon tst-rpmatch tst-trans \ tst-mbswcs1 tst-mbswcs2 tst-mbswcs3 tst-mbswcs4 tst-mbswcs5 \ - tst-ctype tst-wctype tst-langinfo tst-numeric + tst-ctype tst-wctype tst-langinfo tst-langinfo-static tst-numeric test-input := de_DE.ISO-8859-1 en_US.ISO-8859-1 da_DK.ISO-8859-1 \ hr_HR.ISO-8859-2 sv_SE.ISO-8859-1 tr_TR.UTF-8 fr_FR.UTF-8 \ si_LK.UTF-8 @@ -95,7 +95,9 @@ tests-special += $(objpfx)sort-test.out $(objpfx)tst-fmon.out \ $(objpfx)tst-locale.out $(objpfx)tst-rpmatch.out \ $(objpfx)tst-trans.out $(objpfx)tst-mbswcs.out \ $(objpfx)tst-ctype.out $(objpfx)tst-wctype.out \ - $(objpfx)tst-langinfo.out $(objpfx)tst-numeric.out + $(objpfx)tst-langinfo.out $(objpfx)tst-langinfo-static.out \ + $(objpfx)tst-numeric.out +tests-static += tst-langinfo-static ifeq ($(run-built-tests),yes) # We have to generate locales @@ -197,7 +199,12 @@ $(objpfx)tst-wctype.out: tst-wctype.sh $(objpfx)tst-wctype \ $(objpfx)tst-langinfo.out: tst-langinfo.sh $(objpfx)tst-langinfo \ $(objpfx)sort-test.out \ $(addprefix $(objpfx),$(CTYPE_FILES)) - $(SHELL) $< $(common-objpfx) '$(test-program-cmd)'; \ + $(SHELL) $< $(common-objpfx) '$(test-program-cmd)' > $@; \ + $(evaluate-test) +$(objpfx)tst-langinfo-static.out: tst-langinfo.sh $(objpfx)tst-langinfo-static \ + $(objpfx)sort-test.out \ + $(addprefix $(objpfx),$(CTYPE_FILES)) + $(SHELL) $< $(common-objpfx) '$(test-program-cmd)' > $@; \ $(evaluate-test) $(objpfx)tst-digits.out: $(objpfx)tst-locale.out $(objpfx)tst-mbswcs6.out: $(addprefix $(objpfx),$(CTYPE_FILES)) diff --git a/localedata/tst-langinfo-static.c b/localedata/tst-langinfo-static.c new file mode 100644 index 0000000..46856a0 --- /dev/null +++ b/localedata/tst-langinfo-static.c @@ -0,0 +1 @@ +#include "tst-langinfo.c" diff --git a/localedata/tst-langinfo.sh b/localedata/tst-langinfo.sh index e75d22a..bd489d0 100755 --- a/localedata/tst-langinfo.sh +++ b/localedata/tst-langinfo.sh @@ -340,7 +340,6 @@ ja_JP.EUC-JP NOEXPR ^([nN ja_JP.EUC-JP CODESET EUC-JP EOF LOCPATH=${common_objpfx}localedata GCONV_PATH=${common_objpfx}iconvdata \ -LC_ALL=tt_TT ${tst_langinfo} \ - > ${common_objpfx}localedata/tst-langinfo.out +LC_ALL=tt_TT ${tst_langinfo} exit $?