aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2017-08-22 07:47:34 -0700
committerH.J. Lu <hjl.tools@gmail.com>2017-08-22 07:50:57 -0700
commit20962acbea349b372311a727621c860006be3fab (patch)
tree4081bbaec7c838701452164cf6b0bfa2b8f70b43
parenta16e8bc08edca84d507715c66d6cddbbc7ed3b62 (diff)
downloadglibc-20962acbea349b372311a727621c860006be3fab.zip
glibc-20962acbea349b372311a727621c860006be3fab.tar.gz
glibc-20962acbea349b372311a727621c860006be3fab.tar.bz2
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 <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.
-rw-r--r--ChangeLog13
-rw-r--r--include/printf.h6
-rw-r--r--stdio-common/printf_fp.c2
-rw-r--r--stdio-common/reg-printf.c2
-rw-r--r--stdlib/strfmon_l.c9
5 files changed, 21 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 30fb2b1..3954f25 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
* math/math.h [defined __cplusplus] (issignaling): Provide a C++
diff --git a/include/printf.h b/include/printf.h
index 7b4d209..d051514 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 3ed4037..2633a02 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 cbb9307..fed5a16 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 98554df..1df184e 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)