about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/alpha
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2022-11-03 09:39:31 +0100
committerFlorian Weimer <fweimer@redhat.com>2022-11-03 09:39:31 +0100
commitee1ada1bdb8074de6e1bdc956ab19aef7b6a7872 (patch)
tree4e70dfcb1c076da10542c08d7e0b3900a0a34adc /sysdeps/unix/sysv/linux/alpha
parentf4ce325dfc50e13cf8240424fa0561fca78e72e7 (diff)
downloadglibc-ee1ada1bdb8074de6e1bdc956ab19aef7b6a7872.tar.gz
glibc-ee1ada1bdb8074de6e1bdc956ab19aef7b6a7872.tar.xz
glibc-ee1ada1bdb8074de6e1bdc956ab19aef7b6a7872.zip
elf: Rework exception handling in the dynamic loader [BZ #25486]
The old exception handling implementation used function interposition
to replace the dynamic loader implementation (no TLS support) with the
libc implementation (TLS support).  This results in problems if the
link order between the dynamic loader and libc is reversed (bug 25486).

The new implementation moves the entire implementation of the
exception handling functions back into the dynamic loader, using
THREAD_GETMEM and THREAD_SETMEM for thread-local data support.
These depends on Hurd support for these macros, added in commit
b65a82e4e757c1e6cb7073916 ("hurd: Add THREAD_GET/SETMEM/_NC").

One small obstacle is that the exception handling facilities are used
before the TCB has been set up, so a check is needed if the TCB is
available.  If not, a regular global variable is used to store the
exception handling information.

Also rename dl-error.c to dl-catch.c, to avoid confusion with the
dlerror function.

Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
Diffstat (limited to 'sysdeps/unix/sysv/linux/alpha')
-rw-r--r--sysdeps/unix/sysv/linux/alpha/localplt.data5
1 files changed, 0 insertions, 5 deletions
diff --git a/sysdeps/unix/sysv/linux/alpha/localplt.data b/sysdeps/unix/sysv/linux/alpha/localplt.data
index 44bf36f4f1..8548e0294b 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