This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] x86: Make strncmp usable from rtld
- From: Carlos O'Donell <carlos at redhat dot com>
- To: Florian Weimer <fweimer at redhat dot com>, libc-alpha at sourceware dot org
- Date: Tue, 12 Jun 2018 08:59:34 -0400
- Subject: Re: [PATCH] x86: Make strncmp usable from rtld
- References: <20180612124655.F196E439942E1@oldenburg.str.redhat.com>
On 06/12/2018 08:46 AM, Florian Weimer wrote:
> Due to the way the conditions were written, the rtld build of strncmp
> ended up with no definition of the strncmp symbol at all: The
> implementations were renamed for use within an IFUNC resolver, but the
> IFUNC resolver itself was missing (because rtld does not use IFUNCs).
>
> 2018-06-12 Florian Weimer <fweimer@redhat.com>
>
> x86: Make strncmp usable from rtld.
> * sysdeps/i386/i686/multiarch/strncmp-c.c: Only rename strncmp to
> __strncmp_ia32 if in libc (and not in rtld).
> * sysdeps/x86_64/multiarch/strncmp-sse2.S: Rename strcmp to
> strncmp if not in libc (and not to __strncmp_sse2).
This looks good to me.
I tested this on x86_64 and tested by adding code which calls strncmp from
early load.
It allows me to use strncmp in early dl-load.o* to simplify the logic
in is_dst().
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
> diff --git a/sysdeps/i386/i686/multiarch/strncmp-c.c b/sysdeps/i386/i686/multiarch/strncmp-c.c
> index cc059da494..2e3eca9b2b 100644
> --- a/sysdeps/i386/i686/multiarch/strncmp-c.c
> +++ b/sysdeps/i386/i686/multiarch/strncmp-c.c
> @@ -1,4 +1,4 @@
> -#ifdef SHARED
> +#if defined (SHARED) && IS_IN (libc)
> # define STRNCMP __strncmp_ia32
> # undef libc_hidden_builtin_def
> # define libc_hidden_builtin_def(name) \
> diff --git a/sysdeps/x86_64/multiarch/strncmp-sse2.S b/sysdeps/x86_64/multiarch/strncmp-sse2.S
> index cc5252d826..a5ecb82b13 100644
> --- a/sysdeps/x86_64/multiarch/strncmp-sse2.S
> +++ b/sysdeps/x86_64/multiarch/strncmp-sse2.S
> @@ -18,10 +18,13 @@
>
> #include <sysdep.h>
>
> -#define STRCMP __strncmp_sse2
> -
> -#undef libc_hidden_builtin_def
> -#define libc_hidden_builtin_def(strcmp)
> +#if IS_IN (libc)
> +# define STRCMP __strncmp_sse2
> +# undef libc_hidden_builtin_def
> +# define libc_hidden_builtin_def(strcmp)
> +#else
> +# define STRCMP strncmp
> +#endif
>
> #define USE_AS_STRNCMP
> #include <sysdeps/x86_64/strcmp.S>
>