aboutsummaryrefslogtreecommitdiff
path: root/elf
diff options
context:
space:
mode:
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>2026-02-12 09:48:53 -0300
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2026-02-18 09:35:03 -0300
commit0a380fe9a31bc2d5793c7c5d22d36c45dfe6e2ed (patch)
tree19575a841b5a1a594dce21c264a3860f180da16d /elf
parentecb60726d0c242b9e92683f23259337b3b915fe4 (diff)
downloadglibc-master.zip
glibc-master.tar.gz
glibc-master.tar.bz2
elf: Use dl-symbol-redir-ifunc.h instead _dl_strlenHEADmaster
Also replace the loop with strlen And remove -fno-tree-loop-distribute-patterns usage. It requires redirect the strlen to the baseline implementation for x86_64, aarch64, and loongarch64. Checked on x86_64-linux-gnu{-v2,v3} and aarch64-linux-gnu with both gcc-15 and clang-21. Reviewed-by: DJ Delorie <dj@redhat.com>
Diffstat (limited to 'elf')
-rw-r--r--elf/Makefile6
-rw-r--r--elf/dl-tunables.c14
2 files changed, 1 insertions, 19 deletions
diff --git a/elf/Makefile b/elf/Makefile
index 396e97b..1a0ed49 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -97,12 +97,6 @@ ifeq (yesyes,$(build-shared)$(run-built-tests))
tests-special += $(objpfx)list-tunables.out
endif
-# Make sure that the compiler does not insert any library calls in tunables
-# code paths.
-ifeq (yes,$(have-loop-to-function))
-CFLAGS-dl-tunables.c += -fno-tree-loop-distribute-patterns
-endif
-
all-dl-routines = $(dl-routines) $(sysdep-dl-routines)
# But they are absent from the shared libc, because that code is in ld.so.
elide-routines.os = \
diff --git a/elf/dl-tunables.c b/elf/dl-tunables.c
index 37ade37..bdb1de4 100644
--- a/elf/dl-tunables.c
+++ b/elf/dl-tunables.c
@@ -37,16 +37,6 @@
#define TUNABLES_INTERNAL 1
#include "dl-tunables.h"
-/* The function might be called before the process is self-relocated. */
-static size_t
-__attribute_optimization_barrier__
-_dl_strlen (const char *s)
-{
- const char *p = s;
- for (; *s != '\0'; s++);
- return s - p;
-}
-
static char **
get_next_env (char **envp, char **name, char **val, char ***prev_envp)
{
@@ -335,10 +325,8 @@ __tunables_init (char **envp)
if (tunable_is_name (name, envname))
{
/* The environment variable is always null-terminated. */
- size_t envvallen = _dl_strlen (envval);
-
tunables_env_alias[i] =
- (struct tunable_toset_t) { cur, envval, envvallen };
+ (struct tunable_toset_t) { cur, envval, strlen (envval) };
break;
}
}