]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Make multi-arch ifunc support work with clang
authorStan Shebs <stanshebs@google.com>
Tue, 8 Oct 2019 20:00:12 +0000 (13:00 -0700)
committerFangrui Song <i@maskray.me>
Sat, 28 Aug 2021 00:26:02 +0000 (17:26 -0700)
elf/Makefile
sysdeps/x86_64/fpu/multiarch/Makefile
sysdeps/x86_64/multiarch/strcmp-sse42.S

index 3009c0d316c557f7a35d1e7838a15abb9b0121cf..827fe13178c9939f11f2a22adadeb01f57a99f9a 100644 (file)
@@ -336,11 +336,15 @@ tests-static += $(tests-ifuncstatic)
 tests-internal += $(tests-ifuncstatic)
 ifeq (yes,$(build-shared))
 tests-internal += \
-        ifuncmain1 ifuncmain1pic ifuncmain1vis ifuncmain1vispic \
+        ifuncmain1pic ifuncmain1vis ifuncmain1vispic \
         ifuncmain1staticpic \
         ifuncmain2 ifuncmain2pic ifuncmain3 ifuncmain4 \
-        ifuncmain5 ifuncmain5pic ifuncmain5staticpic \
+        ifuncmain5pic ifuncmain5staticpic \
         ifuncmain7 ifuncmain7pic
+ifneq ($(with-clang),yes)
+# Skip over tests where lld errors with "cannot preempt symbol"
+tests-internal += ifuncmain1 ifuncmain5
+endif
 ifunc-test-modules = ifuncdep1 ifuncdep1pic ifuncdep2 ifuncdep2pic \
                     ifuncdep5 ifuncdep5pic
 extra-test-objs += $(ifunc-test-modules:=.o)
index 9a89bfc286413fd86ac25a5401c28f8d7e448a3c..13125c7f1b7e7568b6a89bb493ba7452a67b6858 100644 (file)
@@ -85,16 +85,21 @@ libm-sysdep_routines += e_exp-avx e_log-avx s_atan-avx \
                        mplog-avx mpa-avx slowexp-avx \
                        mpexp-avx
 
-CFLAGS-e_atan2-avx.c = -msse2avx -DSSE2AVX
-CFLAGS-e_exp-avx.c = -msse2avx -DSSE2AVX
-CFLAGS-e_log-avx.c = -msse2avx -DSSE2AVX
-CFLAGS-mpa-avx.c = -msse2avx -DSSE2AVX
-CFLAGS-mpexp-avx.c = -msse2avx -DSSE2AVX
-CFLAGS-mplog-avx.c = -msse2avx -DSSE2AVX
-CFLAGS-s_atan-avx.c = -msse2avx -DSSE2AVX
-CFLAGS-s_sin-avx.c = -msse2avx -DSSE2AVX
-CFLAGS-slowexp-avx.c = -msse2avx -DSSE2AVX
-CFLAGS-s_tan-avx.c = -msse2avx -DSSE2AVX
+sse2avx-flags = -msse2avx -DSSE2AVX
+ifeq ($(with-clang),yes)
+sse2avx-flags = -DSSE2AVX
+endif
+
+CFLAGS-e_atan2-avx.c = $(sse2avx-flags)
+CFLAGS-e_exp-avx.c = $(sse2avx-flags)
+CFLAGS-e_log-avx.c = $(sse2avx-flags)
+CFLAGS-mpa-avx.c = $(sse2avx-flags)
+CFLAGS-mpexp-avx.c = $(sse2avx-flags)
+CFLAGS-mplog-avx.c = $(sse2avx-flags)
+CFLAGS-s_atan-avx.c = $(sse2avx-flags)
+CFLAGS-s_sin-avx.c = $(sse2avx-flags)
+CFLAGS-slowexp-avx.c = $(sse2avx-flags)
+CFLAGS-s_tan-avx.c = $(sse2avx-flags)
 endif
 
 ifeq ($(subdir),mathvec)
index 6fa0c2c7d257c1a0f825b64987997e15fa5a8dad..8faba15b2716560b3f9b46d35d569e490ecae4b8 100644 (file)
@@ -1770,8 +1770,9 @@ LABEL(strcmp_exitz):
        .p2align 4
        // XXX Same as code above
 LABEL(Byte0):
-       movzx   (%rsi), %ecx
-       movzx   (%rdi), %eax
+       # Clang assembler objects to movzx here.
+       movzbl  (%rsi), %ecx
+       movzbl  (%rdi), %eax
 
 #if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
        leaq    _nl_C_LC_CTYPE_tolower+128*4(%rip), %rdx