[PATCH 1/2] Redirect mempcpy and stpcpy only in libc.a

H.J. Lu hjl.tools@gmail.com
Thu Jan 2 21:29:48 GMT 2025


On Fri, Jan 3, 2025 at 1:17 AM Sam James <sam@gentoo.org> wrote:
>
> "H.J. Lu" <hjl.tools@gmail.com> writes:
>
> > Within libc, __mempcpy and __stpcpy are defined as macros which call
> > __builtin_mempcpy and __builtin_stpcpy which may end up calling the C
> > functions mempcpy and __stpcpy.  In libc.so, libc_hidden_builtin_proto
> > ensures that calls to those C functions are in turn mapped to call
> > __GI_mempcpy and __GI_stpcpy.  In libc.a, mempcpy and stpcpy may be
> > called which pollutes the ISO C namespace.  include/string.h contains
> >
> > extern __typeof (mempcpy) mempcpy __asm__ ("__mempcpy");
> > extern __typeof (stpcpy) stpcpy __asm__ ("__stpcpy");
> >
> > to redirect mempcpy and stpcpy to __mempcpy and __stpcpy.  Since mempcpy
> > and stpcpy macros are only defined and used within libc, limit these
> > redirections to libc.a to avoid Clang error:
> >
> > In file included from tst-iconv-sticky-input-error.c:22:
> > In file included from ./gconv_int.h:24:
> > ../include/string.h:182:44: error: attribute declaration must precede definition [-Werror,-Wignored-attributes]
> >   182 | extern __typeof (mempcpy) mempcpy __asm__ ("__mempcpy");
> >       |                                            ^
> > ../string/bits/string_fortified.h:42:8: note: previous definition is here
> >    42 | __NTH (mempcpy (void *__restrict __dest, const void *__restrict __src,
> >       |        ^
> >
> > when testing with Clang for fortify build.
> >
> > Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
>
> Can you include that reference to
> 18b10de7ced9e9c3843299fb600e40b11af3e0af?
>
> With that added: Reviewed-by: Sam James <sam@gentoo.org>

Done.  This is what I am checking in.

Thanks.

> > ---
> >  include/string.h | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/include/string.h b/include/string.h
> > index 3b4c6007d7..1f6aef9f93 100644
> > --- a/include/string.h
> > +++ b/include/string.h
> > @@ -175,7 +175,7 @@ extern __typeof (strnlen) strnlen attribute_hidden;
> >  extern __typeof (strsep) strsep attribute_hidden;
> >  #endif
> >
> > -#if (!IS_IN (libc) || !defined SHARED) \
> > +#if IS_IN (libc) && !defined SHARED \
> >    && !defined NO_MEMPCPY_STPCPY_REDIRECT
> >  /* Redirect calls to __builtin_mempcpy and __builtin_stpcpy to call
> >     __mempcpy and __stpcpy if not inlined.  */



-- 
H.J.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Redirect-mempcpy-and-stpcpy-only-in-libc.a.patch
Type: text/x-patch
Size: 2772 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/libc-alpha/attachments/20250103/a8ca7d1d/attachment.bin>


More information about the Libc-alpha mailing list