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 a1d84548c8
Author: Ulrich Drepper <drepper@redhat.com>
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.
This commit is contained in:
H.J. Lu 2017-08-22 07:47:34 -07:00
parent a16e8bc08e
commit 20962acbea
5 changed files with 21 additions and 11 deletions

View File

@ -1,3 +1,16 @@
2017-08-22 H.J. Lu <hongjiu.lu@intel.com>
[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.
2017-08-22 Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com> 2017-08-22 Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com>
* math/math.h [defined __cplusplus] (issignaling): Provide a C++ * math/math.h [defined __cplusplus] (issignaling): Provide a C++

View File

@ -8,7 +8,7 @@
/* Now define the internal interfaces. */ /* Now define the internal interfaces. */
extern int __printf_fphex (FILE *, const struct printf_info *, 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 *, extern int __printf_fp (FILE *, const struct printf_info *,
const void *const *); const void *const *);
libc_hidden_proto (__printf_fp) libc_hidden_proto (__printf_fp)
@ -16,5 +16,9 @@ extern int __printf_fp_l (FILE *, locale_t, const struct printf_info *,
const void *const *); const void *const *);
libc_hidden_proto (__printf_fp_l) libc_hidden_proto (__printf_fp_l)
extern unsigned int __guess_grouping (unsigned int intdig_max,
const char *grouping)
attribute_hidden;
# endif /* !_ISOMAC */ # endif /* !_ISOMAC */
#endif #endif

View File

@ -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, extern mp_size_t __mpn_extract_long_double (mp_ptr res_ptr, mp_size_t size,
int *expt, int *is_neg, int *expt, int *is_neg,
long double value); 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, static wchar_t *group_number (wchar_t *buf, wchar_t *bufend,

View File

@ -32,6 +32,7 @@ __libc_lock_define_initialized (static, lock)
int __register_printf_specifier (int, printf_function, int __register_printf_specifier (int, printf_function,
printf_arginfo_size_function); printf_arginfo_size_function);
libc_hidden_proto (__register_printf_specifier)
int __register_printf_function (int, printf_function, int __register_printf_function (int, printf_function,
printf_arginfo_function); printf_arginfo_function);
@ -72,6 +73,7 @@ __register_printf_specifier (int spec, printf_function converter,
return result; return result;
} }
libc_hidden_def (__register_printf_specifier)
weak_alias (__register_printf_specifier, register_printf_specifier) weak_alias (__register_printf_specifier, register_printf_specifier)

View File

@ -68,11 +68,6 @@
#define _NL_CURRENT(category, item) \ #define _NL_CURRENT(category, item) \
(current->values[_NL_ITEM_INDEX (item)].string) (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 /* We have to overcome some problems with this implementation. On the
one hand the strfmon() function is specified in XPG4 and of course 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. */ extra characters this means. */
if (group && left_prec != -1) if (group && left_prec != -1)
left_prec += __guess_grouping (left_prec, left_prec += __guess_grouping (left_prec,
_NL_CURRENT (LC_MONETARY, MON_GROUPING), _NL_CURRENT (LC_MONETARY, MON_GROUPING));
*_NL_CURRENT (LC_MONETARY,
MON_THOUSANDS_SEP));
/* Now it's time to get the value. */ /* Now it's time to get the value. */
if (is_long_double == 1) if (is_long_double == 1)