x86: Make strncmp usable from rtld

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).

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
This commit is contained in:
Florian Weimer 2018-06-12 15:00:33 +02:00
parent c4ad5782c4
commit e826574c98
3 changed files with 16 additions and 5 deletions

View File

@ -1,3 +1,11 @@
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).
2018-06-12 Rafal Luzynski <digitalfreak@lingonborough.com>
[BZ #23140]

View File

@ -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) \

View File

@ -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>