From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qv1-xf36.google.com (mail-qv1-xf36.google.com [IPv6:2607:f8b0:4864:20::f36]) by sourceware.org (Postfix) with ESMTPS id AEF92385703C for ; Mon, 8 Aug 2022 22:16:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org AEF92385703C Received: by mail-qv1-xf36.google.com with SMTP id mk9so7351392qvb.11 for ; Mon, 08 Aug 2022 15:16:37 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc; bh=9F+7dNORn36rerlCv3tqUPb0ir8cXh9N3EfG/P5th7I=; b=D3yAkETHcG3AK7UItI+WVNzmQhSNrUzjppo8L0MxmViGb3z0dtImZIHDzir+diWvPJ y5dt6B0YNjk2UgUO/X5jZswhkpnwdP7JD044kduOLnIegCBgkQYIFr1zoE+1dCzrvSUE xZIhXxIqecfWTv4uGAmn8y67mRWL9UK8D3hHqSMEx4rAkbxk/2DHNudL3AlhpyTdqR3I 9b780yvG24VRrkG30/2zwbCsogGP/kVflj+2yvh57HlWsS9chLwfCbGyr3YpDCqfxxDm DHOpoeMh2VxPjYEthoKSHadAtyf+A20NjZ7vNi8KSjfMIRsk+kozD9AsKiZIOBN+wD+T 9Xxg== X-Gm-Message-State: ACgBeo3szD+WfBZIw4cMqKZ/YD1h4A4urR5Got4H1SncB31gWfSGo5u7 TjyL7LWgZuCywWLvxHlrycwkHiFDE0bNFqUq48o= X-Google-Smtp-Source: AA6agR6oGWnutLs8IT1BY3yi2UDAJmNuvdKx7j3Me9ihNajbcPz+yHtCHfejJXwXJWZc6GAH82rBs63Cn0SwH5FCUi8= X-Received: by 2002:a05:6214:21e8:b0:476:8d19:f611 with SMTP id p8-20020a05621421e800b004768d19f611mr18003005qvj.128.1659996996734; Mon, 08 Aug 2022 15:16:36 -0700 (PDT) MIME-Version: 1.0 References: <20220808200021.763123-1-adhemerval.zanella@linaro.org> In-Reply-To: <20220808200021.763123-1-adhemerval.zanella@linaro.org> From: "H.J. Lu" Date: Mon, 8 Aug 2022 15:16:00 -0700 Message-ID: Subject: Re: [PATCH] elf: Remove -fno-tree-loop-distribute-patterns usage on dl-support To: Adhemerval Zanella Cc: GNU C Library Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-3023.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, KAM_STOCKGEN, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Aug 2022 22:16:42 -0000 On Mon, Aug 8, 2022 at 1:00 PM Adhemerval Zanella via Libc-alpha wrote: > > Besides the option being gcc specific, this approach is still fragile > and not future proof since we do not if this will be the only > optimization option gcc will add that transform loops to memset > (or any libcall). > > The patch add a new internal __memset_generic internal symbol on all > ports and an extra symbol redirection to header to include on TU that > required it. The new header with the asm redirection is set per TU > because the issue is very specific for glibc on binary loading, the > default hidden_def symbol is used on default code. > > Checked on x86_64-linux-gnu and aarch64-linux-gnu. > --- > benchtests/bench-bzero-large.c | 1 + > benchtests/bench-bzero-walk.c | 1 + > benchtests/bench-bzero.c | 1 + > benchtests/bench-memset-large.c | 1 + > benchtests/bench-memset-walk.c | 1 + > benchtests/bench-memset.c | 1 + > elf/Makefile | 5 ---- > elf/dl-support.c | 1 + > elf/dl-symbol-hacks.h | 29 +++++++++++++++++++ > string/memset.c | 1 + > sysdeps/aarch64/multiarch/rtld-memset.S | 1 + > sysdeps/alpha/memset.S | 1 + > sysdeps/arm/memset.S | 1 + > sysdeps/csky/abiv2/memset.S | 1 + > sysdeps/i386/i586/memset.S | 1 + > sysdeps/i386/i686/memset.S | 1 + > sysdeps/i386/i686/multiarch/memset-ia32.S | 5 ++++ > sysdeps/i386/memset.S | 1 + > sysdeps/ia64/memset.S | 1 + > sysdeps/mips/memset.S | 1 + > sysdeps/powerpc/powerpc32/memset.S | 1 + > sysdeps/powerpc/powerpc32/power4/memset.S | 1 + > .../powerpc32/power4/multiarch/memset-ppc32.S | 1 + > sysdeps/powerpc/powerpc32/power6/memset.S | 1 + > sysdeps/powerpc/powerpc32/power7/memset.S | 1 + > sysdeps/powerpc/powerpc64/le/power10/memset.S | 1 + > .../powerpc64/multiarch/memset-power4.S | 1 + > .../powerpc64/multiarch/memset-ppc64.S | 1 + > sysdeps/powerpc/powerpc64/power4/memset.S | 1 + > sysdeps/powerpc/powerpc64/power6/memset.S | 1 + > sysdeps/powerpc/powerpc64/power7/memset.S | 1 + > sysdeps/powerpc/powerpc64/power8/memset.S | 1 + > sysdeps/s390/memset-z900.S | 1 + > sysdeps/sh/memset.S | 1 + > sysdeps/sparc/sparc32/memset.S | 1 + > .../sparc32/sparcv9/multiarch/memset-ultra1.S | 1 + > sysdeps/sparc/sparc64/memset.S | 1 + > .../sparc/sparc64/multiarch/memset-ultra1.S | 1 + > sysdeps/x86_64/memset.S | 2 ++ > .../multiarch/memset-avx2-unaligned-erms.S | 3 ++ > .../multiarch/memset-evex-unaligned-erms.S | 3 ++ > .../multiarch/memset-sse2-unaligned-erms.S | 3 ++ > 42 files changed, 80 insertions(+), 5 deletions(-) > create mode 100644 elf/dl-symbol-hacks.h > > diff --git a/benchtests/bench-bzero-large.c b/benchtests/bench-bzero-large.c > index cfc7b81cdf..f016165d45 100644 > --- a/benchtests/bench-bzero-large.c > +++ b/benchtests/bench-bzero-large.c > @@ -137,6 +137,7 @@ test_main (void) > # define libc_hidden_builtin_def(X) > # define libc_hidden_def(X) > # define libc_hidden_weak(X) > +# define strong_alias(X,Y) > # define weak_alias(X,Y) > # undef MEMSET > # define MEMSET generic_memset > diff --git a/benchtests/bench-bzero-walk.c b/benchtests/bench-bzero-walk.c > index 851a72b137..25a1a38fa3 100644 > --- a/benchtests/bench-bzero-walk.c > +++ b/benchtests/bench-bzero-walk.c > @@ -136,6 +136,7 @@ test_main (void) > # define libc_hidden_builtin_def(X) > # define libc_hidden_def(X) > # define libc_hidden_weak(X) > +# define strong_alias(X,Y) > # define weak_alias(X,Y) > # undef MEMSET > # define MEMSET generic_memset > diff --git a/benchtests/bench-bzero.c b/benchtests/bench-bzero.c > index 500b7eba96..90b807c98a 100644 > --- a/benchtests/bench-bzero.c > +++ b/benchtests/bench-bzero.c > @@ -155,6 +155,7 @@ test_main (void) > # define libc_hidden_builtin_def(X) > # define libc_hidden_def(X) > # define libc_hidden_weak(X) > +# define strong_alias(X,Y) > # define weak_alias(X,Y) > # undef MEMSET > # define MEMSET generic_memset > diff --git a/benchtests/bench-memset-large.c b/benchtests/bench-memset-large.c > index 0ea1e3811b..6605e2d414 100644 > --- a/benchtests/bench-memset-large.c > +++ b/benchtests/bench-memset-large.c > @@ -118,6 +118,7 @@ test_main (void) > #define libc_hidden_builtin_def(X) > #define libc_hidden_def(X) > #define libc_hidden_weak(X) > +#define strong_alias(X,Y) > #define weak_alias(X,Y) > #undef MEMSET > #define MEMSET generic_memset > diff --git a/benchtests/bench-memset-walk.c b/benchtests/bench-memset-walk.c > index 466ee1b8d6..f7fcdf90ba 100644 > --- a/benchtests/bench-memset-walk.c > +++ b/benchtests/bench-memset-walk.c > @@ -116,6 +116,7 @@ test_main (void) > #define libc_hidden_builtin_def(X) > #define libc_hidden_def(X) > #define libc_hidden_weak(X) > +#define strong_alias(X,Y) > #define weak_alias(X,Y) > #undef MEMSET > #define MEMSET generic_memset > diff --git a/benchtests/bench-memset.c b/benchtests/bench-memset.c > index 6c95a1e965..c801c86b73 100644 > --- a/benchtests/bench-memset.c > +++ b/benchtests/bench-memset.c > @@ -147,6 +147,7 @@ test_main (void) > #define libc_hidden_builtin_def(X) > #define libc_hidden_def(X) > #define libc_hidden_weak(X) > +#define strong_alias(X,Y) > #define weak_alias(X,Y) > #ifndef WIDE > # undef MEMSET > diff --git a/elf/Makefile b/elf/Makefile > index 3386f0ce77..4b992bd348 100644 > --- a/elf/Makefile > +++ b/elf/Makefile > @@ -162,11 +162,6 @@ ifeq (yes,$(have-loop-to-function)) > CFLAGS-rtld.c += -fno-tree-loop-distribute-patterns > endif > > -ifeq (yes,$(have-loop-to-function)) > -# Likewise, during static library startup, memset is not yet available. > -CFLAGS-dl-support.c = -fno-tree-loop-distribute-patterns > -endif > - > # Compile rtld itself without stack protection. > # Also compile all routines in the static library that are elided from > # the shared libc because they are in libc.a in the same way. > diff --git a/elf/dl-support.c b/elf/dl-support.c > index 4af0b5b2ce..6d1996ae6e 100644 > --- a/elf/dl-support.c > +++ b/elf/dl-support.c > @@ -44,6 +44,7 @@ > #include > #include > #include > +#include > > extern char *__progname; > char **_dl_argv = &__progname; /* This is checked for some error messages. */ > diff --git a/elf/dl-symbol-hacks.h b/elf/dl-symbol-hacks.h > new file mode 100644 > index 0000000000..b8caccb570 > --- /dev/null > +++ b/elf/dl-symbol-hacks.h > @@ -0,0 +1,29 @@ > +/* Symbol rediretion for loader/static initialization code. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + . */ > + > +#ifndef _DL_SYMBOL_HACKS_H > +#define _DL_SYMBOL_HACKS_H > + > +/* Some compiler optimizations may transform loops into memset/memmove > + calls and without proper redirection it might call PLT throught > + ifunc without relocations being processed. */ > +#ifndef SHARED > +asm ("memset = __memset_generic"); > +#endif > + > +#endif > diff --git a/string/memset.c b/string/memset.c > index 1303dd7ad3..b98bad7095 100644 > --- a/string/memset.c > +++ b/string/memset.c > @@ -88,3 +88,4 @@ MEMSET (void *dstpp, int c, size_t len) > return dstpp; > } > libc_hidden_builtin_def (MEMSET) > +strong_alias (MEMSET, __memset_generic) > diff --git a/sysdeps/aarch64/multiarch/rtld-memset.S b/sysdeps/aarch64/multiarch/rtld-memset.S > index 7968d25e48..70591781d9 100644 > --- a/sysdeps/aarch64/multiarch/rtld-memset.S > +++ b/sysdeps/aarch64/multiarch/rtld-memset.S > @@ -22,4 +22,5 @@ > #if IS_IN (rtld) > # define MEMSET memset > # include > +strong_alias (memset, __memset_generic) > #endif > diff --git a/sysdeps/alpha/memset.S b/sysdeps/alpha/memset.S > index 9249663d37..c5adae754b 100644 > --- a/sysdeps/alpha/memset.S > +++ b/sysdeps/alpha/memset.S > @@ -124,3 +124,4 @@ $done: ret > > cfi_endproc > libc_hidden_builtin_def (memset) > +strong_alias (memset, __memset_generic) > diff --git a/sysdeps/arm/memset.S b/sysdeps/arm/memset.S > index 9c05669864..9b9a3cb264 100644 > --- a/sysdeps/arm/memset.S > +++ b/sysdeps/arm/memset.S > @@ -66,3 +66,4 @@ ENTRY(memset) > DO_RET(lr) > END(memset) > libc_hidden_builtin_def (memset) > +strong_alias (memset, __memset_generic) > diff --git a/sysdeps/csky/abiv2/memset.S b/sysdeps/csky/abiv2/memset.S > index 41df8e2bb8..7e23edc787 100644 > --- a/sysdeps/csky/abiv2/memset.S > +++ b/sysdeps/csky/abiv2/memset.S > @@ -96,3 +96,4 @@ END (memset) > > libc_hidden_builtin_def (memset) > .weak memset > +strong_alias (memset, __memset_generic) > diff --git a/sysdeps/i386/i586/memset.S b/sysdeps/i386/i586/memset.S > index 672af41398..9d8dd40ad5 100644 > --- a/sysdeps/i386/i586/memset.S > +++ b/sysdeps/i386/i586/memset.S > @@ -101,3 +101,4 @@ L(2): shrl $2, %ecx /* convert byte count to longword count */ > ret > END (memset) > libc_hidden_builtin_def (memset) > +strong_alias (memset, __memset_generic) > diff --git a/sysdeps/i386/i686/memset.S b/sysdeps/i386/i686/memset.S > index 3cb86c016d..3462cb99ab 100644 > --- a/sysdeps/i386/i686/memset.S > +++ b/sysdeps/i386/i686/memset.S > @@ -77,3 +77,4 @@ ENTRY (memset) > ret > END (memset) > libc_hidden_builtin_def (memset) > +strong_alias (memset, __memset_generic) > diff --git a/sysdeps/i386/i686/multiarch/memset-ia32.S b/sysdeps/i386/i686/multiarch/memset-ia32.S > index 8f0ae56cec..9a1b9c2b05 100644 > --- a/sysdeps/i386/i686/multiarch/memset-ia32.S > +++ b/sysdeps/i386/i686/multiarch/memset-ia32.S > @@ -31,3 +31,8 @@ > #endif > > #include > +#if IS_IN(rtld) > +strong_alias (memset, __memset_generic) > +#else > +strong_alias (__memset_ia32, __memset_generic) > +#endif > diff --git a/sysdeps/i386/memset.S b/sysdeps/i386/memset.S > index db2753eb2f..c105090f03 100644 > --- a/sysdeps/i386/memset.S > +++ b/sysdeps/i386/memset.S > @@ -54,3 +54,4 @@ ENTRY (memset) > END (memset) > > libc_hidden_builtin_def (memset) > +strong_alias (memset, __memset_generic) > diff --git a/sysdeps/ia64/memset.S b/sysdeps/ia64/memset.S > index d52f23dd93..70ad1140b8 100644 > --- a/sysdeps/ia64/memset.S > +++ b/sysdeps/ia64/memset.S > @@ -395,3 +395,4 @@ store_words: > ;; } > END(memset) > libc_hidden_builtin_def (memset) > +strong_alias (memset, __memset_generic) > diff --git a/sysdeps/mips/memset.S b/sysdeps/mips/memset.S > index c5ffab1d8c..cb5c9a140f 100644 > --- a/sysdeps/mips/memset.S > +++ b/sysdeps/mips/memset.S > @@ -424,3 +424,4 @@ END(MEMSET_NAME) > libc_hidden_builtin_def (MEMSET_NAME) > # endif > #endif > +strong_alias(MEMSET_NAME, __memset_generic) > diff --git a/sysdeps/powerpc/powerpc32/memset.S b/sysdeps/powerpc/powerpc32/memset.S > index c125934f55..63ad3d2d2b 100644 > --- a/sysdeps/powerpc/powerpc32/memset.S > +++ b/sysdeps/powerpc/powerpc32/memset.S > @@ -302,3 +302,4 @@ L(handletail32): > > END (memset) > libc_hidden_builtin_def (memset) > +strong_alias (memset, __memset_generic) > diff --git a/sysdeps/powerpc/powerpc32/power4/memset.S b/sysdeps/powerpc/powerpc32/power4/memset.S > index 40b140c841..98811c1a66 100644 > --- a/sysdeps/powerpc/powerpc32/power4/memset.S > +++ b/sysdeps/powerpc/powerpc32/power4/memset.S > @@ -224,3 +224,4 @@ L(medium_28t): > blr > END (memset) > libc_hidden_builtin_def (memset) > +strong_alias (memset, __memset_generic) > diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memset-ppc32.S b/sysdeps/powerpc/powerpc32/power4/multiarch/memset-ppc32.S > index 0937ba2215..4c5724bc60 100644 > --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memset-ppc32.S > +++ b/sysdeps/powerpc/powerpc32/power4/multiarch/memset-ppc32.S > @@ -39,3 +39,4 @@ > #endif > > #include > +strong_alias (memset, __memset_generic) > diff --git a/sysdeps/powerpc/powerpc32/power6/memset.S b/sysdeps/powerpc/powerpc32/power6/memset.S > index d86701ff7c..5f4c8518bd 100644 > --- a/sysdeps/powerpc/powerpc32/power6/memset.S > +++ b/sysdeps/powerpc/powerpc32/power6/memset.S > @@ -537,3 +537,4 @@ L(medium_28t): > blr > END (memset) > libc_hidden_builtin_def (memset) > +strong_alias (memset, __memset_generic) > diff --git a/sysdeps/powerpc/powerpc32/power7/memset.S b/sysdeps/powerpc/powerpc32/power7/memset.S > index 368e8b3939..68a6ec18d8 100644 > --- a/sysdeps/powerpc/powerpc32/power7/memset.S > +++ b/sysdeps/powerpc/powerpc32/power7/memset.S > @@ -428,3 +428,4 @@ L(small): > > END (memset) > libc_hidden_builtin_def (memset) > +strong_alias (memset, __memset_generic) > diff --git a/sysdeps/powerpc/powerpc64/le/power10/memset.S b/sysdeps/powerpc/powerpc64/le/power10/memset.S > index 0f43b002bf..551e221fd2 100644 > --- a/sysdeps/powerpc/powerpc64/le/power10/memset.S > +++ b/sysdeps/powerpc/powerpc64/le/power10/memset.S > @@ -242,3 +242,4 @@ L(bcdz_tail): > > END_GEN_TB (MEMSET,TB_TOCLESS) > libc_hidden_builtin_def (memset) > +strong_alias (memset, __memset_generic) > diff --git a/sysdeps/powerpc/powerpc64/multiarch/memset-power4.S b/sysdeps/powerpc/powerpc64/multiarch/memset-power4.S > index 4ee567c6f9..451de98f08 100644 > --- a/sysdeps/powerpc/powerpc64/multiarch/memset-power4.S > +++ b/sysdeps/powerpc/powerpc64/multiarch/memset-power4.S > @@ -22,3 +22,4 @@ > #define libc_hidden_builtin_def(name) > > #include > +strong_alias (__memset_power4, __memset_generic) > diff --git a/sysdeps/powerpc/powerpc64/multiarch/memset-ppc64.S b/sysdeps/powerpc/powerpc64/multiarch/memset-ppc64.S > index 30b25ef15f..91b9775edd 100644 > --- a/sysdeps/powerpc/powerpc64/multiarch/memset-ppc64.S > +++ b/sysdeps/powerpc/powerpc64/multiarch/memset-ppc64.S > @@ -26,3 +26,4 @@ > #endif > > #include > +strong_alias (memset, __memset_generic) > diff --git a/sysdeps/powerpc/powerpc64/power4/memset.S b/sysdeps/powerpc/powerpc64/power4/memset.S > index 0f14a5198a..91557f0442 100644 > --- a/sysdeps/powerpc/powerpc64/power4/memset.S > +++ b/sysdeps/powerpc/powerpc64/power4/memset.S > @@ -237,3 +237,4 @@ L(medium_28t): > blr > END_GEN_TB (MEMSET,TB_TOCLESS) > libc_hidden_builtin_def (memset) > +strong_alias (memset, __memset_generic) > diff --git a/sysdeps/powerpc/powerpc64/power6/memset.S b/sysdeps/powerpc/powerpc64/power6/memset.S > index 140a756348..29ec7f200f 100644 > --- a/sysdeps/powerpc/powerpc64/power6/memset.S > +++ b/sysdeps/powerpc/powerpc64/power6/memset.S > @@ -381,3 +381,4 @@ L(medium_28t): > blr > END_GEN_TB (MEMSET,TB_TOCLESS) > libc_hidden_builtin_def (memset) > +strong_alias (memset, __memset_generic) > diff --git a/sysdeps/powerpc/powerpc64/power7/memset.S b/sysdeps/powerpc/powerpc64/power7/memset.S > index 358199a805..1afeaf754d 100644 > --- a/sysdeps/powerpc/powerpc64/power7/memset.S > +++ b/sysdeps/powerpc/powerpc64/power7/memset.S > @@ -384,3 +384,4 @@ L(small): > > END_GEN_TB (MEMSET,TB_TOCLESS) > libc_hidden_builtin_def (memset) > +strong_alias (memset, __memset_generic) > diff --git a/sysdeps/powerpc/powerpc64/power8/memset.S b/sysdeps/powerpc/powerpc64/power8/memset.S > index 70cace14ef..73676cdb88 100644 > --- a/sysdeps/powerpc/powerpc64/power8/memset.S > +++ b/sysdeps/powerpc/powerpc64/power8/memset.S > @@ -504,3 +504,4 @@ L(LE7_tail5): > > END_GEN_TB (MEMSET,TB_TOCLESS) > libc_hidden_builtin_def (memset) > +strong_alias (memset, __memset_generic) > diff --git a/sysdeps/s390/memset-z900.S b/sysdeps/s390/memset-z900.S > index 7adb466bb1..beecfa2815 100644 > --- a/sysdeps/s390/memset-z900.S > +++ b/sysdeps/s390/memset-z900.S > @@ -185,3 +185,4 @@ strong_alias (MEMSET_DEFAULT, memset) > Compare to libc_hidden_builtin_def (memset) in string/memset.c. */ > strong_alias (MEMSET_DEFAULT, __GI_memset) > #endif > +strong_alias (MEMSET_DEFAULT, __memset_generic) > diff --git a/sysdeps/sh/memset.S b/sysdeps/sh/memset.S > index 7852b472eb..fc36bc836a 100644 > --- a/sysdeps/sh/memset.S > +++ b/sysdeps/sh/memset.S > @@ -84,3 +84,4 @@ L_byte_exit: > mov r7,r0 > END(memset) > libc_hidden_builtin_def (memset) > +strong_alias (memset, __memset_generic) > diff --git a/sysdeps/sparc/sparc32/memset.S b/sysdeps/sparc/sparc32/memset.S > index b1b67cb2d1..5026275239 100644 > --- a/sysdeps/sparc/sparc32/memset.S > +++ b/sysdeps/sparc/sparc32/memset.S > @@ -142,4 +142,5 @@ ENTRY(memset) > b 4b > sub %o0, %o2, %o0 > END(memset) > +strong_alias (memset, __memset_generic) > libc_hidden_builtin_def (memset) > diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/memset-ultra1.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/memset-ultra1.S > index 2dda6f1ed6..e5082fa161 100644 > --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/memset-ultra1.S > +++ b/sysdeps/sparc/sparc32/sparcv9/multiarch/memset-ultra1.S > @@ -27,3 +27,4 @@ > # define memset __memset_ultra1 > # include > #endif > +strong_alias (__memset_ultra1, __memset_generic) > diff --git a/sysdeps/sparc/sparc64/memset.S b/sysdeps/sparc/sparc64/memset.S > index 33ecbc93fe..6a68ab52cb 100644 > --- a/sysdeps/sparc/sparc64/memset.S > +++ b/sysdeps/sparc/sparc64/memset.S > @@ -303,4 +303,5 @@ ENTRY(memset) > 0: retl > mov %o5, %o0 > END(memset) > +strong_alias (memset, __memset_generic) > libc_hidden_builtin_def (memset) > diff --git a/sysdeps/sparc/sparc64/multiarch/memset-ultra1.S b/sysdeps/sparc/sparc64/multiarch/memset-ultra1.S > index 3c3add791e..478a106c83 100644 > --- a/sysdeps/sparc/sparc64/multiarch/memset-ultra1.S > +++ b/sysdeps/sparc/sparc64/multiarch/memset-ultra1.S > @@ -27,3 +27,4 @@ > # define memset __memset_ultra1 > # include > #endif > +strong_alias (__memset_ultra1, __memset_generic) > diff --git a/sysdeps/x86_64/memset.S b/sysdeps/x86_64/memset.S > index f4e1bab601..52fb00b17b 100644 > --- a/sysdeps/x86_64/memset.S > +++ b/sysdeps/x86_64/memset.S > @@ -25,6 +25,7 @@ > #define WMEMSET_SYMBOL(p,s) __wmemset > #define WMEMSET_CHK_SYMBOL(p,s) p > > +#define NO_MULTIARCH > #define DEFAULT_IMPL_V1 "multiarch/memset-sse2-unaligned-erms.S" > #define DEFAULT_IMPL_V3 "multiarch/memset-avx2-unaligned-erms.S" > #define DEFAULT_IMPL_V4 "multiarch/memset-evex-unaligned-erms.S" > @@ -32,6 +33,7 @@ > #include "isa-default-impl.h" > > libc_hidden_builtin_def (memset) > +strong_alias (memset, __memset_generic) > > #if IS_IN (libc) > libc_hidden_def (__wmemset) > diff --git a/sysdeps/x86_64/multiarch/memset-avx2-unaligned-erms.S b/sysdeps/x86_64/multiarch/memset-avx2-unaligned-erms.S > index a9054a9122..c2da716d7c 100644 > --- a/sysdeps/x86_64/multiarch/memset-avx2-unaligned-erms.S > +++ b/sysdeps/x86_64/multiarch/memset-avx2-unaligned-erms.S > @@ -38,4 +38,7 @@ > > # define USE_XMM_LESS_VEC > # include "memset-vec-unaligned-erms.S" > +# if !defined NO_MULTIARCH && MINIMUM_X86_ISA_LEVEL >= 3 > +strong_alias (__memset_avx2_unaligned, __memset_generic) > +# endif > #endif > diff --git a/sysdeps/x86_64/multiarch/memset-evex-unaligned-erms.S b/sysdeps/x86_64/multiarch/memset-evex-unaligned-erms.S > index ac4b2d2d50..034d19b35e 100644 > --- a/sysdeps/x86_64/multiarch/memset-evex-unaligned-erms.S > +++ b/sysdeps/x86_64/multiarch/memset-evex-unaligned-erms.S > @@ -44,4 +44,7 @@ > > # define USE_LESS_VEC_MASK_STORE 1 > # include "memset-vec-unaligned-erms.S" > +# if !defined NO_MULTIARCH && MINIMUM_X86_ISA_LEVEL >= 4 > +strong_alias (__memset_evex_unaligned, __memset_generic) > +# endif > #endif This will define 2 __memset_generic for -march=x86-64-v4. > diff --git a/sysdeps/x86_64/multiarch/memset-sse2-unaligned-erms.S b/sysdeps/x86_64/multiarch/memset-sse2-unaligned-erms.S > index 44f9b8888b..143055adff 100644 > --- a/sysdeps/x86_64/multiarch/memset-sse2-unaligned-erms.S > +++ b/sysdeps/x86_64/multiarch/memset-sse2-unaligned-erms.S > @@ -63,5 +63,8 @@ > # endif > > # include "memset-vec-unaligned-erms.S" > +# if !defined NO_MULTIARCH && MINIMUM_X86_ISA_LEVEL <= 2 > +strong_alias (__memset_sse2_unaligned, __memset_generic) > +# endif > > #endif > -- > 2.34.1 > -- H.J.