9e78f6f6e7
This change moves the main implementation of _dl_catch_error, _dl_signal_error to libc.so, where TLS variables can be used directly. This removes a writable function pointer from the rtld_global variable. For use during initial relocation, minimal implementations of these functions are provided in ld.so. These are eventually interposed by the libc.so implementations. This is implemented by compiling elf/dl-error-skeleton.c twice, via elf/dl-error.c and elf/dl-error-minimal.c. As a side effect of this change, the static version of dl-error.c no longer includes support for the _dl_signal_cerror/_dl_receive_error mechanism because it is only used in ld.so.
22 lines
596 B
Plaintext
22 lines
596 B
Plaintext
libc.so: calloc
|
|
libc.so: free
|
|
libc.so: malloc
|
|
libc.so: memalign
|
|
libc.so: raise
|
|
libc.so: realloc
|
|
libm.so: matherr
|
|
libpthread.so: __errno_location
|
|
libpthread.so: raise
|
|
# The dynamic loader needs __tls_get_addr for TLS, and uses __libc_memalign
|
|
# internally to allocate aligned TLS storage. The other malloc family of
|
|
# functions are expected to allow user symbol interposition.
|
|
ld.so: __tls_get_addr
|
|
ld.so: __libc_memalign
|
|
ld.so: malloc
|
|
ld.so: calloc
|
|
ld.so: realloc
|
|
ld.so: free
|
|
# The TLS-enabled version of these functions is interposed from libc.so.
|
|
ld.so: _dl_signal_error
|
|
ld.so: _dl_catch_error
|