Message ID | 20230704165554.239581-6-fberat@redhat.com |
---|---|
State | New |
Headers | show |
Series | Allow glibc to be built with _FORTIFY_SOURCE | expand |
On 2023-07-04 12:55, Frédéric Bérat wrote: > If libc_hidden_builtin_{def,proto} isn't properly set for *_chk routines, > there are unwanted PLT entries in libc.so. > > There is a special case with __asprintf_chk: > If ldbl_* macros are used for asprintf, ABI gets broken on s390x, > if it isn't, ppc64le isn't building due to multiple asm redirections. > > This is due to the inclusion of bits/stdio-lbdl.h for ppc64le whereas it > isn't for s390x. This header creates redirections, which are not > compatible with the ones generated using libc_hidden_def. > Yet, we can't use libc_hidden_ldbl_proto on s390x since it will not > create a simple strong alias (e.g. as done on x86_64), but a versioned > alias, leading to ABI breakage. > > This results in errors on s390x: > /usr/bin/ld: glibc/iconv/../libio/bits/stdio2.h:137: undefined reference > to `__asprintf_chk' > > Original __asprintf_chk symbols: > 00000000001395b0 T __asprintf_chk > 0000000000177e90 T __nldbl___asprintf_chk > > __asprintf_chk symbols with ldbl_* macros: > 000000000012d590 t ___asprintf_chk > 000000000012d590 t __asprintf_chk@@GLIBC_2.4 > 000000000012d590 t __GI___asprintf_chk > 000000000012d590 t __GL____asprintf_chk___asprintf_chk > 0000000000172240 T __nldbl___asprintf_chk > > __asprintf_chk symbols with the patch: > 000000000012d590 t ___asprintf_chk > 000000000012d590 T __asprintf_chk > 000000000012d590 t __GI___asprintf_chk > 0000000000172240 T __nldbl___asprintf_chk > --- I'm leaving this one for you Paul. thanks, Sid > debug/asprintf_chk.c | 18 +++++++++++++++++- > debug/fgets_u_chk.c | 1 + > debug/fprintf_chk.c | 1 + > debug/sprintf_chk.c | 1 + > include/stdio.h | 13 ++++++++++++- > .../ldbl-128ibm-compat/ieee128-asprintf_chk.c | 1 + > .../ldbl-128ibm-compat/ieee128-fprintf_chk.c | 1 + > .../ldbl-128ibm-compat/ieee128-sprintf_chk.c | 1 + > .../ldbl-128ibm-compat/ieee128-vsprintf_chk.c | 1 + > 9 files changed, 36 insertions(+), 2 deletions(-) > > diff --git a/debug/asprintf_chk.c b/debug/asprintf_chk.c > index 651c2cd76b..e233d5d737 100644 > --- a/debug/asprintf_chk.c > +++ b/debug/asprintf_chk.c > @@ -22,7 +22,7 @@ > /* Write formatted output from FORMAT to a string which is > allocated with malloc and stored in *STRING_PTR. */ > int > -__asprintf_chk (char **result_ptr, int flag, const char *format, ...) > +___asprintf_chk (char **result_ptr, int flag, const char *format, ...) > { > /* For flag > 0 (i.e. __USE_FORTIFY_LEVEL > 1) request that %n > can only come from read-only format strings. */ > @@ -36,3 +36,19 @@ __asprintf_chk (char **result_ptr, int flag, const char *format, ...) > > return ret; > } > +#if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 > +/* This is needed since <bits/stdio-lbdl.h> is included in this case, leading to > + * multiple asm redirection of the same symbol > + */ > +ldbl_hidden_def (___asprintf_chk, __asprintf_chk) > +ldbl_strong_alias (___asprintf_chk, __asprintf_chk) > +#else > +/* On some systems introduction of ldbl_* macros lead to ABI breakage due to the > + * long_double_symbol aliasing, e.g. on s390x: > + * /usr/bin/ld: glibc/iconv/../libio/bits/stdio2.h:137: undefined reference to > + * `__asprintf_chk' > + * Due to __asprintf_chk@@GLIBC_2.4 alias replacing __asprintf_chk. > + */ > +strong_alias (___asprintf_chk, __asprintf_chk) > +libc_hidden_def (__asprintf_chk) > +#endif > diff --git a/debug/fgets_u_chk.c b/debug/fgets_u_chk.c > index a16ba655e6..74275381f5 100644 > --- a/debug/fgets_u_chk.c > +++ b/debug/fgets_u_chk.c > @@ -56,3 +56,4 @@ __fgets_unlocked_chk (char *buf, size_t size, int n, FILE *fp) > fp->_flags |= old_error; > return result; > } > +libc_hidden_builtin_def (__fgets_unlocked_chk) > diff --git a/debug/fprintf_chk.c b/debug/fprintf_chk.c > index b57d538d03..273051ef91 100644 > --- a/debug/fprintf_chk.c > +++ b/debug/fprintf_chk.c > @@ -35,4 +35,5 @@ ___fprintf_chk (FILE *fp, int flag, const char *format, ...) > > return ret; > } > +ldbl_hidden_def (___fprintf_chk, __fprintf_chk) > ldbl_strong_alias (___fprintf_chk, __fprintf_chk) > diff --git a/debug/sprintf_chk.c b/debug/sprintf_chk.c > index b27f4afae8..e45f1e7b3b 100644 > --- a/debug/sprintf_chk.c > +++ b/debug/sprintf_chk.c > @@ -42,4 +42,5 @@ ___sprintf_chk (char *s, int flag, size_t slen, const char *format, ...) > > return ret; > } > +ldbl_hidden_def (___sprintf_chk, __sprintf_chk) > ldbl_strong_alias (___sprintf_chk, __sprintf_chk) > diff --git a/include/stdio.h b/include/stdio.h > index da47d1ce99..6755877911 100644 > --- a/include/stdio.h > +++ b/include/stdio.h > @@ -276,7 +276,18 @@ extern FILE *__open_memstream (char **, size_t *) __THROW __wur; > libc_hidden_proto (__open_memstream) > libc_hidden_proto (__libc_fatal) > rtld_hidden_proto (__libc_fatal) > -libc_hidden_proto (__vsprintf_chk) > + > +libc_hidden_proto (__fgets_unlocked_chk) > + > +#if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 > +libc_hidden_ldbl_proto (__asprintf_chk) > +#else > +libc_hidden_proto (__asprintf_chk) > +#endif > + > +libc_hidden_ldbl_proto (__fprintf_chk) > +libc_hidden_ldbl_proto (__sprintf_chk) > +libc_hidden_ldbl_proto (__vsprintf_chk) > > extern FILE * __fmemopen (void *buf, size_t len, const char *mode); > libc_hidden_proto (__fmemopen) > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-asprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-asprintf_chk.c > index fbf953a728..6e93ee81fc 100644 > --- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-asprintf_chk.c > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-asprintf_chk.c > @@ -35,4 +35,5 @@ ___ieee128___asprintf_chk (char **string_ptr, int flag, const char *format, ...) > > return done; > } > +hidden_def (___ieee128___asprintf_chk) > strong_alias (___ieee128___asprintf_chk, __asprintf_chkieee128) > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf_chk.c > index bd10e9c3db..e0865b6663 100644 > --- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf_chk.c > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf_chk.c > @@ -35,4 +35,5 @@ ___ieee128___fprintf_chk (FILE *fp, int flag, const char *format, ...) > > return done; > } > +hidden_def (___ieee128___fprintf_chk) > strong_alias (___ieee128___fprintf_chk, __fprintf_chkieee128) > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf_chk.c > index 0039c3b53d..762757a5c7 100644 > --- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf_chk.c > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf_chk.c > @@ -43,4 +43,5 @@ ___ieee128___sprintf_chk (char *s, int flag, size_t slen, > > return done; > } > +hidden_def (___ieee128___sprintf_chk) > strong_alias (___ieee128___sprintf_chk, __sprintf_chkieee128) > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vsprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vsprintf_chk.c > index 22137269c0..c251b60d4e 100644 > --- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vsprintf_chk.c > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vsprintf_chk.c > @@ -35,4 +35,5 @@ ___ieee128___vsprintf_chk (char *string, int flag, size_t slen, > > return __vsprintf_internal (string, slen, format, ap, mode); > } > +hidden_def (___ieee128___vsprintf_chk) > strong_alias (___ieee128___vsprintf_chk, __vsprintf_chkieee128)
On 7/4/23 12:55, Frédéric Bérat via Libc-alpha wrote: > If libc_hidden_builtin_{def,proto} isn't properly set for *_chk routines, > there are unwanted PLT entries in libc.so. > > There is a special case with __asprintf_chk: > If ldbl_* macros are used for asprintf, ABI gets broken on s390x, > if it isn't, ppc64le isn't building due to multiple asm redirections. OK. > This is due to the inclusion of bits/stdio-lbdl.h for ppc64le whereas it > isn't for s390x. This header creates redirections, which are not > compatible with the ones generated using libc_hidden_def. > Yet, we can't use libc_hidden_ldbl_proto on s390x since it will not > create a simple strong alias (e.g. as done on x86_64), but a versioned > alias, leading to ABI breakage. LGTM. I would like to see this move forward for the release. We are in the release freeze. Reviewed-by: Carlos O'Donell <carlos@redhat.com> > This results in errors on s390x: > /usr/bin/ld: glibc/iconv/../libio/bits/stdio2.h:137: undefined reference > to `__asprintf_chk' > > Original __asprintf_chk symbols: > 00000000001395b0 T __asprintf_chk > 0000000000177e90 T __nldbl___asprintf_chk > > __asprintf_chk symbols with ldbl_* macros: > 000000000012d590 t ___asprintf_chk > 000000000012d590 t __asprintf_chk@@GLIBC_2.4 > 000000000012d590 t __GI___asprintf_chk > 000000000012d590 t __GL____asprintf_chk___asprintf_chk > 0000000000172240 T __nldbl___asprintf_chk > > __asprintf_chk symbols with the patch: > 000000000012d590 t ___asprintf_chk > 000000000012d590 T __asprintf_chk > 000000000012d590 t __GI___asprintf_chk > 0000000000172240 T __nldbl___asprintf_chk > --- > debug/asprintf_chk.c | 18 +++++++++++++++++- > debug/fgets_u_chk.c | 1 + > debug/fprintf_chk.c | 1 + > debug/sprintf_chk.c | 1 + > include/stdio.h | 13 ++++++++++++- > .../ldbl-128ibm-compat/ieee128-asprintf_chk.c | 1 + > .../ldbl-128ibm-compat/ieee128-fprintf_chk.c | 1 + > .../ldbl-128ibm-compat/ieee128-sprintf_chk.c | 1 + > .../ldbl-128ibm-compat/ieee128-vsprintf_chk.c | 1 + > 9 files changed, 36 insertions(+), 2 deletions(-) > > diff --git a/debug/asprintf_chk.c b/debug/asprintf_chk.c > index 651c2cd76b..e233d5d737 100644 > --- a/debug/asprintf_chk.c > +++ b/debug/asprintf_chk.c > @@ -22,7 +22,7 @@ > /* Write formatted output from FORMAT to a string which is > allocated with malloc and stored in *STRING_PTR. */ > int > -__asprintf_chk (char **result_ptr, int flag, const char *format, ...) > +___asprintf_chk (char **result_ptr, int flag, const char *format, ...) OK. Adds extra underscore to differentiate the redirects. > { > /* For flag > 0 (i.e. __USE_FORTIFY_LEVEL > 1) request that %n > can only come from read-only format strings. */ > @@ -36,3 +36,19 @@ __asprintf_chk (char **result_ptr, int flag, const char *format, ...) > > return ret; > } > +#if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 > +/* This is needed since <bits/stdio-lbdl.h> is included in this case, leading to > + * multiple asm redirection of the same symbol > + */ > +ldbl_hidden_def (___asprintf_chk, __asprintf_chk) > +ldbl_strong_alias (___asprintf_chk, __asprintf_chk) > +#else > +/* On some systems introduction of ldbl_* macros lead to ABI breakage due to the > + * long_double_symbol aliasing, e.g. on s390x: > + * /usr/bin/ld: glibc/iconv/../libio/bits/stdio2.h:137: undefined reference to > + * `__asprintf_chk' > + * Due to __asprintf_chk@@GLIBC_2.4 alias replacing __asprintf_chk. > + */ > +strong_alias (___asprintf_chk, __asprintf_chk) > +libc_hidden_def (__asprintf_chk) OK. > +#endif > diff --git a/debug/fgets_u_chk.c b/debug/fgets_u_chk.c > index a16ba655e6..74275381f5 100644 > --- a/debug/fgets_u_chk.c > +++ b/debug/fgets_u_chk.c > @@ -56,3 +56,4 @@ __fgets_unlocked_chk (char *buf, size_t size, int n, FILE *fp) > fp->_flags |= old_error; > return result; > } > +libc_hidden_builtin_def (__fgets_unlocked_chk) OK. > diff --git a/debug/fprintf_chk.c b/debug/fprintf_chk.c > index b57d538d03..273051ef91 100644 > --- a/debug/fprintf_chk.c > +++ b/debug/fprintf_chk.c > @@ -35,4 +35,5 @@ ___fprintf_chk (FILE *fp, int flag, const char *format, ...) > > return ret; > } > +ldbl_hidden_def (___fprintf_chk, __fprintf_chk) OK. > ldbl_strong_alias (___fprintf_chk, __fprintf_chk) > diff --git a/debug/sprintf_chk.c b/debug/sprintf_chk.c > index b27f4afae8..e45f1e7b3b 100644 > --- a/debug/sprintf_chk.c > +++ b/debug/sprintf_chk.c > @@ -42,4 +42,5 @@ ___sprintf_chk (char *s, int flag, size_t slen, const char *format, ...) > > return ret; > } > +ldbl_hidden_def (___sprintf_chk, __sprintf_chk) OK. > ldbl_strong_alias (___sprintf_chk, __sprintf_chk) > diff --git a/include/stdio.h b/include/stdio.h > index da47d1ce99..6755877911 100644 > --- a/include/stdio.h > +++ b/include/stdio.h > @@ -276,7 +276,18 @@ extern FILE *__open_memstream (char **, size_t *) __THROW __wur; > libc_hidden_proto (__open_memstream) > libc_hidden_proto (__libc_fatal) > rtld_hidden_proto (__libc_fatal) > -libc_hidden_proto (__vsprintf_chk) > + > +libc_hidden_proto (__fgets_unlocked_chk) > + > +#if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 > +libc_hidden_ldbl_proto (__asprintf_chk) > +#else > +libc_hidden_proto (__asprintf_chk) > +#endif > + > +libc_hidden_ldbl_proto (__fprintf_chk) > +libc_hidden_ldbl_proto (__sprintf_chk) > +libc_hidden_ldbl_proto (__vsprintf_chk) OK. > > extern FILE * __fmemopen (void *buf, size_t len, const char *mode); > libc_hidden_proto (__fmemopen) > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-asprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-asprintf_chk.c > index fbf953a728..6e93ee81fc 100644 > --- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-asprintf_chk.c > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-asprintf_chk.c > @@ -35,4 +35,5 @@ ___ieee128___asprintf_chk (char **string_ptr, int flag, const char *format, ...) > > return done; > } > +hidden_def (___ieee128___asprintf_chk) OK. > strong_alias (___ieee128___asprintf_chk, __asprintf_chkieee128) > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf_chk.c > index bd10e9c3db..e0865b6663 100644 > --- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf_chk.c > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf_chk.c > @@ -35,4 +35,5 @@ ___ieee128___fprintf_chk (FILE *fp, int flag, const char *format, ...) > > return done; > } > +hidden_def (___ieee128___fprintf_chk) OK. > strong_alias (___ieee128___fprintf_chk, __fprintf_chkieee128) > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf_chk.c > index 0039c3b53d..762757a5c7 100644 > --- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf_chk.c > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf_chk.c > @@ -43,4 +43,5 @@ ___ieee128___sprintf_chk (char *s, int flag, size_t slen, > > return done; > } > +hidden_def (___ieee128___sprintf_chk) OK. > strong_alias (___ieee128___sprintf_chk, __sprintf_chkieee128) > diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vsprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vsprintf_chk.c > index 22137269c0..c251b60d4e 100644 > --- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vsprintf_chk.c > +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vsprintf_chk.c > @@ -35,4 +35,5 @@ ___ieee128___vsprintf_chk (char *string, int flag, size_t slen, > > return __vsprintf_internal (string, slen, format, ap, mode); > } > +hidden_def (___ieee128___vsprintf_chk) OK. > strong_alias (___ieee128___vsprintf_chk, __vsprintf_chkieee128)
On 7/4/23 6:49 PM, Siddhesh Poyarekar wrote: > On 2023-07-04 12:55, Frédéric Bérat wrote: >> If libc_hidden_builtin_{def,proto} isn't properly set for *_chk routines, >> there are unwanted PLT entries in libc.so. >> >> There is a special case with __asprintf_chk: >> If ldbl_* macros are used for asprintf, ABI gets broken on s390x, >> if it isn't, ppc64le isn't building due to multiple asm redirections. >> >> This is due to the inclusion of bits/stdio-lbdl.h for ppc64le whereas it >> isn't for s390x. This header creates redirections, which are not >> compatible with the ones generated using libc_hidden_def. >> Yet, we can't use libc_hidden_ldbl_proto on s390x since it will not >> create a simple strong alias (e.g. as done on x86_64), but a versioned >> alias, leading to ABI breakage. >> >> This results in errors on s390x: >> /usr/bin/ld: glibc/iconv/../libio/bits/stdio2.h:137: undefined reference >> to `__asprintf_chk' >> >> Original __asprintf_chk symbols: >> 00000000001395b0 T __asprintf_chk >> 0000000000177e90 T __nldbl___asprintf_chk >> >> __asprintf_chk symbols with ldbl_* macros: >> 000000000012d590 t ___asprintf_chk >> 000000000012d590 t __asprintf_chk@@GLIBC_2.4 >> 000000000012d590 t __GI___asprintf_chk >> 000000000012d590 t __GL____asprintf_chk___asprintf_chk >> 0000000000172240 T __nldbl___asprintf_chk >> >> __asprintf_chk symbols with the patch: >> 000000000012d590 t ___asprintf_chk >> 000000000012d590 T __asprintf_chk >> 000000000012d590 t __GI___asprintf_chk >> 0000000000172240 T __nldbl___asprintf_chk >> --- > > I'm leaving this one for you Paul. __asprintf_chk is an oddball as it was introduced in 2.8, but all the current targets who switched to a distinct long double switched, did so at 2.4. For those targets, they shouldn't be using any ldbl macros, there was never a concern for backwards compatibility. powerpc64le is where things get weird. Internally, everything is compiled to use ibm long double. I suspect the special cases can be removed entirely, I think they only get used when building the nldbl/ieee128 variants of __asprintf_chk. These variants should never need any internal PLT redirection. I don't think the special case for them is needed, but should be harmless. I think this patch is OK.
diff --git a/debug/asprintf_chk.c b/debug/asprintf_chk.c index 651c2cd76b..e233d5d737 100644 --- a/debug/asprintf_chk.c +++ b/debug/asprintf_chk.c @@ -22,7 +22,7 @@ /* Write formatted output from FORMAT to a string which is allocated with malloc and stored in *STRING_PTR. */ int -__asprintf_chk (char **result_ptr, int flag, const char *format, ...) +___asprintf_chk (char **result_ptr, int flag, const char *format, ...) { /* For flag > 0 (i.e. __USE_FORTIFY_LEVEL > 1) request that %n can only come from read-only format strings. */ @@ -36,3 +36,19 @@ __asprintf_chk (char **result_ptr, int flag, const char *format, ...) return ret; } +#if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 +/* This is needed since <bits/stdio-lbdl.h> is included in this case, leading to + * multiple asm redirection of the same symbol + */ +ldbl_hidden_def (___asprintf_chk, __asprintf_chk) +ldbl_strong_alias (___asprintf_chk, __asprintf_chk) +#else +/* On some systems introduction of ldbl_* macros lead to ABI breakage due to the + * long_double_symbol aliasing, e.g. on s390x: + * /usr/bin/ld: glibc/iconv/../libio/bits/stdio2.h:137: undefined reference to + * `__asprintf_chk' + * Due to __asprintf_chk@@GLIBC_2.4 alias replacing __asprintf_chk. + */ +strong_alias (___asprintf_chk, __asprintf_chk) +libc_hidden_def (__asprintf_chk) +#endif diff --git a/debug/fgets_u_chk.c b/debug/fgets_u_chk.c index a16ba655e6..74275381f5 100644 --- a/debug/fgets_u_chk.c +++ b/debug/fgets_u_chk.c @@ -56,3 +56,4 @@ __fgets_unlocked_chk (char *buf, size_t size, int n, FILE *fp) fp->_flags |= old_error; return result; } +libc_hidden_builtin_def (__fgets_unlocked_chk) diff --git a/debug/fprintf_chk.c b/debug/fprintf_chk.c index b57d538d03..273051ef91 100644 --- a/debug/fprintf_chk.c +++ b/debug/fprintf_chk.c @@ -35,4 +35,5 @@ ___fprintf_chk (FILE *fp, int flag, const char *format, ...) return ret; } +ldbl_hidden_def (___fprintf_chk, __fprintf_chk) ldbl_strong_alias (___fprintf_chk, __fprintf_chk) diff --git a/debug/sprintf_chk.c b/debug/sprintf_chk.c index b27f4afae8..e45f1e7b3b 100644 --- a/debug/sprintf_chk.c +++ b/debug/sprintf_chk.c @@ -42,4 +42,5 @@ ___sprintf_chk (char *s, int flag, size_t slen, const char *format, ...) return ret; } +ldbl_hidden_def (___sprintf_chk, __sprintf_chk) ldbl_strong_alias (___sprintf_chk, __sprintf_chk) diff --git a/include/stdio.h b/include/stdio.h index da47d1ce99..6755877911 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -276,7 +276,18 @@ extern FILE *__open_memstream (char **, size_t *) __THROW __wur; libc_hidden_proto (__open_memstream) libc_hidden_proto (__libc_fatal) rtld_hidden_proto (__libc_fatal) -libc_hidden_proto (__vsprintf_chk) + +libc_hidden_proto (__fgets_unlocked_chk) + +#if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 +libc_hidden_ldbl_proto (__asprintf_chk) +#else +libc_hidden_proto (__asprintf_chk) +#endif + +libc_hidden_ldbl_proto (__fprintf_chk) +libc_hidden_ldbl_proto (__sprintf_chk) +libc_hidden_ldbl_proto (__vsprintf_chk) extern FILE * __fmemopen (void *buf, size_t len, const char *mode); libc_hidden_proto (__fmemopen) diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-asprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-asprintf_chk.c index fbf953a728..6e93ee81fc 100644 --- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-asprintf_chk.c +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-asprintf_chk.c @@ -35,4 +35,5 @@ ___ieee128___asprintf_chk (char **string_ptr, int flag, const char *format, ...) return done; } +hidden_def (___ieee128___asprintf_chk) strong_alias (___ieee128___asprintf_chk, __asprintf_chkieee128) diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf_chk.c index bd10e9c3db..e0865b6663 100644 --- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf_chk.c +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf_chk.c @@ -35,4 +35,5 @@ ___ieee128___fprintf_chk (FILE *fp, int flag, const char *format, ...) return done; } +hidden_def (___ieee128___fprintf_chk) strong_alias (___ieee128___fprintf_chk, __fprintf_chkieee128) diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf_chk.c index 0039c3b53d..762757a5c7 100644 --- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf_chk.c +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf_chk.c @@ -43,4 +43,5 @@ ___ieee128___sprintf_chk (char *s, int flag, size_t slen, return done; } +hidden_def (___ieee128___sprintf_chk) strong_alias (___ieee128___sprintf_chk, __sprintf_chkieee128) diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vsprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vsprintf_chk.c index 22137269c0..c251b60d4e 100644 --- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vsprintf_chk.c +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vsprintf_chk.c @@ -35,4 +35,5 @@ ___ieee128___vsprintf_chk (char *string, int flag, size_t slen, return __vsprintf_internal (string, slen, format, ap, mode); } +hidden_def (___ieee128___vsprintf_chk) strong_alias (___ieee128___vsprintf_chk, __vsprintf_chkieee128)