aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--elf/Makefile3
-rw-r--r--elf/Versions8
-rw-r--r--elf/dl-catch.c (renamed from elf/dl-error-skeleton.c)154
-rw-r--r--elf/dl-error-minimal.c23
-rw-r--r--elf/dl-error.c27
-rw-r--r--elf/rtld.c2
-rw-r--r--nptl/descr.h3
-rw-r--r--sysdeps/generic/ldsodefs.h12
-rw-r--r--sysdeps/generic/localplt.data5
-rw-r--r--sysdeps/mach/hurd/i386/localplt.data5
-rw-r--r--sysdeps/mach/hurd/i386/tls.h3
-rw-r--r--sysdeps/unix/sysv/linux/aarch64/localplt.data5
-rw-r--r--sysdeps/unix/sysv/linux/alpha/localplt.data5
-rw-r--r--sysdeps/unix/sysv/linux/arc/localplt.data5
-rw-r--r--sysdeps/unix/sysv/linux/arm/localplt.data5
-rw-r--r--sysdeps/unix/sysv/linux/csky/localplt.data5
-rw-r--r--sysdeps/unix/sysv/linux/hppa/localplt.data5
-rw-r--r--sysdeps/unix/sysv/linux/i386/localplt.data5
-rw-r--r--sysdeps/unix/sysv/linux/ia64/localplt.data5
-rw-r--r--sysdeps/unix/sysv/linux/loongarch/localplt.data5
-rw-r--r--sysdeps/unix/sysv/linux/m68k/coldfire/localplt.data5
-rw-r--r--sysdeps/unix/sysv/linux/m68k/m680x0/localplt.data5
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/localplt.data5
-rw-r--r--sysdeps/unix/sysv/linux/nios2/localplt.data5
-rw-r--r--sysdeps/unix/sysv/linux/or1k/localplt.data5
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data5
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data5
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data5
-rw-r--r--sysdeps/unix/sysv/linux/riscv/localplt.data5
-rw-r--r--sysdeps/unix/sysv/linux/s390/localplt.data5
-rw-r--r--sysdeps/unix/sysv/linux/sh/localplt.data5
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data5
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data5
-rw-r--r--sysdeps/x86_64/localplt.data5
34 files changed, 89 insertions, 271 deletions
diff --git a/elf/Makefile b/elf/Makefile
index 5f7d222..eca7b28 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -34,7 +34,6 @@ routines = \
dl-addr \
dl-addr-obj \
dl-early_allocate \
- dl-error \
dl-iteratephdr \
dl-libc \
dl-origin \
@@ -54,6 +53,7 @@ routines = \
dl-routines = \
dl-call-libc-early-init \
dl-call_fini \
+ dl-catch \
dl-close \
dl-debug \
dl-debug-symbols \
@@ -134,7 +134,6 @@ rtld-routines = \
dl-diagnostics-cpu \
dl-diagnostics-kernel \
dl-environ \
- dl-error-minimal \
dl-hwcaps \
dl-hwcaps-subdirs \
dl-hwcaps_split \
diff --git a/elf/Versions b/elf/Versions
index a9ff278..4614ace 100644
--- a/elf/Versions
+++ b/elf/Versions
@@ -31,10 +31,6 @@ libc {
GLIBC_PRIVATE {
# functions used in other libraries
__libc_early_init;
-
- # Internal error handling support. Interposes the functions in ld.so.
- _dl_signal_exception; _dl_catch_exception;
- _dl_signal_error; _dl_catch_error;
}
}
@@ -77,10 +73,8 @@ ld {
# Internal error handling support.
_dl_exception_create; _dl_exception_create_format; _dl_exception_free;
-
- # Internal error handling support. Interposed by libc.so.
_dl_signal_exception; _dl_catch_exception;
- _dl_signal_error; _dl_catch_error;
+ _dl_signal_error;
# Set value of a tunable.
__tunable_get_val;
diff --git a/elf/dl-error-skeleton.c b/elf/dl-catch.c
index 8abf437..54763dd 100644
--- a/elf/dl-error-skeleton.c
+++ b/elf/dl-catch.c
@@ -1,4 +1,4 @@
-/* Template for error handling for runtime dynamic linker.
+/* Exception handling in the dynamic linker.
Copyright (C) 1995-2022 Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -16,16 +16,6 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
-/* The following macro needs to be defined before including this
- skeleton file:
-
- DL_ERROR_BOOTSTRAP
-
- If 1, do not use TLS and implement _dl_signal_cerror and
- _dl_receive_error. If 0, TLS is used, and the variants with
- error callbacks are not provided. */
-
-
#include <libintl.h>
#include <setjmp.h>
#include <stdbool.h>
@@ -34,39 +24,54 @@
#include <unistd.h>
#include <ldsodefs.h>
#include <stdio.h>
+#include <tls.h>
/* This structure communicates state between _dl_catch_error and
_dl_signal_error. */
-struct catch
+struct rtld_catch
{
struct dl_exception *exception; /* The exception data is stored there. */
volatile int *errcode; /* Return value of _dl_signal_error. */
jmp_buf env; /* longjmp here on error. */
};
-/* Multiple threads at once can use the `_dl_catch_error' function. The
- calls can come from `_dl_map_object_deps', `_dlerror_run', or from
- any of the libc functionality which loads dynamic objects (NSS, iconv).
- Therefore we have to be prepared to save the state in thread-local
- memory. */
-#if !DL_ERROR_BOOTSTRAP
-static __thread struct catch *catch_hook attribute_tls_model_ie;
-#else
-/* The version of this code in ld.so cannot use thread-local variables
- and is used during bootstrap only. */
-static struct catch *catch_hook;
+/* Multiple threads at once can use the `_dl_catch_error' function.
+ The calls can come from `_dl_map_object_deps', `_dlerror_run', or
+ from any of the libc functionality which loads dynamic objects
+ (NSS, iconv). Therefore we have to be prepared to save the state
+ in thread-local memory. We use THREAD_GETMEM and THREAD_SETMEM
+ instead of ELF TLS because ELF TLS is not available in the dynamic
+ loader. Additionally, the exception handling mechanism must be
+ usable before the TCB has been set up, which is why
+ rtld_catch_notls is used if !__rtld_tls_init_tp_called. This is
+ not needed for static builds, where initialization completes before
+ static dlopen etc. can be called. */
+
+#if IS_IN (rtld)
+static struct rtld_catch *rtld_catch_notls;
#endif
-#if DL_ERROR_BOOTSTRAP
-/* This points to a function which is called when an continuable error is
- received. Unlike the handling of `catch' this function may return.
- The arguments will be the `errstring' and `objname'.
+static struct rtld_catch *
+get_catch (void)
+{
+#if IS_IN (rtld)
+ if (!__rtld_tls_init_tp_called)
+ return rtld_catch_notls;
+ else
+#endif
+ return THREAD_GETMEM (THREAD_SELF, rtld_catch);
+}
- Since this functionality is not used in normal programs (only in ld.so)
- we do not care about multi-threaded programs here. We keep this as a
- global variable. */
-static receiver_fct receiver;
-#endif /* DL_ERROR_BOOTSTRAP */
+static void
+set_catch (struct rtld_catch *catch)
+{
+#if IS_IN (rtld)
+ if (!__rtld_tls_init_tp_called)
+ rtld_catch_notls = catch;
+ else
+#endif
+ THREAD_SETMEM (THREAD_SELF, rtld_catch, catch);
+}
/* Lossage while resolving the program's own symbols is always fatal. */
static void
@@ -89,7 +94,7 @@ void
_dl_signal_exception (int errcode, struct dl_exception *exception,
const char *occasion)
{
- struct catch *lcatch = catch_hook;
+ struct rtld_catch *lcatch = get_catch ();
if (lcatch != NULL)
{
*lcatch->exception = *exception;
@@ -101,13 +106,13 @@ _dl_signal_exception (int errcode, struct dl_exception *exception,
else
fatal_error (errcode, exception->objname, occasion, exception->errstring);
}
-libc_hidden_def (_dl_signal_exception)
+rtld_hidden_def (_dl_signal_exception)
void
_dl_signal_error (int errcode, const char *objname, const char *occation,
const char *errstring)
{
- struct catch *lcatch = catch_hook;
+ struct rtld_catch *lcatch = get_catch ();
if (! errstring)
errstring = N_("DYNAMIC LINKER BUG!!!");
@@ -123,10 +128,18 @@ _dl_signal_error (int errcode, const char *objname, const char *occation,
else
fatal_error (errcode, objname, occation, errstring);
}
-libc_hidden_def (_dl_signal_error)
+rtld_hidden_def (_dl_signal_error)
+
+#if IS_IN (rtld)
+/* This points to a function which is called when a continuable error is
+ received. Unlike the handling of `catch' this function may return.
+ The arguments will be the `errstring' and `objname'.
+ Since this functionality is not used in normal programs (only in ld.so)
+ we do not care about multi-threaded programs here. We keep this as a
+ global variable. */
+static receiver_fct receiver;
-#if DL_ERROR_BOOTSTRAP
void
_dl_signal_cexception (int errcode, struct dl_exception *exception,
const char *occasion)
@@ -167,7 +180,23 @@ _dl_signal_cerror (int errcode, const char *objname, const char *occation,
else
_dl_signal_error (errcode, objname, occation, errstring);
}
-#endif /* DL_ERROR_BOOTSTRAP */
+
+void
+_dl_receive_error (receiver_fct fct, void (*operate) (void *), void *args)
+{
+ struct rtld_catch *old_catch = get_catch ();
+ receiver_fct old_receiver = receiver;
+
+ /* Set the new values. */
+ set_catch (NULL);
+ receiver = fct;
+
+ (*operate) (args);
+
+ set_catch (old_catch);
+ receiver = old_receiver;
+}
+#endif
int
_dl_catch_exception (struct dl_exception *exception,
@@ -177,11 +206,11 @@ _dl_catch_exception (struct dl_exception *exception,
Exceptions during operate (args) are fatal. */
if (exception == NULL)
{
- struct catch *const old = catch_hook;
- catch_hook = NULL;
+ struct rtld_catch *old_catch = get_catch ();
+ set_catch (NULL);
operate (args);
/* If we get here, the operation was successful. */
- catch_hook = old;
+ set_catch (old_catch);
return 0;
}
@@ -194,19 +223,19 @@ _dl_catch_exception (struct dl_exception *exception,
in _dl_signal_error (before longjmp). */
volatile int errcode;
- struct catch c;
+ struct rtld_catch c;
/* Don't use an initializer since we don't need to clear C.env. */
c.exception = exception;
c.errcode = &errcode;
- struct catch *const old = catch_hook;
- catch_hook = &c;
+ struct rtld_catch *old = get_catch ();
+ set_catch (&c);
/* Do not save the signal mask. */
if (__builtin_expect (__sigsetjmp (c.env, 0), 0) == 0)
{
(*operate) (args);
- catch_hook = old;
+ set_catch (old);
*exception = (struct dl_exception) { NULL };
return 0;
}
@@ -214,10 +243,10 @@ _dl_catch_exception (struct dl_exception *exception,
/* We get here only if we longjmp'd out of OPERATE.
_dl_signal_exception has already stored values into
*EXCEPTION. */
- catch_hook = old;
+ set_catch (old);
return errcode;
}
-libc_hidden_def (_dl_catch_exception)
+rtld_hidden_def (_dl_catch_exception)
int
_dl_catch_error (const char **objname, const char **errstring,
@@ -230,34 +259,3 @@ _dl_catch_error (const char **objname, const char **errstring,
*mallocedp = exception.message_buffer == exception.errstring;
return errorcode;
}
-libc_hidden_def (_dl_catch_error)
-
-#if DL_ERROR_BOOTSTRAP
-void
-_dl_receive_error (receiver_fct fct, void (*operate) (void *), void *args)
-{
- struct catch *old_catch = catch_hook;
- receiver_fct old_receiver = receiver;
-
- /* Set the new values. */
- catch_hook = NULL;
- receiver = fct;
-
- (*operate) (args);
-
- catch_hook = old_catch;
- receiver = old_receiver;
-}
-
-/* Forwarder used for initializing GLRO (_dl_catch_error). */
-int
-_rtld_catch_error (const char **objname, const char **errstring,
- bool *mallocedp, void (*operate) (void *),
- void *args)
-{
- /* The reference to _dl_catch_error will eventually be relocated to
- point to the implementation in libc.so. */
- return _dl_catch_error (objname, errstring, mallocedp, operate, args);
-}
-
-#endif /* DL_ERROR_BOOTSTRAP */
diff --git a/elf/dl-error-minimal.c b/elf/dl-error-minimal.c
deleted file mode 100644
index 9b833b9..0000000
--- a/elf/dl-error-minimal.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Error handling for runtime dynamic linker, minimal version.
- Copyright (C) 1995-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
- <https://www.gnu.org/licenses/>. */
-
-/* This version does lives in ld.so, does not use thread-local data
- and supports _dl_signal_cerror and _dl_receive_error. */
-
-#define DL_ERROR_BOOTSTRAP 1
-#include "dl-error-skeleton.c"
diff --git a/elf/dl-error.c b/elf/dl-error.c
deleted file mode 100644
index 0b7332a..0000000
--- a/elf/dl-error.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Error handling for runtime dynamic linker, full version.
- Copyright (C) 1995-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
- <https://www.gnu.org/licenses/>. */
-
-/* This implementation lives in libc.so because it uses thread-local
- data, which is not available in ld.so. It interposes the version
- in dl-error-minimal.c after ld.so bootstrap.
-
- The signal/catch mechanism is used by the audit framework, which
- means that even in ld.so, not all errors are fatal. */
-
-#define DL_ERROR_BOOTSTRAP 0
-#include "dl-error-skeleton.c"
diff --git a/elf/rtld.c b/elf/rtld.c
index 221be5c..8671594 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -370,7 +370,7 @@ struct rtld_global_ro _rtld_global_ro attribute_relro =
._dl_lookup_symbol_x = _dl_lookup_symbol_x,
._dl_open = _dl_open,
._dl_close = _dl_close,
- ._dl_catch_error = _rtld_catch_error,
+ ._dl_catch_error = _dl_catch_error,
._dl_error_free = _dl_error_free,
._dl_tls_get_addr_soft = _dl_tls_get_addr_soft,
._dl_libc_freeres = __rtld_libc_freeres,
diff --git a/nptl/descr.h b/nptl/descr.h
index 5cacb28..0fa0e48 100644
--- a/nptl/descr.h
+++ b/nptl/descr.h
@@ -390,6 +390,9 @@ struct pthread
masked.) */
internal_sigset_t sigmask;
+ /* Used by the exception handling implementation in the dynamic loader. */
+ struct rtld_catch *rtld_catch;
+
/* Indicates whether is a C11 thread created by thrd_creat. */
bool c11;
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
index 2747f88..9dae72b 100644
--- a/sysdeps/generic/ldsodefs.h
+++ b/sysdeps/generic/ldsodefs.h
@@ -848,13 +848,13 @@ rtld_hidden_proto (_dl_exception_free)
void _dl_signal_exception (int errcode, struct dl_exception *,
const char *occasion)
__attribute__ ((__noreturn__));
-libc_hidden_proto (_dl_signal_exception)
+rtld_hidden_proto (_dl_signal_exception)
/* Like _dl_signal_exception, but creates the exception first. */
extern void _dl_signal_error (int errcode, const char *object,
const char *occasion, const char *errstring)
__attribute__ ((__noreturn__));
-libc_hidden_proto (_dl_signal_error)
+rtld_hidden_proto (_dl_signal_error)
/* Like _dl_signal_exception, but may return when called in the
context of _dl_receive_error. This is only used during ld.so
@@ -906,11 +906,7 @@ extern void _dl_receive_error (receiver_fct fct, void (*operate) (void *),
the returned string is allocated using the libc's malloc. */
extern int _dl_catch_error (const char **objname, const char **errstring,
bool *mallocedp, void (*operate) (void *),
- void *args);
-libc_hidden_proto (_dl_catch_error)
-
-/* Used for initializing GLRO (_dl_catch_error). */
-extern __typeof__ (_dl_catch_error) _rtld_catch_error attribute_hidden;
+ void *args) attribute_hidden;
/* Call OPERATE (ARGS). If no error occurs, set *EXCEPTION to zero.
Otherwise, store a copy of the raised exception in *EXCEPTION,
@@ -919,7 +915,7 @@ extern __typeof__ (_dl_catch_error) _rtld_catch_error attribute_hidden;
disabled (so that exceptions are fatal). */
int _dl_catch_exception (struct dl_exception *exception,
void (*operate) (void *), void *args);
-libc_hidden_proto (_dl_catch_exception)
+rtld_hidden_proto (_dl_catch_exception)
/* Open the shared object NAME and map in its segments.
LOADER's DT_RPATH is used in searching for NAME.
diff --git a/sysdeps/generic/localplt.data b/sysdeps/generic/localplt.data
index 9b4f357..afa03b0 100644
--- a/sysdeps/generic/localplt.data
+++ b/sysdeps/generic/localplt.data
@@ -6,8 +6,3 @@ libc.so: free
libc.so: malloc
libc.so: realloc
libm.so: matherr
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error
-ld.so: _dl_catch_error
-ld.so: _dl_signal_exception
-ld.so: _dl_catch_exception
diff --git a/sysdeps/mach/hurd/i386/localplt.data b/sysdeps/mach/hurd/i386/localplt.data
index fdff008..c01e4d8 100644
--- a/sysdeps/mach/hurd/i386/localplt.data
+++ b/sysdeps/mach/hurd/i386/localplt.data
@@ -8,11 +8,6 @@ libc.so: free + REL R_386_GLOB_DAT
libc.so: malloc + REL R_386_GLOB_DAT
libc.so: realloc + REL R_386_GLOB_DAT
libm.so: matherr + REL R_386_GLOB_DAT
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error + REL R_386_GLOB_DAT
-ld.so: _dl_catch_error + REL R_386_GLOB_DAT
-ld.so: _dl_signal_exception + REL R_386_GLOB_DAT
-ld.so: _dl_catch_exception + REL R_386_GLOB_DAT
# The dynamic linker has its own versions of basic functions for initial loading
# of shared libraries. These need to be overriden by libc once loaded.
ld.so: __open ?
diff --git a/sysdeps/mach/hurd/i386/tls.h b/sysdeps/mach/hurd/i386/tls.h
index 3817b72..602bacc 100644
--- a/sysdeps/mach/hurd/i386/tls.h
+++ b/sysdeps/mach/hurd/i386/tls.h
@@ -48,6 +48,9 @@ typedef struct
compatible with the i386 Linux version. */
mach_port_t reply_port; /* This thread's reply port. */
struct hurd_sigstate *_hurd_sigstate;
+
+ /* Used by the exception handling implementation in the dynamic loader. */
+ struct rtld_catch *rtld_catch;
} tcbhead_t;
/* Return tcbhead_t from a TLS segment descriptor. */
diff --git a/sysdeps/unix/sysv/linux/aarch64/localplt.data b/sysdeps/unix/sysv/linux/aarch64/localplt.data
index 348b3f3..5d217cc 100644
--- a/sysdeps/unix/sysv/linux/aarch64/localplt.data
+++ b/sysdeps/unix/sysv/linux/aarch64/localplt.data
@@ -11,8 +11,3 @@ libm.so: matherr
libc.so: __getauxval ?
# The dynamic loader needs __tls_get_addr for TLS.
ld.so: __tls_get_addr
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error
-ld.so: _dl_catch_error
-ld.so: _dl_signal_exception
-ld.so: _dl_catch_exception
diff --git a/sysdeps/unix/sysv/linux/alpha/localplt.data b/sysdeps/unix/sysv/linux/alpha/localplt.data
index 44bf36f..8548e02 100644
--- a/sysdeps/unix/sysv/linux/alpha/localplt.data
+++ b/sysdeps/unix/sysv/linux/alpha/localplt.data
@@ -25,8 +25,3 @@ libm.so: matherr + RELA R_ALPHA_GLOB_DAT
libm.so: __atan2
# The dynamic loader needs __tls_get_addr for TLS.
ld.so: __tls_get_addr ?
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error + RELA R_ALPHA_GLOB_DAT
-ld.so: _dl_catch_error + RELA R_ALPHA_GLOB_DAT
-ld.so: _dl_signal_exception + RELA R_ALPHA_GLOB_DAT
-ld.so: _dl_catch_exception + RELA R_ALPHA_GLOB_DAT
diff --git a/sysdeps/unix/sysv/linux/arc/localplt.data b/sysdeps/unix/sysv/linux/arc/localplt.data
index ac5332c..8a13efc 100644
--- a/sysdeps/unix/sysv/linux/arc/localplt.data
+++ b/sysdeps/unix/sysv/linux/arc/localplt.data
@@ -4,8 +4,3 @@ libc.so: calloc
libc.so: free
# At -Os, a struct assignment in libgcc-static pulls this in
libc.so: memcpy ?
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error
-ld.so: _dl_catch_error
-ld.so: _dl_signal_exception
-ld.so: _dl_catch_exception
diff --git a/sysdeps/unix/sysv/linux/arm/localplt.data b/sysdeps/unix/sysv/linux/arm/localplt.data
index 7889644..162c664 100644
--- a/sysdeps/unix/sysv/linux/arm/localplt.data
+++ b/sysdeps/unix/sysv/linux/arm/localplt.data
@@ -6,8 +6,3 @@ libc.so: realloc
libm.so: matherr
# The dynamic loader needs __tls_get_addr for TLS.
ld.so: __tls_get_addr
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error
-ld.so: _dl_catch_error
-ld.so: _dl_signal_exception
-ld.so: _dl_catch_exception
diff --git a/sysdeps/unix/sysv/linux/csky/localplt.data b/sysdeps/unix/sysv/linux/csky/localplt.data
index 817ab26..547b1c1 100644
--- a/sysdeps/unix/sysv/linux/csky/localplt.data
+++ b/sysdeps/unix/sysv/linux/csky/localplt.data
@@ -5,8 +5,3 @@ libc.so: calloc
libc.so: free
libc.so: malloc
libc.so: realloc
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error
-ld.so: _dl_catch_error
-ld.so: _dl_signal_exception
-ld.so: _dl_catch_exception
diff --git a/sysdeps/unix/sysv/linux/hppa/localplt.data b/sysdeps/unix/sysv/linux/hppa/localplt.data
index baf857a..f8582c0 100644
--- a/sysdeps/unix/sysv/linux/hppa/localplt.data
+++ b/sysdeps/unix/sysv/linux/hppa/localplt.data
@@ -9,8 +9,3 @@ libc.so: __sigsetjmp
libc.so: _IO_funlockfile
libc.so: __errno_location
libm.so: matherr
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error
-ld.so: _dl_catch_error
-ld.so: _dl_signal_exception
-ld.so: _dl_catch_exception
diff --git a/sysdeps/unix/sysv/linux/i386/localplt.data b/sysdeps/unix/sysv/linux/i386/localplt.data
index f9bf7fb..a998772 100644
--- a/sysdeps/unix/sysv/linux/i386/localplt.data
+++ b/sysdeps/unix/sysv/linux/i386/localplt.data
@@ -6,8 +6,3 @@ libc.so: free + REL R_386_GLOB_DAT
libc.so: malloc + REL R_386_GLOB_DAT
libc.so: realloc + REL R_386_GLOB_DAT
libm.so: matherr + REL R_386_GLOB_DAT
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error + REL R_386_GLOB_DAT
-ld.so: _dl_catch_error + REL R_386_GLOB_DAT
-ld.so: _dl_signal_exception + REL R_386_GLOB_DAT
-ld.so: _dl_catch_exception + REL R_386_GLOB_DAT
diff --git a/sysdeps/unix/sysv/linux/ia64/localplt.data b/sysdeps/unix/sysv/linux/ia64/localplt.data
index 174fb88..9673d4b 100644
--- a/sysdeps/unix/sysv/linux/ia64/localplt.data
+++ b/sysdeps/unix/sysv/linux/ia64/localplt.data
@@ -5,8 +5,3 @@ libc.so: realloc
libm.so: matherr
libm.so: matherrf
libm.so: matherrl
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error
-ld.so: _dl_catch_error
-ld.so: _dl_signal_exception
-ld.so: _dl_catch_exception
diff --git a/sysdeps/unix/sysv/linux/loongarch/localplt.data b/sysdeps/unix/sysv/linux/loongarch/localplt.data
index 817ab26..547b1c1 100644
--- a/sysdeps/unix/sysv/linux/loongarch/localplt.data
+++ b/sysdeps/unix/sysv/linux/loongarch/localplt.data
@@ -5,8 +5,3 @@ libc.so: calloc
libc.so: free
libc.so: malloc
libc.so: realloc
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error
-ld.so: _dl_catch_error
-ld.so: _dl_signal_exception
-ld.so: _dl_catch_exception
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/localplt.data b/sysdeps/unix/sysv/linux/m68k/coldfire/localplt.data
index 42fa905..ea77046 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/localplt.data
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/localplt.data
@@ -4,8 +4,3 @@ libc.so: free
libc.so: malloc
libc.so: realloc
libm.so: matherr
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error
-ld.so: _dl_catch_error
-ld.so: _dl_signal_exception
-ld.so: _dl_catch_exception
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/localplt.data b/sysdeps/unix/sysv/linux/m68k/m680x0/localplt.data
index 34bd4c1..8ffdf3b 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/localplt.data
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/localplt.data
@@ -5,8 +5,3 @@ libc.so: free
libc.so: malloc
libc.so: realloc
libm.so: matherr
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error
-ld.so: _dl_catch_error
-ld.so: _dl_signal_exception
-ld.so: _dl_catch_exception
diff --git a/sysdeps/unix/sysv/linux/microblaze/localplt.data b/sysdeps/unix/sysv/linux/microblaze/localplt.data
index c380131..7cd3653 100644
--- a/sysdeps/unix/sysv/linux/microblaze/localplt.data
+++ b/sysdeps/unix/sysv/linux/microblaze/localplt.data
@@ -6,8 +6,3 @@ libc.so: realloc
libm.so: matherr
# The dynamic loader needs __tls_get_addr for TLS.
ld.so: __tls_get_addr ?
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error
-ld.so: _dl_catch_error
-ld.so: _dl_signal_exception
-ld.so: _dl_catch_exception
diff --git a/sysdeps/unix/sysv/linux/nios2/localplt.data b/sysdeps/unix/sysv/linux/nios2/localplt.data
index c9802cc..f502a3f 100644
--- a/sysdeps/unix/sysv/linux/nios2/localplt.data
+++ b/sysdeps/unix/sysv/linux/nios2/localplt.data
@@ -28,8 +28,3 @@ libc.so: __extendsfdf2
libc.so: __floatundidf ?
libc.so: __floatunsidf ?
libm.so: matherr
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error
-ld.so: _dl_catch_error
-ld.so: _dl_signal_exception
-ld.so: _dl_catch_exception
diff --git a/sysdeps/unix/sysv/linux/or1k/localplt.data b/sysdeps/unix/sysv/linux/or1k/localplt.data
index 04eb9fc..e770495 100644
--- a/sysdeps/unix/sysv/linux/or1k/localplt.data
+++ b/sysdeps/unix/sysv/linux/or1k/localplt.data
@@ -7,8 +7,3 @@ libc.so: malloc
libc.so: realloc
# Generated by the compiler because there is no trap insn pattern.
libc.so: abort ?
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error
-ld.so: _dl_catch_error
-ld.so: _dl_signal_exception
-ld.so: _dl_catch_exception
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data
index c0af84e..6c1efff 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data
@@ -4,8 +4,3 @@ libc.so: free
libc.so: malloc
libc.so: realloc
libm.so: matherr
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error
-ld.so: _dl_catch_error
-ld.so: _dl_signal_exception
-ld.so: _dl_catch_exception
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data
index 581e54b..eca59e1 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data
@@ -35,8 +35,3 @@ libc.so: realloc
libm.so: copysignl ?
libm.so: fabsl
libm.so: matherr
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error
-ld.so: _dl_catch_error
-ld.so: _dl_signal_exception
-ld.so: _dl_catch_exception
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data b/sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data
index d69b7ae..240d998 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data
@@ -3,8 +3,3 @@ libc.so: free
libc.so: malloc
libc.so: realloc
libm.so: matherr
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error
-ld.so: _dl_catch_error
-ld.so: _dl_signal_exception
-ld.so: _dl_catch_exception
diff --git a/sysdeps/unix/sysv/linux/riscv/localplt.data b/sysdeps/unix/sysv/linux/riscv/localplt.data
index e6d5330..ea88704 100644
--- a/sysdeps/unix/sysv/linux/riscv/localplt.data
+++ b/sysdeps/unix/sysv/linux/riscv/localplt.data
@@ -6,8 +6,3 @@ libc.so: free
libc.so: malloc
libc.so: memset ?
libc.so: realloc
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error
-ld.so: _dl_catch_error
-ld.so: _dl_signal_exception
-ld.so: _dl_catch_exception
diff --git a/sysdeps/unix/sysv/linux/s390/localplt.data b/sysdeps/unix/sysv/linux/s390/localplt.data
index c0af84e..6c1efff 100644
--- a/sysdeps/unix/sysv/linux/s390/localplt.data
+++ b/sysdeps/unix/sysv/linux/s390/localplt.data
@@ -4,8 +4,3 @@ libc.so: free
libc.so: malloc
libc.so: realloc
libm.so: matherr
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error
-ld.so: _dl_catch_error
-ld.so: _dl_signal_exception
-ld.so: _dl_catch_exception
diff --git a/sysdeps/unix/sysv/linux/sh/localplt.data b/sysdeps/unix/sysv/linux/sh/localplt.data
index 6491b9e..3d2e4c1 100644
--- a/sysdeps/unix/sysv/linux/sh/localplt.data
+++ b/sysdeps/unix/sysv/linux/sh/localplt.data
@@ -11,8 +11,3 @@ libc.so: __errno_location
libm.so: matherr
# Generated by the compiler because there is no trap insn pattern.
libc.so: abort ?
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error
-ld.so: _dl_catch_error
-ld.so: _dl_signal_exception
-ld.so: _dl_catch_exception
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data b/sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data
index 38309a1..b5fc6d9 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data
@@ -18,8 +18,3 @@ libc.so: free
libc.so: malloc
libc.so: realloc
libm.so: matherr
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error
-ld.so: _dl_catch_error
-ld.so: _dl_signal_exception
-ld.so: _dl_catch_exception
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data b/sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data
index 6a216f3..12520b1 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data
@@ -17,8 +17,3 @@ libc.so: free
libc.so: malloc
libc.so: realloc
libm.so: matherr
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error
-ld.so: _dl_catch_error
-ld.so: _dl_signal_exception
-ld.so: _dl_catch_exception
diff --git a/sysdeps/x86_64/localplt.data b/sysdeps/x86_64/localplt.data
index d1f2e26..0d424a5 100644
--- a/sysdeps/x86_64/localplt.data
+++ b/sysdeps/x86_64/localplt.data
@@ -8,8 +8,3 @@ libc.so: free + RELA R_X86_64_GLOB_DAT
libc.so: malloc + RELA R_X86_64_GLOB_DAT
libc.so: realloc + RELA R_X86_64_GLOB_DAT
libm.so: matherr + RELA R_X86_64_GLOB_DAT
-# The TLS-enabled version of these functions is interposed from libc.so.
-ld.so: _dl_signal_error + RELA R_X86_64_GLOB_DAT
-ld.so: _dl_catch_error + RELA R_X86_64_GLOB_DAT
-ld.so: _dl_signal_exception + RELA R_X86_64_GLOB_DAT
-ld.so: _dl_catch_exception + RELA R_X86_64_GLOB_DAT