public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Siddhesh Poyarekar <siddhesh@sourceware.org>
To: Adhemerval Zanella <adhemerval.zanella@linaro.org>,
	libc-alpha@sourceware.org
Subject: Re: [PATCH v3 13/19] elf: Remove LD_PROFILE for static binaries
Date: Mon, 20 Nov 2023 17:55:44 -0500	[thread overview]
Message-ID: <86a6f0b5-0358-483c-bad8-11fe65fa4ee4@sourceware.org> (raw)
In-Reply-To: <20231106202552.3404059-14-adhemerval.zanella@linaro.org>

On 2023-11-06 15:25, Adhemerval Zanella wrote:
> The _dl_non_dynamic_init does not parse LD_PROFILE, which does not
> enable profile for dlopen objects.  Since dlopen is deprecated for
> static objects, it is better to remove the support.
> 
> It also allows to trim down libc.a of profile support.
> 
> Checked on x86_64-linux-gnu.
> ---

LGTM, but please also do a bmg run to verify this change.

Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>

>   elf/Makefile                              | 10 ++--
>   elf/dl-load.c                             | 10 ++--
>   elf/dl-runtime.c                          | 12 ++---
>   elf/dl-support.c                          |  9 ----
>   elf/{dl-profstub.c => libc-dl-profstub.c} |  0
>   include/dlfcn.h                           |  5 ++
>   sysdeps/aarch64/dl-machine.h              |  4 +-
>   sysdeps/aarch64/dl-trampoline.S           |  2 +-
>   sysdeps/alpha/dl-machine.h                |  6 ++-
>   sysdeps/alpha/dl-trampoline.S             |  4 ++
>   sysdeps/arm/dl-machine.h                  |  4 +-
>   sysdeps/arm/dl-trampoline.S               |  2 +-
>   sysdeps/hppa/dl-machine.h                 | 36 +++++++------
>   sysdeps/hppa/dl-trampoline.S              |  2 +
>   sysdeps/i386/dl-machine.h                 |  2 +
>   sysdeps/i386/dl-trampoline.S              |  2 +-
>   sysdeps/ia64/dl-machine.h                 | 10 ++--
>   sysdeps/ia64/dl-trampoline.S              |  2 +-
>   sysdeps/loongarch/dl-machine.h            |  6 ++-
>   sysdeps/loongarch/dl-trampoline.h         |  2 +
>   sysdeps/m68k/dl-machine.h                 |  4 +-
>   sysdeps/m68k/dl-trampoline.S              |  2 +
>   sysdeps/powerpc/powerpc32/dl-machine.c    |  2 +-
>   sysdeps/powerpc/powerpc32/dl-machine.h    | 10 ++--
>   sysdeps/powerpc/powerpc32/dl-trampoline.S |  2 +-
>   sysdeps/powerpc/powerpc64/dl-machine.h    | 20 ++++---
>   sysdeps/powerpc/powerpc64/dl-trampoline.S |  2 +-
>   sysdeps/s390/s390-32/dl-machine.h         |  8 +--
>   sysdeps/s390/s390-32/dl-trampoline.h      |  2 +-
>   sysdeps/s390/s390-64/dl-machine.h         |  8 +--
>   sysdeps/s390/s390-64/dl-trampoline.h      |  2 +-
>   sysdeps/sh/dl-machine.h                   |  2 +
>   sysdeps/sh/dl-trampoline.S                |  2 +
>   sysdeps/sparc/sparc32/dl-machine.h        |  4 +-
>   sysdeps/sparc/sparc32/dl-trampoline.S     |  2 +
>   sysdeps/sparc/sparc64/dl-machine.h        |  4 +-
>   sysdeps/sparc/sparc64/dl-trampoline.S     |  2 +
>   sysdeps/x86_64/dl-machine.h               |  2 +
>   sysdeps/x86_64/dl-trampoline.S            | 64 ++++++++++++-----------
>   39 files changed, 165 insertions(+), 109 deletions(-)
>   rename elf/{dl-profstub.c => libc-dl-profstub.c} (100%)
> 
> diff --git a/elf/Makefile b/elf/Makefile
> index 08896bb895..d17ff5424e 100644
> --- a/elf/Makefile
> +++ b/elf/Makefile
> @@ -37,12 +37,12 @@ routines = \
>     dl-iteratephdr \
>     dl-libc \
>     dl-origin \
> -  dl-profstub \
>     dl-reloc-static-pie \
>     dl-support \
>     dl-sym \
>     dl-sysdep \
>     enbl-secure \
> +  libc-dl-profstub  \
>     libc-dl_find_object \
>     libc_early_init \
>     rtld_static_init \
> @@ -72,7 +72,6 @@ dl-routines = \
>     dl-open \
>     dl-origin \
>     dl-printf \
> -  dl-profile \
>     dl-reloc \
>     dl-runtime \
>     dl-scope \
> @@ -117,7 +116,11 @@ elide-routines.os = \
>     # elide-routines.os
>   
>   # These object files are only included in the dynamically-linked libc.
> -shared-only-routines = libc-dl_find_object
> +shared-only-routines = \
> +  libc-dl-profile \
> +  libc-dl-profstub \
> +  libc-dl_find_object \
> +  # shared-only-routines
>   
>   # ld.so uses those routines, plus some special stuff for being the program
>   # interpreter and operating independent of libc.
> @@ -135,6 +138,7 @@ rtld-routines = \
>     dl-libc_freeres \
>     dl-minimal \
>     dl-mutex \
> +  dl-profile \
>     dl-sysdep \
>     dl-usage \
>     rtld \
> diff --git a/elf/dl-load.c b/elf/dl-load.c
> index 2923b1141d..7356a4fe48 100644
> --- a/elf/dl-load.c
> +++ b/elf/dl-load.c
> @@ -1443,11 +1443,6 @@ cannot enable executable stack as shared object requires");
>        name by which the DSO is actually known.  Add that as well.  */
>     if (__glibc_unlikely (origname != NULL))
>       add_name_to_object (l, origname);
> -#else
> -  /* Audit modules only exist when linking is dynamic so ORIGNAME
> -     cannot be non-NULL.  */
> -  assert (origname == NULL);
> -#endif
>   
>     /* When we profile the SONAME might be needed for something else but
>        loading.  Add it right away.  */
> @@ -1455,6 +1450,11 @@ cannot enable executable stack as shared object requires");
>         && l->l_info[DT_SONAME] != NULL)
>       add_name_to_object (l, ((const char *) D_PTR (l, l_info[DT_STRTAB])
>   			    + l->l_info[DT_SONAME]->d_un.d_val));
> +#else
> +  /* Audit modules only exist when linking is dynamic so ORIGNAME
> +     cannot be non-NULL.  */
> +  assert (origname == NULL);
> +#endif
>   
>     /* If we have newly loaded libc.so, update the namespace
>        description.  */
> diff --git a/elf/dl-runtime.c b/elf/dl-runtime.c
> index 32a8bfcf74..fe7deda32a 100644
> --- a/elf/dl-runtime.c
> +++ b/elf/dl-runtime.c
> @@ -162,14 +162,14 @@ _dl_fixup (
>     return elf_machine_fixup_plt (l, result, refsym, sym, reloc, rel_addr, value);
>   }
>   
> -#ifndef PROF
> +#if !defined PROF && defined SHARED
>   DL_FIXUP_VALUE_TYPE
>   __attribute ((noinline))
>   DL_ARCH_FIXUP_ATTRIBUTE
>   _dl_profile_fixup (
> -#ifdef ELF_MACHINE_RUNTIME_FIXUP_ARGS
> +# ifdef ELF_MACHINE_RUNTIME_FIXUP_ARGS
>   		   ELF_MACHINE_RUNTIME_FIXUP_ARGS,
> -#endif
> +# endif
>   		   struct link_map *l, ElfW(Word) reloc_arg,
>   		   ElfW(Addr) retaddr, void *regs, long int *framesizep)
>   {
> @@ -309,14 +309,12 @@ _dl_profile_fixup (
>         /* And now perhaps the relocation addend.  */
>         value = elf_machine_plt_value (l, reloc, value);
>   
> -#ifdef SHARED
>         /* Auditing checkpoint: we have a new binding.  Provide the
>   	 auditing libraries the possibility to change the value and
>   	 tell us whether further auditing is wanted.  */
>         if (defsym != NULL && GLRO(dl_naudit) > 0)
>   	_dl_audit_symbind (l, reloc_result, reloc, defsym, &value, result,
>   			   true);
> -#endif
>   
>         /* Store the result for later runs.  */
>         if (__glibc_likely (! GLRO(dl_bind_not)))
> @@ -335,11 +333,9 @@ _dl_profile_fixup (
>     long int framesize = -1;
>   
>   
> -#ifdef SHARED
>     /* Auditing checkpoint: report the PLT entering and allow the
>        auditors to change the value.  */
>     _dl_audit_pltenter (l, reloc_result, &value, regs, &framesize);
> -#endif
>   
>     /* Store the frame size information.  */
>     *framesizep = framesize;
> @@ -349,4 +345,4 @@ _dl_profile_fixup (
>     return value;
>   }
>   
> -#endif /* PROF */
> +#endif /* !defined PROF && defined SHARED */
> diff --git a/elf/dl-support.c b/elf/dl-support.c
> index 44a54dea07..31a608df87 100644
> --- a/elf/dl-support.c
> +++ b/elf/dl-support.c
> @@ -60,10 +60,6 @@ int _dl_dynamic_weak;
>   /* If nonzero print warnings about problematic situations.  */
>   int _dl_verbose;
>   
> -/* We never do profiling.  */
> -const char *_dl_profile;
> -const char *_dl_profile_output;
> -
>   /* Names of shared object for which the RUNPATHs and RPATHs should be
>      ignored.  */
>   const char *_dl_inhibit_rpath;
> @@ -301,11 +297,6 @@ _dl_non_dynamic_init (void)
>   
>     _dl_dynamic_weak = *(getenv ("LD_DYNAMIC_WEAK") ?: "") == '\0';
>   
> -  _dl_profile_output = getenv ("LD_PROFILE_OUTPUT");
> -  if (_dl_profile_output == NULL || _dl_profile_output[0] == '\0')
> -    _dl_profile_output
> -      = &"/var/tmp\0/var/profile"[__libc_enable_secure ? 9 : 0];
> -
>     if (__libc_enable_secure)
>       {
>         static const char unsecure_envvars[] =
> diff --git a/elf/dl-profstub.c b/elf/libc-dl-profstub.c
> similarity index 100%
> rename from elf/dl-profstub.c
> rename to elf/libc-dl-profstub.c
> diff --git a/include/dlfcn.h b/include/dlfcn.h
> index ae25f05303..a44420fa37 100644
> --- a/include/dlfcn.h
> +++ b/include/dlfcn.h
> @@ -135,5 +135,10 @@ extern int __dladdr1 (const void *address, Dl_info *info,
>   extern int __dlinfo (void *handle, int request, void *arg);
>   extern char *__dlerror (void);
>   
> +#ifndef SHARED
> +# undef DL_CALL_FCT
> +# define DL_CALL_FCT(fctp, args) ((fctp) args)
> +#endif
> +
>   #endif
>   #endif
> diff --git a/sysdeps/aarch64/dl-machine.h b/sysdeps/aarch64/dl-machine.h
> index 4170b9269f..a56eb96a79 100644
> --- a/sysdeps/aarch64/dl-machine.h
> +++ b/sysdeps/aarch64/dl-machine.h
> @@ -68,7 +68,6 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>       {
>         ElfW(Addr) *got;
>         extern void _dl_runtime_resolve (ElfW(Word));
> -      extern void _dl_runtime_profile (ElfW(Word));
>   
>         got = (ElfW(Addr) *) D_PTR (l, l_info[DT_PLTGOT]);
>         if (got[1])
> @@ -83,6 +82,8 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   	 to intercept the calls to collect information.  In this case we
>   	 don't store the address in the GOT so that all future calls also
>   	 end in this function.  */
> +#ifdef SHARED
> +      extern void _dl_runtime_profile (ElfW(Word));
>         if ( profile)
>   	{
>   	   got[2] = (ElfW(Addr)) &_dl_runtime_profile;
> @@ -94,6 +95,7 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   	    GL(dl_profile_map) = l;
>   	}
>         else
> +#endif
>   	{
>   	  /* This function will get called to fix up the GOT entry
>   	     indicated by the offset on the stack, and then jump to
> diff --git a/sysdeps/aarch64/dl-trampoline.S b/sysdeps/aarch64/dl-trampoline.S
> index a3474ba741..fc82151ba2 100644
> --- a/sysdeps/aarch64/dl-trampoline.S
> +++ b/sysdeps/aarch64/dl-trampoline.S
> @@ -122,7 +122,7 @@ _dl_runtime_resolve:
>   
>   	cfi_endproc
>   	.size _dl_runtime_resolve, .-_dl_runtime_resolve
> -#ifndef PROF
> +#if !defined PROF && defined SHARED
>   	.globl _dl_runtime_profile
>   	.type _dl_runtime_profile, #function
>   	cfi_startproc
> diff --git a/sysdeps/alpha/dl-machine.h b/sysdeps/alpha/dl-machine.h
> index ed5389e3c5..7fe2afca93 100644
> --- a/sysdeps/alpha/dl-machine.h
> +++ b/sysdeps/alpha/dl-machine.h
> @@ -75,9 +75,7 @@ elf_machine_runtime_setup (struct link_map *map, struct r_scope_elem *scope[],
>   			   int lazy, int profile)
>   {
>     extern char _dl_runtime_resolve_new[] attribute_hidden;
> -  extern char _dl_runtime_profile_new[] attribute_hidden;
>     extern char _dl_runtime_resolve_old[] attribute_hidden;
> -  extern char _dl_runtime_profile_old[] attribute_hidden;
>   
>     struct pltgot {
>       char *resolve;
> @@ -109,6 +107,9 @@ elf_machine_runtime_setup (struct link_map *map, struct r_scope_elem *scope[],
>     else
>       resolve = _dl_runtime_resolve_old;
>   
> +#ifdef SHARED
> +  extern char _dl_runtime_profile_new[] attribute_hidden;
> +  extern char _dl_runtime_profile_old[] attribute_hidden;
>     if (__builtin_expect (profile, 0))
>       {
>         if (secureplt)
> @@ -123,6 +124,7 @@ elf_machine_runtime_setup (struct link_map *map, struct r_scope_elem *scope[],
>   	  GL(dl_profile_map) = map;
>   	}
>       }
> +#endif
>   
>     pg->resolve = resolve;
>     pg->link = map;
> diff --git a/sysdeps/alpha/dl-trampoline.S b/sysdeps/alpha/dl-trampoline.S
> index f8c3d33906..5dffa62587 100644
> --- a/sysdeps/alpha/dl-trampoline.S
> +++ b/sysdeps/alpha/dl-trampoline.S
> @@ -89,6 +89,7 @@ _dl_runtime_resolve_new:
>   	.globl	_dl_runtime_profile_new
>   	.type	_dl_runtime_profile_new, @function
>   
> +#ifdef SHARED
>   #undef FRAMESIZE
>   #define FRAMESIZE	20*8
>   
> @@ -207,6 +208,7 @@ _dl_runtime_profile_new:
>   
>   	cfi_endproc
>   	.size	_dl_runtime_profile_new, .-_dl_runtime_profile_new
> +#endif /* SHARED */
>   
>   	.align	4
>   	.globl	_dl_runtime_resolve_old
> @@ -340,6 +342,7 @@ _dl_runtime_resolve_old:
>   	.usepv	_dl_runtime_profile_old, no
>   	.type	_dl_runtime_profile_old, @function
>   
> +#ifdef SHARED
>   	/* We save the registers in a different order than desired by
>   	   .mask/.fmask, so we have to use explicit cfi directives.  */
>   	cfi_startproc
> @@ -538,3 +541,4 @@ _dl_runtime_profile_old:
>   
>   	cfi_endproc
>   	.size	_dl_runtime_profile_old, .-_dl_runtime_profile_old
> +#endif /* SHARED */
> diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h
> index d720c02c96..a68679e653 100644
> --- a/sysdeps/arm/dl-machine.h
> +++ b/sysdeps/arm/dl-machine.h
> @@ -65,7 +65,6 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   {
>     Elf32_Addr *got;
>     extern void _dl_runtime_resolve (Elf32_Word);
> -  extern void _dl_runtime_profile (Elf32_Word);
>   
>     if (l->l_info[DT_JMPREL] && lazy)
>       {
> @@ -88,6 +87,8 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   	 to intercept the calls to collect information.  In this case we
>   	 don't store the address in the GOT so that all future calls also
>   	 end in this function.  */
> +#ifdef SHARED
> +      extern void _dl_runtime_profile (Elf32_Word);
>         if (profile)
>   	{
>   	  got[2] = (Elf32_Addr) &_dl_runtime_profile;
> @@ -99,6 +100,7 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   	    GL(dl_profile_map) = l;
>   	}
>         else
> +#endif
>   	/* This function will get called to fix up the GOT entry indicated by
>   	   the offset on the stack, and then jump to the resolved address.  */
>   	got[2] = (Elf32_Addr) &_dl_runtime_resolve;
> diff --git a/sysdeps/arm/dl-trampoline.S b/sysdeps/arm/dl-trampoline.S
> index 23c2476917..2df5b7ee36 100644
> --- a/sysdeps/arm/dl-trampoline.S
> +++ b/sysdeps/arm/dl-trampoline.S
> @@ -70,7 +70,7 @@ _dl_runtime_resolve:
>   	cfi_endproc
>   	.size _dl_runtime_resolve, .-_dl_runtime_resolve
>   
> -#ifndef PROF
> +#if !defined PROF && defined SHARED
>   	.globl _dl_runtime_profile
>   	.type _dl_runtime_profile, #function
>   	CFI_SECTIONS
> diff --git a/sysdeps/hppa/dl-machine.h b/sysdeps/hppa/dl-machine.h
> index 4e6e70b3c9..993593de5d 100644
> --- a/sysdeps/hppa/dl-machine.h
> +++ b/sysdeps/hppa/dl-machine.h
> @@ -195,7 +195,6 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>     end_jmprel = jmprel + l->l_info[DT_PLTRELSZ]->d_un.d_val;
>   
>     extern void _dl_runtime_resolve (void);
> -  extern void _dl_runtime_profile (void);
>   
>     /* Linking lazily */
>     if (lazy)
> @@ -235,22 +234,9 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   	      got[1] = (Elf32_Addr) l;
>   
>   	      /* This function will be called to perform the relocation. */
> -	      if (__builtin_expect (!profile, 1))
> -		{
> -		  /* If a static application called us, then _dl_runtime_resolve is not
> -		     a function descriptor, but the *real* address of the function... */
> -		  if((unsigned long) &_dl_runtime_resolve & 3)
> -		    {
> -		      got[-2] = (Elf32_Addr) ((struct fdesc *)
> -				  ((unsigned long) &_dl_runtime_resolve & ~3))->ip;
> -		    }
> -		  else
> -		    {
> -		      /* Static executable! */
> -		      got[-2] = (Elf32_Addr) &_dl_runtime_resolve;
> -		    }
> -		}
> -	      else
> +#ifdef SHARED
> +	      extern void _dl_runtime_profile (void);
> +	      if (__glibc_unlikely (profile))
>   		{
>   		  if (GLRO(dl_profile) != NULL
>   		      && _dl_name_match_p (GLRO(dl_profile), l))
> @@ -272,6 +258,22 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   		      got[-2] = (Elf32_Addr) &_dl_runtime_profile;
>   		    }
>   		}
> +	      else
> +#endif
> +		{
> +		  /* If a static application called us, then _dl_runtime_resolve is not
> +		     a function descriptor, but the *real* address of the function... */
> +		  if((unsigned long) &_dl_runtime_resolve & 3)
> +		    {
> +		      got[-2] = (Elf32_Addr) ((struct fdesc *)
> +				  ((unsigned long) &_dl_runtime_resolve & ~3))->ip;
> +		    }
> +		  else
> +		    {
> +		      /* Static executable! */
> +		      got[-2] = (Elf32_Addr) &_dl_runtime_resolve;
> +		    }
> +		}
>   	      /* Plunk in the gp of this function descriptor so we
>   		 can make the call to _dl_runtime_xxxxxx */
>   	      got[-1] = ltp;
> diff --git a/sysdeps/hppa/dl-trampoline.S b/sysdeps/hppa/dl-trampoline.S
> index 689c6e1a40..9e904df3d2 100644
> --- a/sysdeps/hppa/dl-trampoline.S
> +++ b/sysdeps/hppa/dl-trampoline.S
> @@ -156,6 +156,7 @@ _dl_runtime_resolve:
>   	cfi_endproc
>   	.size   _dl_runtime_resolve, . - _dl_runtime_resolve
>   
> +#ifdef SHARED
>           .text
>           .global _dl_runtime_profile
>           .type _dl_runtime_profile,@function
> @@ -359,3 +360,4 @@ L(cont):
>           .PROCEND
>   	cfi_endproc
>   	.size   _dl_runtime_profile, . - _dl_runtime_profile
> +#endif
> diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h
> index 18749f2ec2..07469e99b0 100644
> --- a/sysdeps/i386/dl-machine.h
> +++ b/sysdeps/i386/dl-machine.h
> @@ -92,6 +92,7 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   	 to intercept the calls to collect information.  In this case we
>   	 don't store the address in the GOT so that all future calls also
>   	 end in this function.  */
> +#ifdef SHARED
>         if (__glibc_unlikely (profile))
>   	{
>   	  got[2] = (shstk_enabled
> @@ -105,6 +106,7 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   	    GL(dl_profile_map) = l;
>   	}
>         else
> +#endif
>   	/* This function will get called to fix up the GOT entry indicated by
>   	   the offset on the stack, and then jump to the resolved address.  */
>   	got[2] = (shstk_enabled
> diff --git a/sysdeps/i386/dl-trampoline.S b/sysdeps/i386/dl-trampoline.S
> index 2d55f373b4..3604aabe87 100644
> --- a/sysdeps/i386/dl-trampoline.S
> +++ b/sysdeps/i386/dl-trampoline.S
> @@ -70,7 +70,7 @@ _dl_runtime_resolve_shstk:
>   	cfi_endproc
>   	.size _dl_runtime_resolve_shstk, .-_dl_runtime_resolve_shstk
>   
> -#ifndef PROF
> +#if !defined PROF && defined SHARED
>   # The SHSTK compatible version.
>   	.globl _dl_runtime_profile_shstk
>   	.type _dl_runtime_profile_shstk, @function
> diff --git a/sysdeps/ia64/dl-machine.h b/sysdeps/ia64/dl-machine.h
> index e1da3dadcb..3ef6b0ef4b 100644
> --- a/sysdeps/ia64/dl-machine.h
> +++ b/sysdeps/ia64/dl-machine.h
> @@ -121,9 +121,8 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>         reserve[0] = (Elf64_Addr) l;
>   
>         /* This function will be called to perform the relocation.  */
> -      if (!profile)
> -	doit = (Elf64_Addr) ELF_PTR_TO_FDESC (&_dl_runtime_resolve)->ip;
> -      else
> +#ifdef SHARED
> +      if (__glibc_unlikely (profile))
>   	{
>   	  if (GLRO(dl_profile) != NULL
>   	      && _dl_name_match_p (GLRO(dl_profile), l))
> @@ -134,6 +133,11 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   	    }
>   	  doit = (Elf64_Addr) ELF_PTR_TO_FDESC (&_dl_runtime_profile)->ip;
>   	}
> +      else
> +#endif
> +	{
> +	  doit = (Elf64_Addr) ELF_PTR_TO_FDESC (&_dl_runtime_resolve)->ip;
> +	}
>   
>         reserve[1] = doit;
>         reserve[2] = gp;
> diff --git a/sysdeps/ia64/dl-trampoline.S b/sysdeps/ia64/dl-trampoline.S
> index 54b33c8c02..10d8432c8f 100644
> --- a/sysdeps/ia64/dl-trampoline.S
> +++ b/sysdeps/ia64/dl-trampoline.S
> @@ -188,7 +188,7 @@ END(_dl_runtime_resolve)
>   #define PLTENTER_FRAME_SIZE (4*8 + 8*8 + 8*16 + 2*8 + 16)
>   #define PLTEXIT_FRAME_SIZE (PLTENTER_FRAME_SIZE + 4*8 + 8*16)
>   
> -#ifndef PROF
> +#if !defined PROF && defined SHARED
>   ENTRY(_dl_runtime_profile)
>   	{ .mii
>   	  .prologue
> diff --git a/sysdeps/loongarch/dl-machine.h b/sysdeps/loongarch/dl-machine.h
> index 57913cefaa..0d17fd21e3 100644
> --- a/sysdeps/loongarch/dl-machine.h
> +++ b/sysdeps/loongarch/dl-machine.h
> @@ -287,15 +287,16 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   	 to intercept the calls to collect information.  In this case we
>   	 don't store the address in the GOT so that all future calls also
>   	 end in this function.  */
> +#ifdef SHARED
>         if (profile != 0)
>   	{
> -#if !defined __loongarch_soft_float
> +# if !defined __loongarch_soft_float
>   	  if (SUPPORT_LASX)
>   	    gotplt[0] = (ElfW(Addr)) &_dl_runtime_profile_lasx;
>   	  else if (SUPPORT_LSX)
>   	    gotplt[0] = (ElfW(Addr)) &_dl_runtime_profile_lsx;
>   	  else
> -#endif
> +# endif
>   	    gotplt[0] = (ElfW(Addr)) &_dl_runtime_profile;
>   
>   	  if (GLRO(dl_profile) != NULL
> @@ -305,6 +306,7 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   	    GL(dl_profile_map) = l;
>   	}
>         else
> +#endif
>   	{
>   	  /* This function will get called to fix up the GOT entry
>   	     indicated by the offset on the stack, and then jump to
> diff --git a/sysdeps/loongarch/dl-trampoline.h b/sysdeps/loongarch/dl-trampoline.h
> index e298439d39..1da70aeb23 100644
> --- a/sysdeps/loongarch/dl-trampoline.h
> +++ b/sysdeps/loongarch/dl-trampoline.h
> @@ -126,6 +126,7 @@ ENTRY (_dl_runtime_resolve)
>   	jirl	zero, t1, 0
>   END (_dl_runtime_resolve)
>   
> +#ifdef SHARED
>   #include "dl-link.h"
>   
>   ENTRY (_dl_runtime_profile)
> @@ -367,3 +368,4 @@ ENTRY (_dl_runtime_profile)
>   	jirl	zero, ra, 0
>   
>   END (_dl_runtime_profile)
> +#endif /* SHARED */
> diff --git a/sysdeps/m68k/dl-machine.h b/sysdeps/m68k/dl-machine.h
> index 5ee586b27b..8d7e733e2a 100644
> --- a/sysdeps/m68k/dl-machine.h
> +++ b/sysdeps/m68k/dl-machine.h
> @@ -75,7 +75,6 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   {
>     Elf32_Addr *got;
>     extern void _dl_runtime_resolve (Elf32_Word);
> -  extern void _dl_runtime_profile (Elf32_Word);
>   
>     if (l->l_info[DT_JMPREL] && lazy)
>       {
> @@ -93,6 +92,8 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   	 to intercept the calls to collect information.  In this case we
>   	 don't store the address in the GOT so that all future calls also
>   	 end in this function.  */
> +#ifdef SHARED
> +      extern void _dl_runtime_profile (Elf32_Word);
>         if (profile)
>   	{
>   	  got[2] = (Elf32_Addr) &_dl_runtime_profile;
> @@ -106,6 +107,7 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   	    }
>   	}
>         else
> +#endif
>   	/* This function will get called to fix up the GOT entry indicated by
>   	   the offset on the stack, and then jump to the resolved address.  */
>   	got[2] = (Elf32_Addr) &_dl_runtime_resolve;
> diff --git a/sysdeps/m68k/dl-trampoline.S b/sysdeps/m68k/dl-trampoline.S
> index dba3741400..f1b4943868 100644
> --- a/sysdeps/m68k/dl-trampoline.S
> +++ b/sysdeps/m68k/dl-trampoline.S
> @@ -60,6 +60,7 @@ _dl_runtime_resolve:
>   	cfi_endproc
>   	.size _dl_runtime_resolve, . - _dl_runtime_resolve
>   
> +#ifdef SHARED
>   	.text
>   	.globl _dl_runtime_profile
>   	.type _dl_runtime_profile, @function
> @@ -220,3 +221,4 @@ _dl_runtime_profile:
>   	rts
>   	cfi_endproc
>   	.size _dl_runtime_profile, . - _dl_runtime_profile
> +#endif /* SHARED */
> diff --git a/sysdeps/powerpc/powerpc32/dl-machine.c b/sysdeps/powerpc/powerpc32/dl-machine.c
> index ef84911ede..e6b603de94 100644
> --- a/sysdeps/powerpc/powerpc32/dl-machine.c
> +++ b/sysdeps/powerpc/powerpc32/dl-machine.c
> @@ -226,7 +226,7 @@ __elf_machine_runtime_setup (struct link_map *map, int lazy, int profile)
>   	  Elf32_Word dlrr;
>   	  Elf32_Word offset;
>   
> -#ifndef PROF
> +#if !defined PROF && defined SHARED
>   	  dlrr = (Elf32_Word) (profile
>   			       ? _dl_prof_resolve
>   			       : _dl_runtime_resolve);
> diff --git a/sysdeps/powerpc/powerpc32/dl-machine.h b/sysdeps/powerpc/powerpc32/dl-machine.h
> index a4cad7583c..1ff46d5f8a 100644
> --- a/sysdeps/powerpc/powerpc32/dl-machine.h
> +++ b/sysdeps/powerpc/powerpc32/dl-machine.h
> @@ -188,15 +188,19 @@ elf_machine_runtime_setup (struct link_map *map, struct r_scope_elem *scope[],
>         extern void _dl_runtime_resolve (void);
>         extern void _dl_prof_resolve (void);
>   
> -      if (__glibc_likely (!profile))
> -	dlrr = _dl_runtime_resolve;
> -      else
> +#ifdef SHARED
> +      if (__glibc_unlikely (profile))
>   	{
>   	  if (GLRO(dl_profile) != NULL
>   	      &&_dl_name_match_p (GLRO(dl_profile), map))
>   	    GL(dl_profile_map) = map;
>   	  dlrr = _dl_prof_resolve;
>   	}
> +      else
> +#endif
> +	{
> +	  dlrr = _dl_runtime_resolve;
> +	}
>         got = (Elf32_Addr *) map->l_info[DT_PPC(GOT)]->d_un.d_ptr;
>         glink = got[1];
>         got[1] = (Elf32_Addr) dlrr;
> diff --git a/sysdeps/powerpc/powerpc32/dl-trampoline.S b/sysdeps/powerpc/powerpc32/dl-trampoline.S
> index 93b1673ebb..be8de0e2dc 100644
> --- a/sysdeps/powerpc/powerpc32/dl-trampoline.S
> +++ b/sysdeps/powerpc/powerpc32/dl-trampoline.S
> @@ -70,7 +70,7 @@ _dl_runtime_resolve:
>   	cfi_endproc
>   	.size	 _dl_runtime_resolve,.-_dl_runtime_resolve
>   
> -#ifndef PROF
> +#if !defined PROF && defined SHARED
>   	.align 2
>   	.globl _dl_prof_resolve
>   	.type _dl_prof_resolve,@function
> diff --git a/sysdeps/powerpc/powerpc64/dl-machine.h b/sysdeps/powerpc/powerpc64/dl-machine.h
> index 449208e86f..601c3cba9d 100644
> --- a/sysdeps/powerpc/powerpc64/dl-machine.h
> +++ b/sysdeps/powerpc/powerpc64/dl-machine.h
> @@ -362,13 +362,19 @@ elf_machine_runtime_setup (struct link_map *map, struct r_scope_elem *scope[],
>   	  Elf64_Word offset;
>   	  Elf64_Addr dlrr;
>   
> -	  dlrr = (Elf64_Addr) (profile ? _dl_profile_resolve
> -				       : _dl_runtime_resolve);
> -	  if (profile && GLRO(dl_profile) != NULL
> -	      && _dl_name_match_p (GLRO(dl_profile), map))
> -	    /* This is the object we are looking for.  Say that we really
> -	       want profiling and the timers are started.  */
> -	    GL(dl_profile_map) = map;
> +#ifdef SHARED
> +	  if (__glibc_unlikely (profile))
> +	    {
> +	      dlrr = (Elf64_Addr) _dl_profile_resolve;
> +	      if (profile && GLRO(dl_profile) != NULL
> +		  && _dl_name_match_p (GLRO(dl_profile), map))
> +		/* This is the object we are looking for.  Say that we really
> +		   want profiling and the timers are started.  */
> +		GL(dl_profile_map) = map;
> +	    }
> +	  else
> +#endif
> +	    dlrr = (Elf64_Addr) _dl_runtime_resolve;
>   
>   #if _CALL_ELF != 2
>   	  /* We need to stuff the address/TOC of _dl_runtime_resolve
> diff --git a/sysdeps/powerpc/powerpc64/dl-trampoline.S b/sysdeps/powerpc/powerpc64/dl-trampoline.S
> index 1d04ec8109..b2fc2bb133 100644
> --- a/sysdeps/powerpc/powerpc64/dl-trampoline.S
> +++ b/sysdeps/powerpc/powerpc64/dl-trampoline.S
> @@ -195,7 +195,7 @@ END(_dl_runtime_resolve)
>      and r11 contains the link_map (from PLT0+16).  The link_map becomes
>      parm1 (r3) and the index (r0) needs to be converted to an offset
>      (index * 24) in parm2 (r4).  */
> -#ifndef PROF
> +#if !defined PROF && defined SHARED
>   	.hidden _dl_profile_resolve
>   ENTRY (_dl_profile_resolve, 4)
>   /* Spill r30, r31 to preserve the link_map* and reloc_addr, in case we
> diff --git a/sysdeps/s390/s390-32/dl-machine.h b/sysdeps/s390/s390-32/dl-machine.h
> index 100a3e05f6..b8bf2796c7 100644
> --- a/sysdeps/s390/s390-32/dl-machine.h
> +++ b/sysdeps/s390/s390-32/dl-machine.h
> @@ -124,16 +124,17 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   	 to intercept the calls to collect information.  In this case we
>   	 don't store the address in the GOT so that all future calls also
>   	 end in this function.  */
> +#ifdef SHARED
>         if (__glibc_unlikely (profile))
>   	{
> -#if defined HAVE_S390_VX_ASM_SUPPORT
> +# if defined HAVE_S390_VX_ASM_SUPPORT
>   	  if (GLRO(dl_hwcap) & HWCAP_S390_VX)
>   	    got[2] = (Elf32_Addr) &_dl_runtime_profile_vx;
>   	  else
>   	    got[2] = (Elf32_Addr) &_dl_runtime_profile;
> -#else
> +# else
>   	  got[2] = (Elf32_Addr) &_dl_runtime_profile;
> -#endif
> +# endif
>   
>   	  if (GLRO(dl_profile) != NULL
>   	      && _dl_name_match_p (GLRO(dl_profile), l))
> @@ -142,6 +143,7 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   	    GL(dl_profile_map) = l;
>   	}
>         else
> +#endif
>   	{
>   	  /* This function will get called to fix up the GOT entry indicated by
>   	     the offset on the stack, and then jump to the resolved address.  */
> diff --git a/sysdeps/s390/s390-32/dl-trampoline.h b/sysdeps/s390/s390-32/dl-trampoline.h
> index 78fdca9d53..8093ab08d3 100644
> --- a/sysdeps/s390/s390-32/dl-trampoline.h
> +++ b/sysdeps/s390/s390-32/dl-trampoline.h
> @@ -148,7 +148,7 @@ _dl_runtime_resolve:
>   #undef F0_OFF
>   #undef F2_OFF
>   
> -#ifndef PROF
> +#if !defined PROF && defined SHARED
>   # define SIZEOF_STRUCT_LA_S390_32_REGS 168
>   # define REGS_OFF -264
>   # define R2_OFF -264
> diff --git a/sysdeps/s390/s390-64/dl-machine.h b/sysdeps/s390/s390-64/dl-machine.h
> index 9fabb09750..82259dad64 100644
> --- a/sysdeps/s390/s390-64/dl-machine.h
> +++ b/sysdeps/s390/s390-64/dl-machine.h
> @@ -111,16 +111,17 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   	 to intercept the calls to collect information.	 In this case we
>   	 don't store the address in the GOT so that all future calls also
>   	 end in this function.	*/
> +#ifdef SHARED
>         if (__glibc_unlikely (profile))
>   	{
> -#if defined HAVE_S390_VX_ASM_SUPPORT
> +# if defined HAVE_S390_VX_ASM_SUPPORT
>   	  if (GLRO(dl_hwcap) & HWCAP_S390_VX)
>   	    got[2] = (Elf64_Addr) &_dl_runtime_profile_vx;
>   	  else
>   	    got[2] = (Elf64_Addr) &_dl_runtime_profile;
> -#else
> +# else
>   	  got[2] = (Elf64_Addr) &_dl_runtime_profile;
> -#endif
> +# endif
>   
>   	  if (GLRO(dl_profile) != NULL
>   	      && _dl_name_match_p (GLRO(dl_profile), l))
> @@ -129,6 +130,7 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   	    GL(dl_profile_map) = l;
>   	}
>         else
> +#endif
>   	{
>   	  /* This function will get called to fix up the GOT entry indicated by
>   	     the offset on the stack, and then jump to the resolved address.  */
> diff --git a/sysdeps/s390/s390-64/dl-trampoline.h b/sysdeps/s390/s390-64/dl-trampoline.h
> index 3a7cfc5f92..61188119e6 100644
> --- a/sysdeps/s390/s390-64/dl-trampoline.h
> +++ b/sysdeps/s390/s390-64/dl-trampoline.h
> @@ -150,7 +150,7 @@ _dl_runtime_resolve:
>   #undef F4_OFF
>   #undef F6_OFF
>   
> -#ifndef PROF
> +#if !defined PROF && defined SHARED
>   # define SIZEOF_STRUCT_LA_S390_64_REGS 200
>   # define REGS_OFF -360
>   # define R2_OFF -360
> diff --git a/sysdeps/sh/dl-machine.h b/sysdeps/sh/dl-machine.h
> index 0e4eac42c3..e0480eae5a 100644
> --- a/sysdeps/sh/dl-machine.h
> +++ b/sysdeps/sh/dl-machine.h
> @@ -101,6 +101,7 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   	 to intercept the calls to collect information.	 In this case we
>   	 don't store the address in the GOT so that all future calls also
>   	 end in this function.	*/
> +#ifdef SHARED
>         if (profile)
>   	{
>   	  got[2] = (Elf32_Addr) &_dl_runtime_profile;
> @@ -110,6 +111,7 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   	    GL(dl_profile_map) = l;
>   	}
>         else
> +#endif
>   	/* This function will get called to fix up the GOT entry indicated by
>   	   the offset on the stack, and then jump to the resolved address.  */
>   	got[2] = (Elf32_Addr) &_dl_runtime_resolve;
> diff --git a/sysdeps/sh/dl-trampoline.S b/sysdeps/sh/dl-trampoline.S
> index 5d703341ed..ecaae34db4 100644
> --- a/sysdeps/sh/dl-trampoline.S
> +++ b/sysdeps/sh/dl-trampoline.S
> @@ -142,6 +142,7 @@ _dl_runtime_resolve:
>   	.size _dl_runtime_resolve, .-_dl_runtime_resolve
>   
>   
> +#ifdef SHARED
>   	.globl _dl_runtime_profile
>   	.type _dl_runtime_profile,@function
>   	cfi_startproc
> @@ -428,3 +429,4 @@ _dl_runtime_profile:
>   8:	.long _dl_audit_pltexit
>   #endif
>   	.size _dl_runtime_profile, .-_dl_runtime_profile
> +#endif /* SHARED */
> diff --git a/sysdeps/sparc/sparc32/dl-machine.h b/sysdeps/sparc/sparc32/dl-machine.h
> index 9b57ae1a93..b10e541810 100644
> --- a/sysdeps/sparc/sparc32/dl-machine.h
> +++ b/sysdeps/sparc/sparc32/dl-machine.h
> @@ -116,7 +116,8 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   	 bits of %g1 with an offset into the .rela.plt section and jump to
>   	 the beginning of the PLT.  */
>         plt = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]);
> -      if (__builtin_expect(profile, 0))
> +#ifdef SHARED
> +      if (__glibc_unlikely (profile))
>   	{
>   	  rfunc = (Elf32_Addr) &_dl_runtime_profile;
>   
> @@ -125,6 +126,7 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   	    GL(dl_profile_map) = l;
>   	}
>         else
> +#endif
>   	{
>   	  rfunc = (Elf32_Addr) &_dl_runtime_resolve;
>   	}
> diff --git a/sysdeps/sparc/sparc32/dl-trampoline.S b/sysdeps/sparc/sparc32/dl-trampoline.S
> index 08ff31b474..5e7d860ae4 100644
> --- a/sysdeps/sparc/sparc32/dl-trampoline.S
> +++ b/sysdeps/sparc/sparc32/dl-trampoline.S
> @@ -47,6 +47,7 @@ _dl_runtime_resolve:
>   
>   	.size	_dl_runtime_resolve, .-_dl_runtime_resolve
>   
> +#ifdef SHARED
>   	/* For the profiling cases we pass in our stack frame
>   	 * as the base of the La_sparc32_regs, so it looks
>   	 * like:
> @@ -185,3 +186,4 @@ _dl_runtime_profile:
>   	cfi_endproc
>   
>   	.size	_dl_runtime_profile, .-_dl_runtime_profile
> +#endif
> diff --git a/sysdeps/sparc/sparc64/dl-machine.h b/sysdeps/sparc/sparc64/dl-machine.h
> index 2f04ac550e..98469e7604 100644
> --- a/sysdeps/sparc/sparc64/dl-machine.h
> +++ b/sysdeps/sparc/sparc64/dl-machine.h
> @@ -136,7 +136,8 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>         Elf64_Addr res0_addr, res1_addr;
>         unsigned int *plt = (void *) D_PTR (l, l_info[DT_PLTGOT]);
>   
> -      if (__builtin_expect(profile, 0))
> +#ifdef SHARED
> +      if (__glibc_unlikely (profile))
>   	{
>   	  res0_addr = (Elf64_Addr) &_dl_runtime_profile_0;
>   	  res1_addr = (Elf64_Addr) &_dl_runtime_profile_1;
> @@ -146,6 +147,7 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   	    GL(dl_profile_map) = l;
>   	}
>         else
> +#endif
>   	{
>   	  res0_addr = (Elf64_Addr) &_dl_runtime_resolve_0;
>   	  res1_addr = (Elf64_Addr) &_dl_runtime_resolve_1;
> diff --git a/sysdeps/sparc/sparc64/dl-trampoline.S b/sysdeps/sparc/sparc64/dl-trampoline.S
> index 444690a71e..82b42681dd 100644
> --- a/sysdeps/sparc/sparc64/dl-trampoline.S
> +++ b/sysdeps/sparc/sparc64/dl-trampoline.S
> @@ -92,6 +92,7 @@ _dl_runtime_resolve_1:
>   
>   	.size	_dl_runtime_resolve_1, .-_dl_runtime_resolve_1
>   
> +#ifdef SHARED
>   	/* For the profiling cases we pass in our stack frame
>   	 * as the base of the La_sparc64_regs, so it looks
>   	 * like:
> @@ -323,3 +324,4 @@ _dl_runtime_profile_1:
>   	cfi_endproc
>   
>   	.size	_dl_runtime_resolve_1, .-_dl_runtime_resolve_1
> +#endif
> diff --git a/sysdeps/x86_64/dl-machine.h b/sysdeps/x86_64/dl-machine.h
> index 9ea2a70837..581a2f1a9e 100644
> --- a/sysdeps/x86_64/dl-machine.h
> +++ b/sysdeps/x86_64/dl-machine.h
> @@ -89,6 +89,7 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   
>         const struct cpu_features* cpu_features = __get_cpu_features ();
>   
> +#ifdef SHARED
>         /* The got[2] entry contains the address of a function which gets
>   	 called to get the address of a so far unresolved function and
>   	 jump to it.  The profiling extension of the dynamic linker allows
> @@ -111,6 +112,7 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
>   	    GL(dl_profile_map) = l;
>   	}
>         else
> +#endif
>   	{
>   	  /* This function will get called to fix up the GOT entry
>   	     indicated by the offset on the stack, and then jump to
> diff --git a/sysdeps/x86_64/dl-trampoline.S b/sysdeps/x86_64/dl-trampoline.S
> index a6b9a1826b..3fd30d58fc 100644
> --- a/sysdeps/x86_64/dl-trampoline.S
> +++ b/sysdeps/x86_64/dl-trampoline.S
> @@ -53,45 +53,49 @@
>   
>   #define RESTORE_AVX
>   
> -#define VEC_SIZE		64
> -#define VMOVA			vmovdqa64
> -#define VEC(i)			zmm##i
> -#define _dl_runtime_profile	_dl_runtime_profile_avx512
> -# define SECTION(p)		p##.evex512
> -#include "dl-trampoline.h"
> -#undef _dl_runtime_profile
> -#undef VEC
> -#undef VMOVA
> -#undef VEC_SIZE
> -#undef SECTION
> -
> -#if MINIMUM_X86_ISA_LEVEL <= AVX_X86_ISA_LEVEL
> -# define VEC_SIZE		32
> -# define VMOVA			vmovdqa
> -# define VEC(i)			ymm##i
> -# define SECTION(p)		p##.avx
> -# define _dl_runtime_profile	_dl_runtime_profile_avx
> +#ifdef SHARED
> +# define VEC_SIZE		64
> +# define VMOVA			vmovdqa64
> +# define VEC(i)			zmm##i
> +# define _dl_runtime_profile	_dl_runtime_profile_avx512
> +#  define SECTION(p)		p##.evex512
>   # include "dl-trampoline.h"
>   # undef _dl_runtime_profile
>   # undef VEC
>   # undef VMOVA
>   # undef VEC_SIZE
>   # undef SECTION
> -#endif
>   
> -#if MINIMUM_X86_ISA_LEVEL < AVX_X86_ISA_LEVEL
> +# if MINIMUM_X86_ISA_LEVEL <= AVX_X86_ISA_LEVEL
> +#  define VEC_SIZE		32
> +#  define VMOVA			vmovdqa
> +#  define VEC(i)			ymm##i
> +#  define SECTION(p)		p##.avx
> +#  define _dl_runtime_profile	_dl_runtime_profile_avx
> +#  include "dl-trampoline.h"
> +#  undef _dl_runtime_profile
> +#  undef VEC
> +#  undef VMOVA
> +#  undef VEC_SIZE
> +#  undef SECTION
> +# endif
> +
> +# if MINIMUM_X86_ISA_LEVEL < AVX_X86_ISA_LEVEL
>   /* movaps/movups is 1-byte shorter.  */
> -# define VEC_SIZE		16
> -# define VMOVA			movaps
> -# define VEC(i)			xmm##i
> -# define _dl_runtime_profile	_dl_runtime_profile_sse
> -# undef RESTORE_AVX
> -# include "dl-trampoline.h"
> -# undef _dl_runtime_profile
> -# undef VEC
> -# undef VMOVA
> -# undef VEC_SIZE
> +#  define VEC_SIZE		16
> +#  define VMOVA			movaps
> +#  define VEC(i)			xmm##i
> +#  define _dl_runtime_profile	_dl_runtime_profile_sse
> +#  undef RESTORE_AVX
> +#  include "dl-trampoline.h"
> +#  undef _dl_runtime_profile
> +#  undef VEC
> +#  undef VMOVA
> +#  undef VEC_SIZE
> +# endif
> +#endif /* SHARED */
>   
> +#if MINIMUM_X86_ISA_LEVEL < AVX_X86_ISA_LEVEL
>   # define USE_FXSAVE
>   # define STATE_SAVE_ALIGNMENT	16
>   # define _dl_runtime_resolve	_dl_runtime_resolve_fxsave

  reply	other threads:[~2023-11-20 22:55 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-06 20:25 [PATCH v3 00/19] Improve loader environment variable handling Adhemerval Zanella
2023-11-06 20:25 ` [PATCH v3 01/19] elf: Remove /etc/suid-debug support Adhemerval Zanella
2023-11-06 20:25 ` [PATCH v3 02/19] elf: Add GLIBC_TUNABLES to unsecvars Adhemerval Zanella
2023-11-06 20:25 ` [PATCH v3 03/19] elf: Ignore GLIBC_TUNABLES for setuid/setgid binaries Adhemerval Zanella
2023-11-06 20:25 ` [PATCH v3 04/19] elf: Add all malloc tunable to unsecvars Adhemerval Zanella
2023-11-06 20:25 ` [PATCH v3 05/19] elf: Do not process invalid tunable format Adhemerval Zanella
2023-11-06 20:25 ` [PATCH v3 06/19] elf: Do not parse ill-formatted strings Adhemerval Zanella
2023-11-20 21:48   ` Siddhesh Poyarekar
2023-11-06 20:25 ` [PATCH v3 07/19] elf: Fix _dl_debug_vdprintf to work before self-relocation Adhemerval Zanella
2023-11-06 20:25 ` [PATCH v3 08/19] elf: Emit warning if tunable is ill-formatted Adhemerval Zanella
2023-11-20 21:50   ` Siddhesh Poyarekar
2023-11-06 20:25 ` [PATCH v3 09/19] x86: Use dl-symbol-redir-ifunc.h on cpu-tunables Adhemerval Zanella
2023-11-06 20:25 ` [PATCH v3 10/19] s390: " Adhemerval Zanella
2023-11-06 20:25 ` [PATCH v3 11/19] elf: Do not duplicate the GLIBC_TUNABLES string Adhemerval Zanella
2023-11-20 22:44   ` Siddhesh Poyarekar
2023-11-21 18:12     ` Adhemerval Zanella Netto
2023-11-22 11:39       ` Adhemerval Zanella Netto
2023-11-22 12:23       ` Siddhesh Poyarekar
2023-11-22 13:03         ` Adhemerval Zanella Netto
2023-11-22 13:24           ` Siddhesh Poyarekar
2023-11-22 14:13             ` Adhemerval Zanella Netto
2023-11-06 20:25 ` [PATCH v3 12/19] elf: Ignore LD_PROFILE for setuid binaries Adhemerval Zanella
2023-11-20 22:47   ` Siddhesh Poyarekar
2023-11-06 20:25 ` [PATCH v3 13/19] elf: Remove LD_PROFILE for static binaries Adhemerval Zanella
2023-11-20 22:55   ` Siddhesh Poyarekar [this message]
2023-11-06 20:25 ` [PATCH v3 14/19] elf: Ignore loader debug env vars for setuid Adhemerval Zanella
2023-11-20 22:57   ` Siddhesh Poyarekar
2023-11-21 18:24     ` Adhemerval Zanella Netto
2023-11-06 20:25 ` [PATCH v3 15/19] elf: Remove any_debug from dl_main_state Adhemerval Zanella
2023-11-20 22:58   ` Siddhesh Poyarekar
2023-11-06 20:25 ` [PATCH v3 16/19] elf: Ignore LD_LIBRARY_PATH and debug env var for setuid for static Adhemerval Zanella
2023-11-20 22:59   ` Siddhesh Poyarekar
2023-11-06 20:25 ` [PATCH v3 17/19] elf: Add comments on how LD_AUDIT and LD_PRELOAD handle __libc_enable_secure Adhemerval Zanella
2023-11-06 20:25 ` [PATCH v3 18/19] elf: Ignore LD_BIND_NOW and LD_BIND_NOT for setuid binaries Adhemerval Zanella
2023-11-20 23:02   ` Siddhesh Poyarekar
2023-11-06 20:25 ` [PATCH v3 19/19] elf: Refactor process_envvars Adhemerval Zanella
2023-11-20 23:09   ` Siddhesh Poyarekar
2023-11-21 19:00     ` Adhemerval Zanella Netto
2023-11-20 23:12 ` [PATCH v3 00/19] Improve loader environment variable handling Siddhesh Poyarekar
2023-11-21 19:37   ` Adhemerval Zanella Netto

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=86a6f0b5-0358-483c-bad8-11fe65fa4ee4@sourceware.org \
    --to=siddhesh@sourceware.org \
    --cc=adhemerval.zanella@linaro.org \
    --cc=libc-alpha@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).