From patchwork Tue Aug 22 11:31:12 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 22302 Received: (qmail 2544 invoked by alias); 22 Aug 2017 11:31:18 -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 336 invoked by uid 89); 22 Aug 2017 11:31:17 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.0 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-oi0-f65.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=w31IOxqJkVsju91zBCRNgTGroXDRvGjbigkGDUAZlcs=; b=ckBvkWCtZJJ2UIn0xppEzdQAU0AwdJ30hII5LEhvxD6m/xNsEb4J4T2fa9glethnHW 5k5ellFdSqajixXreh0EMJWl1TbZqrNzBR4hTQRNQId28KX9WMyNz4RYESAfTeTlUMPQ OQcjQ1pFx5eqEeaX+4EsDZWgdK7R2DAfRxC8fZoC5EvltwBolYmknD6JfM6QAUbX9f6m hADFhxC6TtrH3aY9R4v80/2mdgpJjZmGnRflrt1zlBbh6K+oCh1d4I2K5blFb/p+l1Js af7mu5k/6HPIF+34d1NEQAS/TDSnit3K0sKwaC3wZxb6K8D1afUskUsrWxapF+XXCibg pxhw== X-Gm-Message-State: AHYfb5ijmnyHumMmdGxxPf2grERRUljE6TDh9daM1pyniyF7t4nXvNoM qpFnYTCxujoBsWr8W0wUTHO7fL+1ow== X-Received: by 10.202.192.84 with SMTP id q81mr450014oif.88.1503401473851; Tue, 22 Aug 2017 04:31:13 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: References: <20170821220421.GA25502@gmail.com> From: "H.J. Lu" Date: Tue, 22 Aug 2017 04:31:12 -0700 Message-ID: Subject: Re: [PATCH] Hide internal printf functions [BZ #18822/21986] To: Andreas Schwab Cc: "H.J. Lu" , GNU C Library On Mon, Aug 21, 2017 at 11:33 PM, Andreas Schwab wrote: > On Aug 21 2017, "H.J. Lu" wrote: > >> diff --git a/stdio-common/printf.h b/stdio-common/printf.h >> index 940256445e..155dfdc7d3 100644 >> --- a/stdio-common/printf.h >> +++ b/stdio-common/printf.h >> @@ -182,6 +182,9 @@ extern int printf_size_info (const struct printf_info *__restrict >> __info, size_t __n, int *__restrict __argtypes) >> __THROW; >> >> +extern unsigned int __guess_grouping (unsigned int intdig_max, >> + const char *grouping); >> + > > This is not a public function. > Here is the updated patch to move __guess_grouping prototype to include/printf.h. OK for master? From 9756b67d83c5436fec5d8fa17125529d4ad02ac9 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Mon, 21 Aug 2017 14:37:11 -0700 Subject: [PATCH] Hide internal printf functions [BZ #18822/21986] Hide internal printf functions to allow direct access within libc.so and libc.a without using GOT nor PLT. Since __guess_grouping has been changed to take 2 arguments by commit a1d84548c8aa7023cd039c85f81b831eef6d4a4c Author: Ulrich Drepper Date: Fri Feb 11 18:50:36 2000 +0000 the third argument passed to __guess_grouping is removed. [BZ #18822] [BZ #21986] * include/printf.h (__printf_fphex): Add attribute_hidden. (__guess_grouping): New prototype. * stdio-common/printf_fp.c (__guess_grouping): Removed. * stdio-common/reg-printf.c (__register_printf_specifier): Add libc_hidden_proto and libc_hidden_def. * stdlib/strfmon_l.c (__guess_grouping): Removed. (__vstrfmon_l): Remove the third argument passed to __guess_grouping. --- include/printf.h | 6 +++++- stdio-common/printf_fp.c | 2 -- stdio-common/reg-printf.c | 2 ++ stdlib/strfmon_l.c | 9 +-------- 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/include/printf.h b/include/printf.h index 7b4d209c47..d051514119 100644 --- a/include/printf.h +++ b/include/printf.h @@ -8,7 +8,7 @@ /* Now define the internal interfaces. */ extern int __printf_fphex (FILE *, const struct printf_info *, - const void *const *); + const void *const *) attribute_hidden; extern int __printf_fp (FILE *, const struct printf_info *, const void *const *); libc_hidden_proto (__printf_fp) @@ -16,5 +16,9 @@ extern int __printf_fp_l (FILE *, locale_t, const struct printf_info *, const void *const *); libc_hidden_proto (__printf_fp_l) +extern unsigned int __guess_grouping (unsigned int intdig_max, + const char *grouping) + attribute_hidden; + # endif /* !_ISOMAC */ #endif diff --git a/stdio-common/printf_fp.c b/stdio-common/printf_fp.c index 3ed4037ba5..2633a02cc5 100644 --- a/stdio-common/printf_fp.c +++ b/stdio-common/printf_fp.c @@ -139,8 +139,6 @@ extern mp_size_t __mpn_extract_double (mp_ptr res_ptr, mp_size_t size, extern mp_size_t __mpn_extract_long_double (mp_ptr res_ptr, mp_size_t size, int *expt, int *is_neg, long double value); -extern unsigned int __guess_grouping (unsigned int intdig_max, - const char *grouping); static wchar_t *group_number (wchar_t *buf, wchar_t *bufend, diff --git a/stdio-common/reg-printf.c b/stdio-common/reg-printf.c index cbb9307795..fed5a16a7b 100644 --- a/stdio-common/reg-printf.c +++ b/stdio-common/reg-printf.c @@ -32,6 +32,7 @@ __libc_lock_define_initialized (static, lock) int __register_printf_specifier (int, printf_function, printf_arginfo_size_function); +libc_hidden_proto (__register_printf_specifier) int __register_printf_function (int, printf_function, printf_arginfo_function); @@ -72,6 +73,7 @@ __register_printf_specifier (int spec, printf_function converter, return result; } +libc_hidden_def (__register_printf_specifier) weak_alias (__register_printf_specifier, register_printf_specifier) diff --git a/stdlib/strfmon_l.c b/stdlib/strfmon_l.c index 98554dfe80..1df184e8b2 100644 --- a/stdlib/strfmon_l.c +++ b/stdlib/strfmon_l.c @@ -68,11 +68,6 @@ #define _NL_CURRENT(category, item) \ (current->values[_NL_ITEM_INDEX (item)].string) -/* This function determines the number of digit groups in the output. - The definition is in printf_fp.c. */ -extern unsigned int __guess_grouping (unsigned int intdig_max, - const char *grouping, wchar_t sepchar); - /* We have to overcome some problems with this implementation. On the one hand the strfmon() function is specified in XPG4 and of course @@ -324,9 +319,7 @@ __vstrfmon_l (char *s, size_t maxsize, locale_t loc, const char *format, extra characters this means. */ if (group && left_prec != -1) left_prec += __guess_grouping (left_prec, - _NL_CURRENT (LC_MONETARY, MON_GROUPING), - *_NL_CURRENT (LC_MONETARY, - MON_THOUSANDS_SEP)); + _NL_CURRENT (LC_MONETARY, MON_GROUPING)); /* Now it's time to get the value. */ if (is_long_double == 1) -- 2.13.5